相比传统的pulse网站指标,google提出的heart指标,对于桌面应用程序有同样的指导价值。对于只关注装机量和日启动量来说,我们做的还是太少了。
google research出品的东东内容都比较丰富。值得学习和借鉴啊。感觉都是被国际重要会议索引的,牛X。
http://research.google.com/pubs/pub36299.html
《Measuring the User Experience on a Large Scale: User-Centered Metrics for Web Applications》
在做项目之处, 也要想好评价的指标,否则做出来的东西就变成不可衡量的啊。好和坏谁又能定呢。
PULSE指标
Page view/页面浏览量
Uptime/响应时间
Latency/延迟
Seven days active user/7天活跃用户数
Earning/收益
HEART指标
Happiness/愉悦度
Engagement/参与度
Adoption/接受度
Retention/留存率
Task success/任务完成度
中文翻译:http://www.ysy.me/2011/07/06/google-metrics-framework/
Facebook的一些信息安全filter,对我们做安全的还是有一些启发的。
Facebook比以往更为重视强化信息安全功能。这些改进减少了一些问题。 每天阻止600,000个被破坏的登录是一个巨大的努力!然而,信息安全功能并不简单。Facebook承认其安全功能的复杂度,因此随后官方发布了这份信息图。在这份信息图里,Facebook强调在 Facebook,我们对于用户的隐私和安全非常谨慎。通过例如数据库检查和路障这样的科技创新和人工操作的结合保障用户隐私安全。
原作发表于《程序员》杂志2005年第一期,看后觉得有点意思,转载一下。
素材、策划:孟岩
执笔:方茜
(取材自: http://khason.biz/blog/2004/12/why-microsoft-can-blow-off-with-c.html )
C#会前途黯淡,只因大胡子惹的祸?!有点耸人听闻吧。可是色列软件工程师 Tamir Khason自有一套理论(也许他曾学过中国的面相术)得出这样的结论。不信,咱就瞧瞧他发在自己Blog上的一篇文章,看看他有什么样的奇思妙想。
Round 1
John Backus,Fortran之父
Alain Colmerauer, Prolog之父
Jean Ichbiah, Ada之父
以上三人分别发明了Fortran、 Prolog和 Ada语言。这些语言都有着过人的优点,每一种在当时都可以称得上是创意不凡。很可惜,三个当中没有一个广泛流传。与之相对,下面的Brain Kernighan、Dennis Ritchie和Ken Thompson所“炮制” 出的C和Unix,已经使用了三十年了,也许再用100年也没问题!
C语言宗师Brain Kernighan
UNIX/C创造者Ken Thompson 和 Dennis Ritchie
Round 2
以下两位分别是Alan Kay和Kristen Nygaard。是他们发明了第一批面向对象语言 Smalltalk和Simula 67。不过,这些语言都行之不远。
Smalltalk之父Alan Kay
Simula 67之父Kristen Nygaard
Brad Cox,曾尝试把OO加入到C中,于是Objective-C诞生。然而,Objective-C 也是命运不济,目前只有在Mac操作系统中还能看到它的踪影。 与之相对,另一位所做的相同尝试却大红大紫,这就是Bjarne Stroustrup所写的C++。其实,看看 Stroustrup的脸就不难明白为什么这两种语言的命运会如此不同。
Objective-C之父Brad Cox
C++之父Bjarne Stroustrup
到这里,你能猜出点规律来吗?
答案揭晓:有大胡子——有旺运;没胡子——只有干瞪眼!
由此,看看下面两位的胡子,C#和Java究竟鹿死谁手,不就是不言自明的吗?
C#之父Anders Hejlsberg
Java之父James Gosling
Round 3
当然,你也可以不信。不过,还有一个例证可以很好地说明。下面两位分别是Basic的作者Thomas Kurtz 与Perl的作者Larri Wall。两人虽然没有令人咋舌的大胡子,但两撇小胡子倒也浓密有致。自然,这两种语言红得发紫。
Thomas Kurtz, Basic之父
Larry ...
Facebook刚刚在俄勒冈州Prineville新建了一座数据中心,号称是全球能效最高的数据中心。硅谷知名博客作者Scoble有幸受到参观邀请,并拍摄了一些照片。下面我们就一起去看看Facebook数据中心到底长什么样。
下面这张照片的建筑物体积很大,前面有很多太阳能电池板,连在一起有三个沃尔玛那么大。但大部分太阳能并非用于数据中心,而是周围的一些建筑。
Facebook自己的旗帜:
继续往里走,看到了Facebook的标志:
走过标志走进走廊是一台台显示器,告诉你数据中心的状态和冷却系统的工作原理:
走进安全门可以看到当地员工制作的毯子,在他们眼里社交网络应该是这样的:
Facebook现场运营主管 Thomas Furlong 展示一系列处理空气的房间,照片中为巨大的过滤墙之一:
在来一张过滤室:
走过两间过滤室之后又是一间过滤室,空气在这里混合,用于控制湿度和温度,同时还有很多巨大的风扇,每个上面都有一个5马力的电动机。
巨型过滤室的后面:
Here Thomas 站在风扇前:
风扇近照,让空气通过数据中心和过滤处理室:
最后,空气进入最后一道工艺,然后就可以进入数据中心。在这道工序中,小型喷嘴把水喷到空气中,随着水分迅速蒸发,空气被冷却。
巨大的喷水室:
喷头近照:
最后跟随空气进入数据中心,这里有很多排架子,每排架子上都有一排排服务器:
180度视角主走廊照片(可以看到的一侧为最新的“开放计算”服务器;看不到的一侧为Facebook原来的服务器):
服务器阵列全景图:
很多架构师都是从好的开发人员逐步过渡而来的,但并非每个好的开发人员都希望成为架构师,而且他们并不是都适合做架构师。无论您是打算进行职业转型的开发人员,还是寻找能承担体系结构设计责任的合适人选的经理,都务必对此转型过程有个清楚的了解。本文将讨论从实现专家到架构师的过渡过程。
在寻找优秀的指挥的时候,您首先要找的是一名优秀的音乐演奏家。但并非每个音乐演奏家都能成为优秀的指挥。架构师的专业发展方面也与此类似。越来越多的 IT 组织开始认识到良好软件体系结构的重要性,架构师职业正迅速发展为 IT 内一个独立的门类。由于要从相当小的候选范围内招募架构师,因此这就给管理带来了一些新挑战。即使人力资源部门找到了候选者,针对经验进行的筛选也比其他门类更为严格。跨越这些障碍的最快方式是要认识到,大部分好的架构师同时也是好的开发人员,因此寻找架构师人才时可能首先应该从普通开发人员中找起。招聘人员在对候选者(内部或外部)进行详细审查时,应该考虑这个观点。不过,对此资源进行挑选可能比较麻烦,因为只有极少的优秀开发人员具有成为架构师的特征或愿望。
本文列出了开发人员成为架构师要进行的工作。我将从可能考虑进行此转型的开发人员和评估进行此转型的开发人员的经理这两个方面来探讨这一问题。我还将提供一系列在做出这些决策时要考虑的因素。
个人特征
软件开发团队和管理层之间的联系始终是 IT 中的一个关键所在。二者都倾向于以完全不同的方式考虑给定的问题。大部分相关技术都是讨论项目经理应如何跟踪和解释开发人员的进度和问题。但沟通不足的情况仍然非常普遍,而且这是项目失败的首要原因。好的架构师是解决这个问题的最有效办法。架构师的主要责任是提供开发人员和项目经理之间的共用沟通媒体。他们负责让业务规则及需求与工程实践及限制相适应,以确保成功。以下是成功架构师的一些主要特征。
愿意并有能力进行沟通:在开发人员中发现架构师的最有价值标准是有效的沟通。您需要技术娴熟、经验丰富的开发人员,这样的人员需要有就项目中的业务相关问题进行沟通的经历。架构师经常必须对理解方面的差距进行预计,然后才能有所贡献。他们必须愿意克服困难来确保技术和业务观点的融合。他们并不必对意见交换工作进行计划和协调;这仍然主要是项目经理的工作。他们的任务是确定表述系统设计时的最佳工具和构件,以促进有效的意见交换。他们必须能够判断当前方法显得不足而需要采用新方法的情况。写作技能也非常重要,还需要具有制作草图的技能或使用制图软件的能力。
具有处理谈判细节方面的经验:架构师经常需要负责讨论系统开发的技术折衷方案。优先级的冲突可能会带来实践限制、风险规避或可能导致在各个不同业务组之间需求不同。优秀的架构师能够有效地评估技术可能性,并能在不损失项目的主要价值的前提下制订开发计划来处理各种利害关系和限制。这与前面讨论的沟通技能紧密相关,但同时也要体现架构师的技术能力。好的架构师候选者应该是经常帮助对有争议的讨论进行引导的人,能够使讨论得出新的想法,而不会使其在一个位置停滞不前。
自觉主动;积极解决设计问题:架构师的日常工作目标经常并不明确。很多开发人员直接参考功能规范来列出任务清单。架构师通常则是向这些开发人员提供所需结构的人员,以便尽可能提高工作效率。好的候选者不仅进行沟通方面的工作,而且也会预计各种设计问题并加以解决——通常在没有任何具体指示的情况下自觉进行。无论所分配的职责如何,积极参与项目的开发人员都有机会从一起工作的人员中脱颖而出。
抽象思维和分析:架构师必须能够理解表述模糊的概念并将其变成相关各方能够理解的项目构件。他们必须能够理解抽象概念,并以具体的语言对其进行沟通。开发人员中好的候选者经常要求或自己主动解释开发生命周期中容易混淆的问题。他们能迅速评估各种想法并将其纳入后续工作的操作建议中。
开发人员经常具有很强的数学能力,而好的架构师则倾向于表现出更强的口头表达能力。管理人员经常说开发人员具有“工程意识”,而这是一个用于评估架构师的非常有意义的方面。架构师应该具有很强的解决技术问题的能力,但还必须能够准确获知更为全面的人员如何与技术交互的信息。这要求具有某种形式的抽象思维(而不再是代码的细节),这种思维能力可能较难形成。
有些人认为,某种级别的正式教育是成为优秀开发人员的必备条件之一,我并不同意这种精英论。我遇到了很多高中就辍学的优秀开发人员。不过,对于体系结构设计工作,我的个人经验以及我对所需能力的认识都让我相信,好的架构师通常至少获得了一个有挑战性的学士学位。
跟踪生命周期
好的架构师通常有在具备定义良好的软件开发生命周期(Software Development Life Cycle,SDLC)的组织工作的经验。架构师必须理解在其所属专业内最重要的操作过程。这并不意味着需要有其他前提,例如,并不需要高能力成熟度模型(Capability Maturity Model,CMM)级别的工作经验。好的架构师可能来自使用 SDLC 的多个小型迭代的极限编程(Extreme Programming,XP)方法的组织。务必注意各种传统软件开发操作,如 Michael A. Jackson 的方法:Jackson 结构编程(Jackson Structured Programming,JSP)和 Jackson 系统开发(Jackson System Development,JSD)。Jackson 的研究对架构师职业发展的意义就像 Donald Knuth 的研究对程序员一样重要。架构师可以偏爱任何经典的、经过时间考验的软件系统开发方法。
SDLC 也可以成为评估架构师合适人选的有用机制。每个 SDLC 阶段都具有能提供相关线索的特征。SDLC 包含很多小的变体,但在此部分,我将使用几乎所有方法的公共基础部分。下面的列表详细说明了 SDLC 的各个阶段,并列出了好的架构师候选者在每个阶段表现出来的特征。
分析:在分析期间,好的架构师会考虑非技术影响,以便了解需求和将在其中进行开发的环境。架构师可为风险评估任务带来广泛的软件经验供参考。寻找具有丰富经验的开发人员,以帮助业务部门理解技术人员正确解释需求所需的信息。寻找在开发的早期阶段能够预计可能遇到的问题的开发人员。
设计:在高级设计期间,好的架构师会收集问题空间的各个抽象元素,并就其进行沟通,以便开发团队草拟将要开发的系统的相关图表。架构师负责将需求谨慎地映射到所得到的系统体系结构的功能。在详细设计期间,他们所扮演的角色并不是核心角色,但为了根据整个系统的规则对特定模块的元素进行审查,仍然需要他们。寻找善于让团队能够预计设计决策对最终系统的影响的开发人员。寻找善于确定一些最佳构件来促进与技术和非技术受众沟通设计问题的开发人员。
实现:在实现期间,架构师对项目进行引导,以确保其符合系统体系结构。他们在一线评估技术更改请求,并确定如何对设计进行调整,以最好地处理此类请求。架构师还要密切了解开发人员的进度,特别要跟踪系统中模块间的集成点的状态。寻找经常对讨论进行引导来连接多个子系统的开发人员。寻找项目经理可以依赖其快速地进行与更改和出现的问题相关的风险评估的开发人员。
测试:架构师对系统集成和用户接受度测试进行指导,并负责评估进度的正确沟通的持续测试结果。寻找理解错误模式且善于将测试复查结果转换为行动计划的开发人员。
维护:在维护期间,架构师将发起关于系统集成的讨论。无论处理 IT 基础设施问题,还是确保部门之间的技术合作,架构师都必须完全理解应用程序,必须快速学习姊妹应用程序的体系结构,而且必须就集成点和风险进行有效沟通。寻找具有系统集成经验且表现出快速掌握全貌的能力的开发人员。系统集成是一项独特的任务。
架构师培养建议
有些组织能比其他组织更有效地进行架构师培养。如果充分考虑到招聘此类新专业人才的困难,努力促成能鼓励开发人员发展为架构师的环境是非常明智的策略。但务必避免对不愿意或不适合走这条路的开发人员进行处罚。组织应该为开发人员制订多条发展路线,包括那些愿意继续担任开发人员的人。对架构师而言,资深开发人员不可或缺。他们可以实现系统中最关键的模块。通过对其他开发人员进行代码检查和测试支持,他们可帮助确保总体软件质量,而如果质量不能保证,即使最好的体系结构也毫无用处。
组织应制订个人评估程序,以鼓励开发人员考虑其职业目标,其中要包含体系结构设计的选项。应该鼓励经理在其下属中寻找体系结构设计人才。应该实现指导计划,让架构师与希望成为架构师的开发人员协作工作。应该鼓励开发人员通过参加各种协会、撰写文章和参加会议,从而参与到专业领域中来。通过这样参与进来,可帮助开发人员从新的角度理解系统,并帮助他们更好地就其认识进行沟通。这样还能培养可提高效率的重要创新想法。
结束语
开发人员一旦迈出了通向体系结构设计专业方向的第一步,就可以利用很多资源来获得帮助,其中包括很多来自 IBM 的资源。有时候,此过程的最困难的部分就是第一步,而本文提供了一些线索和提示,经理和开发人员可以利用其来评估应该鼓励哪些人努力成为架构师。
转自:developerWorks 中国,07年的一篇文章,里面的一些观点还是比较受益的
Chrome is the newest child added to the constantly feuding web browser family. Although Google Chrome is comparatively new, it has been producing some major buzz around web for its performance, minimalist interface, and usability.
Another useful side of Chrome is the extensions that give the user added functionality for common web ...
3D是个可愉悦每个人的好东西,jQuery可以帮助添加令人惊艳的3D效果。从图表到菜单、按钮,3D将用户体验提高到一个新的高度。 jQuery 3D效果的综合列表,为我们展示了jQuery的创造性应用带给我们惊人的效果。以下列出的20个效果案例,附带站点、演示和下载。
以下是相册切换3D效果:
1. jQuery 3D Theatre Carousel
jQuery 3D Theatre Carousel Web Site
jQuery 3D Theatre Carousel Demo
jQuery 3D Theatre Carousel Download
2. 3D Gallery View jQuery Plugin
Web Site
Demo
Download
3. Cloud Carousel – A 3d Carousel in Javascript
Web Site
Demo
Download
4. Roundabout for jQuery
Web Site
Demo
Download
5. Roundabout Shapes for jQuery
Web Site
Demo
Download
6. ...
手机操作系统进化的历史:http://www.xcubelabs.com/evolution-of-mobile-operating-systems.php
[caption id="attachment_718" align="aligncenter" width="940" caption="infographic手机操作系统历史"][/caption]
你是否想过,计算机为什么会加减乘除?或者更直接一点,计算机的原理到底是什么?
Waitingforfriday有一篇详细的教程,讲解了如何自己动手,制作一台四位计算机。从中可以看到,二进制、数理逻辑、电子学怎样融合在一起,构成了现代计算机的基础。
一、什么是二进制?
首先,从最简单的讲起。
计算机内部采用二进制,每一个数位只有两种可能"0"和"1",运算规则是"逢二进一"。举例来说,有两个位A和B,它们相加的结果只可能有四种。
以Facebook现在的经营规模,诸多传统服务器的技术均将崩溃或根本无法支撑。那么面对5亿的活跃用户,Facebook的工程师们又将如何让网站平稳运转呢?伯乐在线 - 职场博客的这篇文章将展示Facebook的工程师完成这个艰巨任务所用到的一系列软件。
Facebook级别规模的挑战
在我们深入细节之前,先了解一组Facebook不得不面对数据,你就可以想象这种规模。
Facebook每月的PV量:630,000,000,000 (6千3百亿)
Facebook上的图片数量超过其他图片网站的总和(包括诸如Flickr这样的图片网站)
每个月有超过30亿的图片上传到Facebook
Facebook系统每秒可以处理120万张图片。这还不包括Facebook的CDN处理的图片。
每月处理超过250亿的信息内容(包括用户状态更新,评论等)
Facebook的服务器数量超过3万台(此数据为2009年的数据)
Facebook所用的软件
从某些方面来说,Facebook还是属于LAMP类型网站,但是,为了配合其他大量的组件和服务,Facebook对已有的方法,已经做了必要的改变、拓展和修改。
比如:
Facebook依然使用PHP,但Facebook已重建新的编译器,以满足在其Web服务器上加载本地代码,从而提升性能;
Facebook使用Linux系统,但为了自身目的,也已做了必要的优化。(尤其是在网络吞吐量方面);
Facebook使用MySQL,但也对其做优化。
还有定制的系统,比如, Haystack -- 高度可扩展的对象存储,用来处理Facebook的庞大的图片;Scribe -- Facebook的日志系统。
下面展现给大家的是,全球最大的社交网站Facebook所使用到的软件。
Memcached
Memcached是一款相当有名的软件。它是分布式内存缓存系统。Facebook(还有大量的网站)用它作为Web服务器和MySQL服务器之间的缓存层。经过多年,Facebook已在Memcached和其相关软件(比如,网络栈)上做了大量优化工作。
Facebook运行着成千上万的Memcached服务器,借以及时处理TB级的缓存数据。可以这样说,Facebook拥有全球最大的Memcached设备。
HipHop for PHP
和运行在本地服务器上代码相比,PHP的运行速度相对较慢。HipHop把PHP代码转换成C++代码,提高编译时的性能。因为Facebook很依赖PHP来处理信息,有了HipHop,Facebook在Web服务器方面更是如虎添翼。
HipHop诞生过程:在Facebook,一小组工程师(最初是3位)用了18个月研发而成。
Haystack
Haystack是Facebook高性能的图片存储/检索系统。(严格来说,Haystack是一对象存储,所以它不一定要存储图片。)Haystack的工作量超大。Facebook上有超过2百亿张图片,每张图片以四种不同分辨率保存,所以,Facebook有超过8百亿张图片。
Haystack的作用不单是处理大量的图片,它的性能才是亮点。我们在前面已提到,Facebook每秒大概处理120万张图片,这个数据并不包括其CDN处理的图片数。这可是个惊人的数据!!!
BigPipe
BigPipe是Facebook开发的动态网页处理系统。为了达到最优,Facebook用它来处理每个网页的分块(也称“Pagelets”)。
比如,聊天窗口是独立检索的,新闻源也是独立检索的。这些Pagelets是可以并发检索,性能也随之提高。如此,即使网站的某部分停用或崩溃后,用户依然可以使用。
Cassandra
Cassandra是一个没有单点故障的分布式存储系统。它是前NoSQL运动的成员之一,现已开源(已加入Apache工程)。Facebook用它来做邮箱搜索。
除了Facebook之外,Cassandra也适用于很多其他服务,比如Digg。
Scribe
Scribe是个灵活多变的日志系统,Facebook把它用于多种内部用途。Scribe用途:处理Facebook级别日志,一旦有新的日志分类生成,Scribe将自动处理。(Facebook有上百个日志分类)。
Hadoop and Hive
Hadoop是款开源Map/Reduce框架,它可以轻松处理海量数据。Facebook用它来做数据分析。(前面就说到了,Facebook的数据量是超海量的。)Hive起源于Facebook,Hive可以使用SQL查询,让非程序员比较容易使用Hadoop。(注1: Hive是是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 )
Thrift
Facebook在其不同的服务中,使用了不同的语言。比如: PHP用在前端,Erlang用于聊天系统,Java和C++用于其它地方,等等。Thrift是内部开发的跨语言的框架,把不同的语言绑定在一起,使之可以相互“交流”。这就让Facebook的跨语言开发,变得比较轻松。
Facebook已把Thrift开源,Thrift支持的语言种类将更多。
Varnish
Varnish是一个HTTP加速器,担当负载均衡角色,同时也用于快速处理缓存内容。
Facebook用Varnish处理图片和用户照片,每天都要处理十亿级的请求。和Facebook其他的应用应用一样,Varnish也是开源的。
Facebook可以平稳运行,还得利于其他方面
虽然上面已经提到了一些构成Facebook系统的软件,但是处理如此庞大的系统,本身就是一项复杂的任务。所以,下面还将列出使Facebook能平稳运行的一些东西。
逐步发布&暗启动
Facebook有一个系统,他们称之为“门卫”。该系统可以针对不同种类的用户运行不同的代码。(它简单介绍了代码库中的不同条件。)该系统让Facebook逐步发布新特性、A/B测试、激活仅针对Facebook员工的特性 等等。
门卫系统也让Facebook做些“暗启动”的事情。比如,在某一特性上线之前,可以激活该特性背后的元件。另外,它还可以做模拟压力测试,发现瓶颈和潜在的问题。默默启动一般都是在正式启动之前的2周完成。
实时系统的简介
Facebook会仔细监控自身系统,有趣的是,它还监控每个PHP函数在实时生产环境下的性能。这一实时PHP环境监控是通过一个叫XHProf的开源工具完成的。
逐步禁用某些特性,借以提高性能
如果Facebook遇到性能问题,Facebook有大量的途径来逐步禁用不很重要的特性,以提高其核心特性性能。
尚未提到的东西
虽然这里无法过多深入硬件方面,但硬件绝对是Facebook能达到空前规模的重要因素。比如,和其他大型网站一样,Facebook也用CDN来处理静态内容。Facebook还在美国西部的俄勒冈州建有一超大的数据中心,可以随时增加服务器。
当然了,除了前面已经提到的,还有其他大量的软件没有说到。但是,希望能突出其中非常有特色的。
Facebook和开源之间的“恋情”
Facebook和开源之间联系,此文不能不提,虽不能说Facebook是多么地钟爱开源,但至少可以这样说,Facebook是“爱”着开源的。
Facebook不仅使用(也捐赠)开源软件,比如,Linux、Memcached、MySQL、Hadoop等等,它还内部开发不少软件,并且也将之开源。
Facebook开发的开源工程,包括HipHop、Cassandra、Thrift和Scribe。另外,Facebook也把Tornado开源了。Tornado是一个高性能的Web服务器框架,由FriendFeed幕后团队开发而成。(2009年8月,Facebook收购FriendFeed。)
(Facebook所用到的开源软件,可以在Facebook的开源页面找到。)
面临更多的大规模挑战
Facebook以一种令人难以置信的速度成长。它的用户群几乎是成倍增加,活跃用户数量现已接近5亿。而且,谁都无法预测今年底,活跃用户量会到多少。
Facebook甚至成立了一个专门的“成长小组”,该小组不断思考如何让人们使用facebook并融入到facebook中。
这一快速成长,意味着Facebook将遇到不同的性能瓶颈。Facebook会面临来这如下方面的挑战:PV、搜索、上传的图片和状态消息,用户之间的交互和用户和Facebook之间的交互带来的挑战。
这也是Facebook面对的事实。Facebook的工程师们将继续寻求新方法来扩展(这不只是增加服务器的问题了)。比如,随着网站成长,其图片存储系统已经多次完全重写。
所以,我们将看到Facebook的工程师们奔向下一个“山头”。我们相信他们不会辜负众望。毕竟,他们正跨越山头,那个我们大多数人仅能向往的山头;他们正扩展网站,那个用户来自全球各地的网站。当你实现那个里程碑时,你将彪炳史册。