Featured Posts

【翻译】构建成功web应用的十项黄金法则 构建成功web应用的十项金法则  By Fred Wilson 翻译:澄净 Review:卓和 & Lily   谢谢青云推荐了这篇这么好的演说 谢谢卓和百忙中抽空帮我review,修改,提出很好的建议 谢谢lily,在我初稿完成后大半夜还帮我校对,修正,提出非常宝贵的意见 (翻译功力较弱,不对的地方欢迎指正,^_^)   说明:...

Read more

终于坚持下来了 "2010年7月26日 下午3点整" 这是一个对于我,对于我们招聘项目组来说都值得纪念的日子, 淘宝全新招聘项目终于上线了(http://job.taobao.com). 我为我们整个团队感到自豪. 关于这个项目有太多想要说的了...... 逐浪堂时期: 1....

Read more

[Mac下用rhodes构建android application]之环境搭建 可能大家不熟悉rhodes, 但是如果你是ruby 爱好者同时又是手机应用开发的爱好者,那对这个肯定很熟悉了. 它是一个开源的框架,可以让你用ruby+html就能开发出原生的手机应用(注意:不是web应用噢,^_^),并且它支持几乎所有的主流系统,包括iphone...

Read more

[Dive Into HTML5部分翻译]继续深入HTML5:The... 英文原文地址:http://diveintohtml5.org/semantics.html 这一章节,将会优化一个HTML页面(此页面本身并没有问题).优化的过程中,有的部份代码上会变得更加精简,而有的部份则会变得相对较多.但是,整个页面都会变得更加语义化....

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Microdata 英文原文地址:http://diveintohtml5.org/detect.html#microdata Microdata   Microdata 是为你的web页面提供额外的语义的一种标准的方式。举个例子:你可以使用microdata来指明一张图片在某种特定的许可证下可以使用的。你可以用microdata来标记一个“关于我”的页面。浏览器,浏览器扩展程序以及搜索引擎能把你的microdata标记转化成一个vCard(一种用于共享联系人信息的标准格式)。你同时也可以定义属于你自己的microdata词汇。 HTML5...

Read more

淘宝招聘前端开发&JAVA工程师(实习/应届/社会) 欢迎大家加入淘宝, 请投递简历到:chengjing@taobao.com. 工作地点:杭州 以下是面对校园的应届生和实习生招聘要求 面向专业: 计算机、电子、软件工程等,本科及以上学历。 你将负责: 1、与交互设计师及视觉设计师协作,根据模型完成Web页面制作; 2、配合后端开发人员实现产品交互界面; 3、维护及优化网站前端性能。 你需要具备: 1、热爱互联网,对Web开发充满激情;注册并了解各种最新最有趣的Web服务; 2、喜欢手写HTML/CSS/JavaScript|ActionScript...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Form... 英文原文地址:http://diveintohtml5.org/detect.html#input-autofocus Form Autofocus (表单自动聚焦) 很多网站使用Javascript让web表单的第一个输入框自动获得焦点,举个例子:Google.com的首页会让搜索框自动获取焦点以便于你输入搜索关键字。这对于大多数的人来说的确很方便,但是对于那些有特殊需求的用户来说却未必如此。比如你按下空格键是想滚动页面,但是因为焦点已经被聚到了表单中的输入框,因此页面并不会如你所愿的滚动(而是会在输入框中输入了空格);再比如你在页面还在加载的时候把焦点聚焦到了其他的输入框,而正当你想要在这个地方进行输入操作的时候,脚本却将焦点自动对焦到了设定要自动对焦的输入框中,这个时候你输入的文字就不会出现在你预想的输入框中。 因为自动聚焦是用Javascript来实现的,因此总会有办法来处理所有这些极端的情况,但是却没有满足那些不想要网页自动对焦的用户。   为了解决这样的问题,HTML5在所有的web表单控件上引入了一个autofocus的属性。顾名思义,这个属性的意思就是会将焦点自动聚集到特定的input元素上。因为这种实现方式是通过标记的方式而不是javascript的方式因此对于所有网站都有效。浏览器的提供商也可以提供用户一个禁用该功能的方法。 要检测浏览器是否支持自动聚焦可以使用之前介绍的检测方法中的第二种。如果你的浏览器支持该功能的话,用来检测创建的input元素会有一个autofocus的属性(即使你没有显示的设置该属性),反之,该input元素就不会有属性。 function...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Placeholder... 英文原文地址:http://diveintohtml5.org/detect.html#input-placeholder Placeholder  Text(占位符) 除了新的类型的input元素,HTML5给现存的form型元素做了一些小的改进,其中一个改进就是允许给input元素设置占位字符功能。只要input元素内容为空或者失去焦点,占位符就会显示,而一旦input元素获得焦点(鼠标点击或者Tab)它就会消失。如果你对此还有疑问的话,可以去看web...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Input... 英文原文地址:http://diveintohtml5.org/detect.html#input-types Input Types 你或许对如何构建一个web表单了如指掌:创建一个<form>元素,然后创建一些<input type="text">的元素或者一个<input...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Geolocation 英文原文地址:http://diveintohtml5.org/detect.html#geolocation   Geolocation Geolocation特性能够识别出你在地理位置并且如果你愿意的话,你可以把你的位置信息分享给别人。识别你地理位置的方法有很多——可以通过你的ip地址,利用信号塔获取你手机无线的连入位置,或者通过能够利用卫星定位获得经度纬度的GPS设备。 (以下是提问回答)   问:geolocation是HTML5的一部分吗?为什么你要这里介绍这个?   答:在浏览器支持新的HTML5特性的同时,对Geolocation的支持正在被加入到其中。严格的说,geolocation是Geolocation...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Offline... 英文原文地址: http://diveintohtml5.org/detect.html#offline   Offline Web Application(离线Web应用)   查看一个离线的静态web页面是很容易的: 连到internet,载入这个web页面,随后断开网络,躲到一个角落里在你空的时候就可以看这个页面了(你甚至可以为了减少时间,省去"躲到一个角落"这一步).这对于一个静态的web页面是比较容易实现,可是对于像Gmail 和 Google...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Web... 英文原文地址:http://diveintohtml5.org/detect.html#workers   Web Workers Web Workers 提供了一种标准的方式让浏览器能够在后台运行Javascript。有了它,你就能够或多或少的实现多线程了(就好像你的计算机能够同一时间运行多个程序一样)。这些“后台线程”可以在页面响应用户的滚屏、单击或者输入操作的时候做些诸如复杂的数学运算、发送请求或者操作本地数据库的事情。 检测你的浏览器是否支持web...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Local... 英文原文地址:http://diveintohtml5.org/detect.html#storage   Local Storage(本地存储) HTML5 storage提供了一种方式让网站能够把信息存储到你本地的计算机上,并再以后需要的时候进行获取。这个概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候cookie都会被发送过去。HTML5的storage是存储在你的计算机上,网站在页面加载完毕后可以通过Javascript来获取这些数据。   (以下是提问回答) 问:本地存储真的是HTML5的一部分吗?那为什么它出现在另外单独的标准中? 答:简单的说本地存储是HTML5的一部分。更为详细准确的说是本地存储过去是HTML5的标准中的一部分,而后来由于有些工作组的人表示HTML5太庞大了,于是就剥离出来作为一个单独的标准。这听起来好像是把一块馅饼分成很多块目的是为了减少总的卡路里......好吧,世界的标准就是这么的古怪!   想要检测你的浏览器是否支持HTML5的本地存储特性可以使用之前介绍过的检测方法中的第一种方法。如果你的浏览器支持该特性的话,那么全局对象:window上会有一个localStorage的属性,反之,你的浏览器不支持的话,那么该属性值为undefined function...

Read more

IE6 Must Die -- Douglas Crockford 在小马回来后的blog中得知老道在Qcon上的一页ppt,看到之后感觉巨爽无比~: 图片来自,小马的flickr:http://www.flickr.com/photos/23912271@N06/4562183323/

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Video... 英文原文链接地址:http://diveintohtml5.org/detect.html#video-formats  Video Formats(视频格式) 视频格式就好比书面语言。一份用英文描述和一份用西班牙文描述的具有相同内容的报纸,其实它们本质都是在描述同样的信息,但是对于只会英文的你而言,只有英文的那份对你才是真正有帮助的。同样的,对于一个视频而言,你的浏览器需要“读得懂”描述你视频的语言。 描述视频的语言被称为:"codec"——一种用来将视频编码成为字节流的算法。目前世界上有许许多多的编码算法,那么你应该使用哪一个?一个不幸的事实是:不是所有的浏览器都遵循一种视频编码算法,它们主要遵循两种编码算法,一种是Safari和iphone遵循的需要收费的,另外一种是Chromium和Mozilla...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Video 英文原文地址:http://diveintohtml5.org/detect.html#video Video HTML5定义了一个新的元素:<video>,用来将视频内嵌到你的页面中。在页面中内嵌视频在过去如果没有诸如Apple的Quick...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Canvas... 英文原文链接地址:http://diveintohtml5.org/detect.html#canvas-text Canvas Text 即使你的浏览器支持The Canvas API,也有可能不支持The Canvas Text API,原因是The Canvas API一直在不断健壮不断的加入新的内容,the...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Canvas 英文原文地址:http://diveintohtml5.org/detect.html#canvas Canvas HTML5定义了<canvs>元素作为位图画布在浏览器中的相关解决方案,它用于渲染图形,游戏图像或者其他飞行中的视觉图形。一个Canvas代表了页面中的一个矩形区域,在这个区域里面,你可以用Javascript来画你想画的任何东西。HTML5定义了一系列的方法("The...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:Modernizr,... 英文原文地址:http://diveintohtml5.org/detect.html Modernizr是一个用来检测浏览器是否支持HTML5以及CSS3特性的基于MIT证书的开源Javascript库。在本书撰写的时候,它的最新版本是1.1.你也应该使用它最新的版本。那么如何使用它呢?其实只要将下面高亮的<script>元素放到你页面的<head>标签中所有<script>标签的最顶部就可以了。   Moderniz是自动运行的。也就是说没有诸如modernizr_init()之类的方法去调用以便于初始化。当它运行的时候,它会创建有一个叫“Modernizr”的全局对象,这个对象包含了一系列Boolean属性的集合,每个属性都表明了当前浏览器是否支持该HTML5特性。     举个例子,如果你的浏览器不支持canvas...

Read more

[Dive Into HTML5部分翻译]HTML5 特性的检测:检测技术 英文原书地址:http://diveintohtml5.org/detect.html No.2      检测HTML5的特性  你或许会问:“如果早期的浏览器不支持HTML5我该如何开始使用它呢?”。但是这个问题本身就会让人产生误解。HTML5只是一些特性的集合,因此你不能说检测浏览器“是否支持HTML5”,但是你可以检测浏览器是否支持诸如“canvas“,“video”,“geolocation”等等这些特性。 检测技术 当你的浏览器渲染一个web页面的时候,它会构造一个对象的集合DOM(Document...

Read more

2010年4月20日------这一天我很想哭! 昨天,2010年4月20日,我们项目组项目顺利完成的日子,同时也是项目被枪毙的日子,原因是:页面设计的不好看,无法上线! 整整20多天没日没夜的开发,最后却换来这么一句话,真的让我很难接受,很想哭,让整个项目组成员都很难接受,这么一句话直接等于宣判了项目组的死刑,这将近大半个月的努力全部白费。我也第一次感到如此失落...... 不想说导致这样的后果的责任在于谁,因为这已经没有任何意义。但是透过结果看反观过程,其实还有事有一件非常重要的事情值得我去反思和改正-------交流。 因为事实上对于页面比较重要的项目而言,页面的好看直接决定了项目的成功与失败。换句话说,你后台技术再牛,架构在好,页面不好看照样一点用都没有。而在这一方面我个人觉得我做的很不好。我们被分配的设计资源是个新手,在页面设计上可能功力还不是很深厚,而在这种情况下更加应该把设计同学的设计的样子要多给需求方看,让他们去提意见,直到最后需求方和设计的同学都OK之后,我们才应该开始做。而事实是由于我一味的关注着整个项目的完成时间进度,在设计同学设计出第一稿我该需求方看了下,而到了第二版之后就没有给需求方看,就是因为忽略了这一点,直接导致了项目组这样的结果, 其实我也不想说太多,最后我只想对我们全体项目组成员说:你们辛苦了,尽管结果不如我们愿,但是我们的过程还是一笔很宝贵的财富,对于我们每一个人都是这样,所以,尽管我们以后很难在一个项目组里面共事,但是我想说因为这个项目我们拥有了一支最强大,最和谐的团队,因为这个项目我们彼此更加的了解,更加的相亲相爱,不管以后会怎样,我们都是一个项目的成员,我们都是一个真正的团队。

Read more

[ECMAScript Language Specification]读书笔记之语言概览   ECMAScript内置的类型: Undefined, Null, Boolean, Number, String 和 Object. 而诸如Function, Array. global object, Math对象等等都是一些内置的对象. ECMAScript定义了一系列的操作符:...

Read more

Lazy Function Definition Coding的时候经常会遇到这样的Scenario: 页面上面有个Menu需要显示从服务器异步后去的数据(这些数据可能在其他地方还需要用到),这个时候代码通常会写成大致如下的样子: var...

Read more

赤裸裸的淘宝文化 结束了淘宝为期7天的百淘文化培训, 如果形容词不受限制来描述我对淘宝文化的感受, 那会是: 独特, 无与伦比, 疯狂, 难以置信 很黄很暴力......,但是如果只能用一个形容词那会是:...

Read more

  • Prev
  • Next

【翻译】构建成功web应用的十项黄金法则

1

Posted on : 29-07-2010 | By : 澄净 | In : translation

构建成功web应用的十项金法则

 By Fred Wilson

翻译:澄净

Review:卓和 & Lily

 

谢谢青云推荐了这篇这么好的演说
谢谢卓和百忙中抽空帮我review,修改,提出很好的建议
谢谢lily,在我初稿完成后大半夜还帮我校对,修正,提出非常宝贵的意见

(翻译功力较弱,不对的地方欢迎指正,^_^)
 
说明原文中的英文内容有些错误,和视频有出入, 所以按照视频为准。()中的内容均是我为了方便理解所加

原文以及视频地址
http://thinkvitamin.com/business/fred-wilsons-10-golden-principles-of-successful-web-apps/

演讲PPT地址:
http://www.avc.com/a_vc/2010/02/the-ten-golden-principals-for-successful-web-apps.html

作者:Fred Wilson,是个VC(风投),2006年时twitter的主要投资者之一。这里对作者就不多作说明了,他的blog:http://www.acv.com/。以下来自他在2010年2月在迈阿密举行的“web应用的未来年会(http://futureofwebapps.com/)”上的演讲。
 
============华丽的分割线<以下是正文内容>================
开场脚本

谢谢,大家好,很高兴能够来到迈阿密。昨晚我从纽约抵达的时候还很冷,地上都是积雪,但是现在这里却很温暖很舒服,非常高兴能够来到这里。

演说前,Carsonified(http://carsonified.com)有人提议希望我能够列出构建成功web应用的十项法则, 我想了想:“好吧,我都不知道是否能控制在是个”。不过,我现在已经列出来了并打算今天分享给大家。这些都是源自我十五年来对web应用投资实践所得的经验,包含了我所学到的,如哪些实践方式有效而哪些实践方式无效等等。

我用过很多的web应用,对于我们来说,我们的投资方式都是非常直接的。在投资前我们很清楚什么样的应用是我们感兴趣的,如果这产品我们不感兴趣,那我们就会直接告诉项目的负责人这不是我们想要的,相反,我们就会采纳这个产品。紧接着如果发现产品和我们产生共鸣,那么我们就会尝试去了解他。一旦这个产品,以及对应的服务和项目团队都非常吸引我们,那么我们就会去投资。

这十项是我一直在web应用中寻找的。我敢肯定在座的一定有人会不同意我的观点,但是这确确实实是对于优秀的web应用来说是不可或缺的。因此,今天的主题就是:“构建成功web应用的十项黄金法则”。
 

1. 速度


首先,我相信速度是最为重要的,对于一个web应用来说,速度快是所有特征中最重要的。如果你的应用很慢,人们是不会去用它的,这个在主流用户(一般用户)中要比高级用户更加来的显而易见。我认为对于高级用户来说,他们有的时候很能理解构建一个非常快速的应用背后的挑战和苦难,所以当他们面对速度缓慢的应用的时候,或许他们还能忍受。但就以我的妻子和孩子来说,他们是我认为的主流用户(一般用户),一旦某个应用速度慢了,他们不会耐心地等下去了,而是立马放弃使用。



我觉得web应用速度必须要快,如果慢了,后果是显而易见的。我们公司(风险投资公司)的每一个投资的项目在Pingdom(http://www.pingdom.com: 网站性能测试服务站点)上都有记录,我们每周都会去看。我们发现, 但凡有公司投资的应用陷入困境(出现性能问题,速度变慢了),这些应用通常也不会有快速的发展势头。这个真实有力的证据证实了“速度优于功能,速度是最重要的”这一事实,对于一个web应用来说,速度快不是一个优点,而是一项要求。
 

2.即时效用

“即时效用”的意思就是说服务(其实就是web应用,因为web应用多数就是提供服务)对你来说是实时有帮助的(简单实用,并且具有实时性)。如果你构建一个服务,然后用户要想使用他不得不花上一个小时的时间完成如下流程:配置服务,启动它,导入联系人,做许许多多和数据有关的事情。那我想绝大部分人会放弃使用。服务必须要对用户来说是即时可用的,而这一点被很多人所忽视.

利用许多技巧可以使得你能够快速让你的应用达到这种即时效用,举个比较适当的例子:当你构建一个信息服务的时候,一开始甚至长期你都可以在网络上的其他地方爬取比较受欢迎的信息作为你自己的服务。但是有一点,你一定要给用户即时的有帮助的信息。



另一个例子是:当Google大概4,5年前发布Google Video的时候,差不多同一时间YouTube也发布了同样的服务。如果你在上传一个视频到Google Video,之后你得到了一个消息说:“一个星期后你的视频将会被播放出来”。当然了,这样的方式显然不是很好。而相比,YouTube提供了在线实时的编码工作,你可以立马看到你上传的视频。这就是我想要说的关于即时效用的东西。
 

3.软件即是媒介


关于这点我有很多想说的. 我的观点是现在的软件即是媒介。特别是消费者软件,当人们使用你软件的时候就如同接触各种媒介一样。这里我所说的媒介是指诸如杂志,新闻,电视节目等传统媒介。比如”纽约时报”和“华尔街日报”;“浮华世界”(一本杂志)和“时尚”(时尚杂志);FOXNews和CNN,每一种媒介都有自己的特点,都有不同于其他媒介的独一无二的态度和坚持。

同传统的媒介一样, 我认为现在的软件也要有自己的个性特点,发出自己的声音,表达自己的态度。有些看上去诸如“Fail Whale(失败鲸)”(twitter宕机时候的提示图案)很“傻乎乎”的东西,其实也是一种个性化的东西。 虽然对于Twitter用户来说宕机这件事难免有些尴尬,但人们仍会穿着”Fail Whale”的衣服在街上行走, 这至少证明了一点: 这个服务背后有属于自己的特点,它提供了一种媒介,用同一种声音将人们联系在一起. 这就是我想要说的. 这一点对于web应用来说是非常重要的.
 

4.少即是多

“少即是多”,这一点我深信不疑,尤其在你构建应用初期. 而后你可以慢慢地增强你网站的功能. 以Facebook为例,  如今在他它的服务中提供了20到30种不同的核心功能.但是, 在它刚刚起步的时候他的应用却非常的简单好用.我想这就是一个好的应用所必须具备的.

公司对Delicious的(http://delicious.com)投资是我最满意的投资之一. 我喜欢它的简单,Delicious的功能很少,但是却很强大.人们一天要用五次甚至十次,而且天天都用. 这些服务虽然涉及面很窄, 但是对用户非常有用, 时刻都要用到它. 他们非常的强大并且对你有很大的帮助,与此同时我认为他们的快速,简单,易用做得非常的好,给你提供了一个很好的平台.
 

5. 可编程

对于web应用开发者而言, 我觉得这一点本身无需多说.  但是我认为非常的关键,非常的重要.能够让其他人通过某种方式在你的应用基础上构建其他的应用或者在你应用基础上添加其他的东西是非常重要的! 这就意味着开放(你应用的)API,并且在我看来是可读写的API. Delicious的创始人两三年前和我说如果API不是可读写的,那就不算是开放API. 这个已经在我们公司内部形成了一个信条了. 我们认为如果API只是可读的,那么它和RSS没什么区别.

不是所有我们投资的应用都开放了可读写API, 但我们始终尝试着鼓励并且说服他们这样做. 可编程性最为重要的一点是, 人们能够通过这个能够令你的应用更有价值, 给你的应用注入更大的能量, 为你的应用带来更多的用户, 更多的数据以及更多的财富.  或许2,3年前, 我们还会投资不具备高可编程性的web应用,但在今天我们肯定不会这么做了,因为如同速度一样, 可编程性对于成功的web应用也是必不可少的..
 

6. 个性化

个性化对于用户来说是非常有意义的,就好像我前面一张ppt提到的,你要让第三方的开发者乃至用户都为你的应用注入他们的“能量”,他们在你的应用中注入越多的他们个性化的东西,他们就会对你的应用更加有归属感和拥有感,这很有可能会成为你推动市场的重要力量。个性化你的应用是非常重要的,方式也有很多,比如可以让用户自定义背景,上传头像,添加自定义的内容等等等等,这些都能让用户就对你的应用产生归属感。

当然了,个性化难免也会带来一些问题。之前我和一个原Last.fm(http://www.last.fm)的女员工聊天的时候,她告诉我他们社区用户都感觉他们就是网站的主人,是他们在负责这个网站,于是就导致了这样的问题:每次网站有了改动,就会在论坛上看到成千上百的留言。我认为这是一件好事情,因为这就意味着人们非常关注你的网站,你的应用。

这对于我们投资的一些公司来说的确也是一个头疼的问题。比如,当我们投资的一家公司:Meetup (http://meetup.com , 需要翻墙) 上个星期在它站点的页面上作了些改动之后,就有许许多多关于这件事情的评论,当然了,大部分都是骂声(持反对意见)。对于这些评论,积极回应也好,完全不予以理会也罢,完全由你自己确定。但是从某个层面上来看,这确实是件非常好的事情,因为这恰恰说明了人们在关注你的应用,他们花费了他们的时间和精力在你的应用上面。
 

7. RESTful(计算机领域专业名词)
我不确定我用这个词是否准确。我想在座的大部分都应该知道什么是REST(REpresentational State Transfer的简称)。它是一个软件架构中提出的一个观点即:任何事物都应该有详细的定义。但是我这里所指的REST则有些许不同,甚至有点使用不当,但是不管怎么样我仍然觉得还是讲得通的,还是挺有道理的。

软件架构中的REST指的是你的每资源都有一个可被访问的URL来表示,这个是在软件架构层面的。但是我对他的定义则有些古怪,我所谓的REST是指整个应用层面,其中所有的资源都有一个URL,而且是一个非常简洁,容易理解的URL。

好比Twitter在3,4个月前发布的Twitter list,如果你去某人的twitter页面,单击了“lists”这个链接,你就会看到类似于“twitter.com/fredwilson/list/....”这样的URL,这个URL就表示了我twitter上的所有的list。整个Twitter应用都是以这样的方式来构建的,它上面所有的资源都是以简单易懂的URL来直接表示的。你可以拿到这个URL,然后通过email或者其他方式发送到互联网上。

Google将会搜索到这个URL,它能够让别人发现你的应用并且直接访问到你应用中原本要从首页通过很多次交互才能访问到的内容。我认为那些不以这种方式构建web应用的人都犯了一个很大的错误。就好像现在非常流行的LinkedIn(www.linkedin.com),它在这方面就做的非常的糟糕。

以上就是我想要说的关于RESTFUL的东西,尽管有些怪异,但是我认为对于成功的web应用来说的确是非常重要的。
 

8.  让你的应用更容易被人发现

这张ppt和上一张ppt有点像。当你刚刚构建好你的应用的时候,它就好像是一堆稻草上的一根针。世界上存在着说不上成千上万吧,至少也有成千上百的应用和你类似,那么怎么样才能让人们发现你的应用呢?基于这一点,我认为,你要做的就是搜索引擎优化。对于优化,你不仅仅要知道其规则更要清楚如何去优化。你的应用必须要让Google能够很容易的发现。

不仅如此,你的应用也应该很容易被社会媒体所发现。现如今,就传播能力而言,社会媒体如同搜索引擎一样重要。就好像病毒一样。First Round Capital(firstround.com)的创始人,同时也是我的同事,Josh Kopelman发表了一遍很好的博文,那篇博文的标题大致是:“我们需要注入病毒”。大致意思是说,他们构建的web应用根本没人使用,于是他就和他的团队说:“我们注入些病毒进去”。当然了,你不能这么做。但是你的应用就应该自始至终都应该是很容易被人发现,可传播能力很强的。产品本身就应该是面向互联网,搜索引擎,社会媒体的。这就是我所说的如何让你的应用更容易被人发现。
 

9. 简洁

我认为,简洁意味着你应用的页面不要太拥挤。你的页面应该让人一目了然,任何页面都不要放置太多的功能点在上面,要让用户一看就能知道是干什么的,怎么用。

在我刚开始做这张ppt的时候,想把一些应用的截图放上去,感觉这样会比较好。但是后来想想这并不好,于是我就放了这些肥皂上去了。但是之前在这个位置我放的是Tumblr(http://www.tumblr.com/, 需要翻墙)的登陆界面的截图,截图如下:


当你进入Tumblr的登陆界面的时候,它整个页面上就只有两个巨大的输入框,用来输入用户名和密码,非常简洁直白,我非常喜欢。用户非常清楚这个页面是干嘛的以及如何使用。这点非常重要,很多人都低估了这种简洁性的价值,总觉得页面上的功能越多越好。

 
10. 趣味性

最后一点,同样重要的是娱乐化。我们合广投资公司(Union Square Ventures)有6个关键词(类似学校的校训之类的),有一个碰巧和我说的这一点吻合。这六个关键词是:移动化、社会化、全球化、娱乐化、智能化,第六个我忘记了。不管怎么样,这些都是和我们的web应用有关的东西,而其中娱乐化就是我想要说的。

之前有人说我放一个空的场地只有积水的图片作为背景不好,但是我这么做是有原因的。 这张ppt上的图片是旧金山的南方公园。在这个滑梯的上面只有一小块地方,但是就在这一小块地方上诞生了Twitter:那是一个春天,有天中午4,5个来自一家名叫Odeo的公司的员工来到这个公园讨论他们要构建的新的项目,最后就在这个滑梯上方的那一小块平台上,想到了Twitter。这就是为什么我要放这张图的原因。

总之,对于web应用来说,娱乐化是非常重要的. 游戏互动性是指你可以用他来引导用户做一些事情. 举个不是web apps的例子吧,一款具有良好互动性的名叫Weight Watchers的游戏, 它的良好互动性体现在。你可以在这个游戏中建立一个目标,然后去努力完成这个目标,同时,你可以将你的目标公布出来,当你达到目标之后会获得一些奖励。就是这一游戏互动性得Weight Watchers非常的成功。

不同的应用可以提供不同的游戏互动性,比如linkedIn,我有些朋友在这上面就喜欢在上面结识更多的朋友,就好像人们在Twitter上就想让更多人来follow自己,或者自己去follow更多的人一样。这是所说的就是另外一种游戏互动性了。

Foursquare(http://foursquare.com/)则有很多的游戏元素:诸如状态,徽章之类的来衡量作为为对本地信息的挖掘的能力强弱。你的应用没有必要和Foursquare一样做的这么明显,但是我想说的是你的应用需要娱乐化。因为这样,它会让用户觉得你的应用很有趣。

Greg,能把屏幕切换到我的blog吗?我周日的时候把这篇演讲ppt发布到了我的blog上面,地址是:www.avc.com, 这就是这篇文章“构建成功web应用的十项法则”。你往下翻就会发现有许许多多的留言,一共有171条。之前有一些内容大家争论了3,4天关于是否除了这十条还有别的更重要的十条,是否你对这真的感兴趣;是否拟对你刚刚构建的应用仔细考量过,是否你这十条包含了全部的关键点。当然了,在留言中至少还提到了5,6点非常关键的,比如:隐私性,易用性,品牌性等应该被列入其中,但是我被要求只能列出10个,于是就只能压缩成了10个了。
 

终于坚持下来了

0

Posted on : 26-07-2010 | By : 澄净 | In : Life

"2010年7月26日 下午3点整"

这是一个对于我,对于我们招聘项目组来说都值得纪念的日子, 淘宝全新招聘项目终于上线了(http://job.taobao.com). 我为我们整个团队感到自豪.

关于这个项目有太多想要说的了......

逐浪堂时期:

1. 接手项目: 热血沸腾

    入职前接受公司技术培训的时候, 接手了这个项目, 当时是我主动提出要求担当PM的角色来负责这个项目, 当时拉了一帮子培训时候认识的兄弟姐妹们组建了这个项目团队,记得那个时候我们项目组是女生最多的,各种美女阿! 正是因为这个原因, 我们项目组也变成了人数最多的一个组了. 作为刚刚大学毕业的我来说,其实说真的,什么都没有, 只有满腔的热血和耗不尽的精力.

   清楚地记得当时拉了一群人和需求方去谈需求, 最后错过了吃饭时间;

   清楚地记得当时为了赶进度,通宵写了一份prd,还是一份被完全refused的prd;

   清楚地记得当时确认了一大堆需求,觉得我们什么都能做,甚至还想重写发布职位后台系统

   清楚地记得为了项目,我主动放弃了班级的毕业旅!


2. 开始项目: 快乐工作

   在需求还没很确认的时候, 咱们就迫不及待开始系统设计, UC设计,各种流程有模有样, 那段时间大家每天白天上课,下午和晚上写代码, 各种通宵,各种加班, 但是我们都很快乐! 那是真的很开心.

   清楚地记得在一个月的时间我们项目组天天写代码, 但是欢声笑语,鸣人,一辉,大姐大绝对是核心人物, ^_^

   清楚地记得我们开会为了一个问题大家喊破喉咙争论,只为最后确定一个众人认为比较完美的方案

   清楚地记得强哥因为配置文件少写一个字符,导致整个项目组被乱码纠结,然后被群殴

   清楚的记得岚依为了第二天能写tc而激动的睡不着觉

   清楚的记得大师兄为了写测试设计带病工作

   清楚的记得长弓为了调试乱码问题周末加班

   清楚的记得强哥路上抽烟突然想到页面立马回公司通知鸣人


3. 项目验收: 各种难过

  大家风里来雨里去,终于在deadline之前完成了所有功能. 大家前一天晚上都憧憬着上线后的各种美景, 各种YY. 结果得到的消息居然是: 界面不够炫酷, 不够年轻化! 就这一句话,直接把我们所有的YY,所有的努力都cancel掉了,当然作为项目负责人我有很大的责任, 当初就应该拿着设计稿和需求方去确认的,哎, 现在想想项目管理的确是一门很深的学问, 当初在学校的时候还很鄙视这门课呢!

  清楚地记得听到这个消息后,项目组迎来了有史以来最为沉默的一天

 清楚地记得听到这个消息后, 大家各种叹气,各种改状态

 清楚地记得听到这个消息后,大家出去各种喝酒,各种喝醉

 清楚地记得一辉和鸣人醉倒在走廊里, 细细探讨我们项目组存在的问题, 提出了we are the owner的观点(顶)

 

 最后,随着培训的结束, 大家大部分都回学校了, 我还是到了公司继续实习(那个时候我的毕业论文也写得差不多了,所以就没有回学校去)


续梦时期:

1. 改版: 再燃激情

    经过小腰姐的申请, 我再次负责起了招聘项目组的改版任务, 这次有了又加入了很牛逼的视觉,但是我们项目组开发人员却只剩下我和大风还有大师兄了, 其他都回学校准备论文去了,而且那个时候大家各自都还有公司的事情要完成, 但是不管怎么说,我都觉得我应该要把这件事情完成下去,将我们项目组的梦实现.


2.行动: 各种加班

   由于人实在太少了, 而且改动也比较大,基本上前端差不多重写了, 而那个时候前端除了我就是另外一个周杰同学, 所以避免不了我们各种加班......

    清楚地记得清羽给与我的鼓励和支持,委派了一个专门的前端来帮助我完成项目的前端代码编写

    清楚地记得为了赶进度,逼迫周杰写他完全不熟悉的jquery代码, 各种无奈

    清楚地记得每天网上拉着大风改后台代码

    清楚地记得让令申再短时间内去修改完成我们职位部分的后台代码

    清楚地记得和大风恶搞几天解决乱码问题

    清楚地记得大师兄利用休息时间测试我们的项目

    清楚地记得大姐大被我逼着去修改后台js代码,大姐大有点火了

    清楚地记得少帅在学校被我电话骚扰

    清楚地记得一辉在找房子的时候被我要求晚上回公司改代码


3. 项目部署: 安全悲剧

    终于项目经过了各种无奈和悲剧以及奋斗后终于到了要部署到服务器的时候,这里必须要顶下小腰联系的部署负责人: 山大. 一个级别很高,但是却很nice的人, 给我们的项目提供了非常多的帮助,而且非常的耐心.真的很赞! 但是无奈的是我们的项目必须通过安全测试才能才能进行部署,而那个时候我们因为不了解公司的规定,所以完全没有引入公司规定的安全包. 但是又是小腰,主动申请麻烦测试人员破例手动测试代码,这里就要非常感谢铁花和彩玉了,真的手动来测试我们的代码, 太辛苦了. 于是我和大风还有少帅就是各种悲剧,加班解决所有安全问题, 最后如愿部署到了服务器.


4. 上线: 内牛满面

   终于在今天的下午3点上线了,各种内牛满面阿. 在负责这个项目的将近2个月的过程中,我体会到了很多很多很多很多.  无法表达了,反正这一刻我浑身舒爽, 感谢小腰姐,你太赞了. 各种support. 感谢所有关心和帮助过我们项目的人, 感谢我们项目组所有的成员. WE ARE SO PROUD OF OURSELVES!!!


真的, 我体会到了最深刻的一句话就是:

"人一定要有梦想, 而一旦有了梦想, 你就会觉得自己浑身充满了力量!"

    

[Mac下用rhodes构建android application]之环境搭建

0

Posted on : 10-07-2010 | By : 澄净 | In : mobile app dev

可能大家不熟悉rhodes, 但是如果你是ruby 爱好者同时又是手机应用开发的爱好者,那对这个肯定很熟悉了. 它是一个开源的框架,可以让你用ruby+html就能开发出原生的手机应用(注意:不是web应用噢,^_^),并且它支持几乎所有的主流系统,包括iphone , android , symbian , blackberry ,  windows mobile. 想要了解具体情况的可以访问rhodes的官方网站: http://rhomobile.com/products/rhodes/.

利用rhodes,你就可以像写J2ME一样,并且同时具备你用java写android程序, 以及用oc写iphone一样可以调用更加系统级别的接口的能力.最最关键的是你用ruby写,哈哈, 听起来是不是很酷阿. 那就赶紧动手吧!!!(以下以android为例)

1. 搭建环境前的系统要求

     JDK+ruby+rubygem,这些是必须的条件, JDK,mac自带的,ruby mac也自带了MacRuby,但是个人建议自己还是去装一个(1.8.6噢 or 1.8.7),rubygem就不用我说了吧.

2. 安装Android SDK Starter Package 和 android SDK以及NDK

     去android的开发站点去下载这个starter包, 不过不幸的是这个站点已经被GFW干了,那么就可以访问这个来获取:http://androidappdocs.appspot.com/sdk/index.html.

      将它解压到任意你喜欢的目录,这里以<SDK>来代表,

      然后打开~/.bash_profile,输入如下语句: export PATH=<SDK>/tools:$PATH (目的是将SDK的路径加入到PATH中)

      随后打开terminal, 输入android, 就会出现如下界面了:     


         然后进入settings,勾选那个force https........, 再进入Available Package选择要安装的SDK版本和google api.然后就开始安装了.

         接着打开~/.bash_profile, 输入: export ANDROID_HOME=<SDK>

        继续下载NDK,将它解压到任意你喜欢的目录, 下载请访问:http://androidappdocs.appspot.com/sdk/ndk/index.html

3. 安装rhodes和构建第一个app

        利用sudo gem install rhodes来安装最新版本的rhodes.

         完成之后在terminal中运行: rhodes-setup, 它自动寻找一些必须程序的路径,如果你觉得不对就手动输入.

        接着在终端输入: rhogen app zhaojing(app名字) 来生成rhodes app, 完了之后输入 rake run:android, 经过一段漫长的编译和打包过程(因为是第一次),就可以出现如下界面了,哈哈,大功告成!

         


      

[Dive Into HTML5部分翻译]继续深入HTML5:The Doctype(文档类型)

1

Posted on : 21-06-2010 | By : 澄净 | In : HTML5

英文原文地址:http://diveintohtml5.org/semantics.html

这一章节,将会优化一个HTML页面(此页面本身并没有问题).优化的过程中,有的部份代码上会变得更加精简,而有的部份则会变得相对较多.但是,整个页面都会变得更加语义化. 这会相当的有意思.

这里是要被优化的页面. 学习它,揣摩它,并且爱上它. 将它在新的标签页中打开,记住,至少要看一篇该页面的源代码.

The Doctype(文档类型)

从页面的最头部开始

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

  这部分被称为"doctype".这里有一段源远流长的历史,同时也是doctype背后的黑暗史.正当微软为Mac开发IE5的时候,他们自己发现了一个令人惊奇的问题: 即将到来的这个浏览器在标准化上面提升了太多了,导致了原来在早期版本能够表现正常的页面现在在这个页面无法正确渲染了.事实上,Mac版本的IE5的渲染行为是正确的,只不过人们期待它不要正确的渲染,原因是这些页面是专门针对于诸如Netscape4和IE4这些主流浏览器而设计的,而这些主流浏览器标准化做得都不好.因此只能说Mac版本的IE5太前卫了,它甚至破坏了整个web. 

  Microsoft后来想到了一个解决办法。 在渲染整个页面的时候,Mac版的IE5会首先查看位于页面源代码第一行为止的"doctype"申明。早期的一些页面(依赖早期浏览器奇怪的渲染机制)都没有doctype这个声明,因此Mac版本的IE5在渲染这些页面的时候就用原来的奇怪的方式去渲染。为了使自己的页面能够支持这一新的标准,开发者不得不在他们的页面中加入doctype这一申明。

  Microsoft这种解决办法一下子像野火一样蔓延开来,很快所有的主流浏览器一夜之间都有了两种模式:“quicks mode”(早期奇怪的渲染模式)和“standards mode”(goddy加:以下我赞称两种模式为:诡异模式和标准模式)。当然了,这样的事情对于在Web领域,一下子就失去了控制。正当Mozilla准备将他们的浏览器迁移到1.1版本的时候,他们发现很多依赖诡异模式下其中一种特定渲染行为的页面正在标准模式下被渲染。于是Mozilla修复了他的渲染引擎去除了诡异模式,这样一来,成千上万的页面一下子全部“崩溃”了(无法正确渲染)。 而Mozilla也提出了一种新的模式——“almost standard mode”。

  在利用doctype来激活浏览器模式一文中,Henri Sivonen 总结了浏览器不同的渲染模式:

  • Quicks Mode(诡异模式)
    在该模式下,浏览器无视当时的Web标准以使得让那些按照20世纪90年代后期比较流行的实践来实现的页面能够正确的被渲染。

  • Standards Mode(标准模式)
    在该模式下,浏览器会试着去遵守标准来渲染页面。HTML5把这种模式称为:“no quirks mode”。

  • Almost Standards Mode(近标准模式)
    Firfox、Safari、Chrome、Opera(7.5开始)和IE8也有这种模式,这种模式下实现了传统的table cells的垂直拉伸但有没有严格的遵守CSS2的标准。HTML5把这种模式称为:“limited quirks mode”

  我们说到哪里了?噢,对了,doctype:

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

  这种doctype申明是15种能够触发“标准模式”的其中之一。这个申明一点都没错,如果你喜欢这样的申明,你可以保留着。或者你可以把它变成一种HTML5式的更简短更优雅并且同样也能触发“标准模式”的申明

  以下是HTML5式的doctype申明:

  <!DOCTYPE html>

  就是这样,才15个字符。

  注意:你的doctype的申明需要出现在你html文件的第一行。 如果有其他甚至一个空行在这一申明之前,那么某些浏览器会认为你doctype申明无效,而一旦你的页面没有doctype声明,那么浏览器会按照“诡异模式”来渲染你的页面。这种错误是很难被发现的。

  




[Dive Into HTML5部分翻译]HTML5 特性的检测:Microdata

4

Posted on : 21-05-2010 | By : 澄净 | In : HTML5

英文原文地址:http://diveintohtml5.org/detect.html#microdata

Microdata
 

Microdata 是为你的web页面提供额外的语义的一种标准的方式。举个例子:你可以使用microdata来指明一张图片在某种特定的许可证下可以使用的。你可以用microdata来标记一个“关于我”的页面。浏览器,浏览器扩展程序以及搜索引擎能把你的microdata标记转化成一个vCard(一种用于共享联系人信息的标准格式)。你同时也可以定义属于你自己的microdata词汇。

HTML5 microdata的标准包含了HTML标记(主要用于搜索引擎)和一系列的DOM方法(主要用于浏览器)。在你的页面中使用microdata标记是无害的,因为那顶多就是一些属性罢了,并且如果搜索引擎无法识别这些microdata属性就会忽略掉。但是如果你想要通过DOM来操作这些microdata,那你得确保你的浏览器支持microdata DOM API。

要检测浏览器是否支持HTML5 microdata API可以使用之前介绍的检测方法中的第一种。如果你的浏览器支持的话,在全局的document对象上会有一个getItems()的方法,反之,该方法就不存在。
function supports_microdata_api(){
  return !!document.getItems;
}
Modernizr目前还不支持检测HTML5 microdata API的方法,所以你还是得亲自手写如上的检测方法。

淘宝招聘前端开发&JAVA工程师(实习/应届/社会)

1

Posted on : 19-05-2010 | By : 澄净 | In : Life

欢迎大家加入淘宝, 请投递简历到:chengjing@taobao.com.

工作地点:杭州

以下是面对校园的应届生和实习生招聘要求

面向专业:

计算机、电子、软件工程等,本科及以上学历。

你将负责:

1、与交互设计师及视觉设计师协作,根据模型完成Web页面制作;

2、配合后端开发人员实现产品交互界面;

3、维护及优化网站前端性能。

你需要具备:

1、热爱互联网,对Web开发充满激情;注册并了解各种最新最有趣的Web服务;

2、喜欢手写HTML/CSS/JavaScript|ActionScript 代码,关注Web标准;

3、理解Ajax 及 RIA,并有实战经验;熟练使用PhotoShop等图像处理软件;

4、熟练使用 Firefox+Firebug 调试Web页面,或熟练使用Flex/Flash;

5、有使用服务器端脚本开发语言开发Web应用的经验。  


以下是面对社会的招聘

精通各种Web前端技术,包括XHTML/XML/CSS/Javascript/ActionScript等(JS和AS之一即可); 

1.深刻理解Web标准,对可用性、可访问性等相关知识有实际的了解和实践经验; 

2.有基于Ajax或Flash的RIA应用开发经验; 

3.至少精通一门非Web前端脚本的语言(如Java/PHP/C++),并有项目经验; 

4.个性乐观开朗,逻辑性强,善于和各种背景的人合作; 

5.计算机、数学、自动化等相关专业本科以上学历优先。

 

JAVA开发工程师

 

面向专业:
计算机、软件工程、电子通信等,本科及以上学历。
你将负责:
1
、 淘宝网日均上亿访问量的平台架构和业务项目开发和维护;
2
、 淘宝网各开发项目(包括开放平台、数据平台、运营支撑、
无线开发等)的设计、制定和review各种技术规范。

你需要具备:
1
、学习能力强,成绩优秀,适应能力好;有潜力,有激情,
自我要求高;

2、熟悉面向对象分析和设计技术;熟悉Java编程语言,熟悉Java EE相关技术和框架:有Web及前端技术开发经验优先考虑:
3
在校期间有参与或在以下国际或全国大学生科技竞赛中获奖的优先考虑:大学生数学建模竞赛;挑战杯全国大学生科技竞赛;ACM/ICPC国际大学生程序设计竞赛;机器人足球比赛;
4
在校期间有作为骨干参与校内学生网站建设和有相关开发经验的优先考虑。

[Dive Into HTML5部分翻译]HTML5 特性的检测:Form Autofocus

3

Posted on : 16-05-2010 | By : 澄净 | In : HTML5

英文原文地址:http://diveintohtml5.org/detect.html#input-autofocus

Form Autofocus (表单自动聚焦)

很多网站使用Javascript让web表单的第一个输入框自动获得焦点,举个例子:Google.com的首页会让搜索框自动获取焦点以便于你输入搜索关键字。这对于大多数的人来说的确很方便,但是对于那些有特殊需求的用户来说却未必如此。比如你按下空格键是想滚动页面,但是因为焦点已经被聚到了表单中的输入框,因此页面并不会如你所愿的滚动(而是会在输入框中输入了空格);再比如你在页面还在加载的时候把焦点聚焦到了其他的输入框,而正当你想要在这个地方进行输入操作的时候,脚本却将焦点自动对焦到了设定要自动对焦的输入框中,这个时候你输入的文字就不会出现在你预想的输入框中。

因为自动聚焦是用Javascript来实现的,因此总会有办法来处理所有这些极端的情况,但是却没有满足那些不想要网页自动对焦的用户。
 

为了解决这样的问题,HTML5在所有的web表单控件上引入了一个autofocus的属性。顾名思义,这个属性的意思就是会将焦点自动聚集到特定的input元素上。因为这种实现方式是通过标记的方式而不是javascript的方式因此对于所有网站都有效。浏览器的提供商也可以提供用户一个禁用该功能的方法。

要检测浏览器是否支持自动聚焦可以使用之前介绍的检测方法中的第二种。如果你的浏览器支持该功能的话,用来检测创建的input元素会有一个autofocus的属性(即使你没有显示的设置该属性),反之,该input元素就不会有属性。

function supports_input_autofocus(){
  var i  = document.createElement('input');
  return 'autofocus' in i;
}

如果你不想自己亲手去写这个检测方法的话,你可以使用Modernizr(1.1或者更近版本)来检测你的浏览器是否支持form表单元素的自动聚焦

if(Modernizr.input.autofocus){  
  //autofocus works!
}else{ 
  // no autofocus support
  // fall back to a scripted solution
}

[Dive Into HTML5部分翻译]HTML5 特性的检测:Placeholder Text

1

Posted on : 15-05-2010 | By : 澄净 | In : HTML5

英文原文地址:http://diveintohtml5.org/detect.html#input-placeholder

Placeholder  Text(占位符)

除了新的类型的input元素,HTML5给现存的form型元素做了一些小的改进,其中一个改进就是允许给input元素设置占位字符功能。只要input元素内容为空或者失去焦点,占位符就会显示,而一旦input元素获得焦点(鼠标点击或者Tab)它就会消失。如果你对此还有疑问的话,可以去看web forms这一章节的截图。


要检测浏览器是否支持占位符可以使用之前介绍的检测方法中的第二种。如果你的浏览器支持的话,创建的input元素会有一个placeholder的属性(即使你没有显式的设置该input的placeholder属性),反之,该input元素就不会有此属性。

function supports_input_placeholder(){
  var i = document.createElement('input');
  return 'placeholder' in i;
}
 
如果你不想自己亲手去写这个检测方法的话,你可以使用Modernizr(1.1或者更近版本)来检测你的浏览器是否支持占位符
if(Modernizr.input.placeholder){
  // your placeholder text should already be visible!
} else { 
  // no placeholder support
  // fall back to a scripted solution
}

[Dive Into HTML5部分翻译]HTML5 特性的检测:Input Types

0

Posted on : 14-05-2010 | By : 澄净 | In : HTML5

英文原文地址:http://diveintohtml5.org/detect.html#input-types

Input Types

你或许对如何构建一个web表单了如指掌:创建一个<form>元素,然后创建一些<input type="text">的元素或者一个<input type="password">这样的元素,最后再以一个<input type="submit">这样的按钮结束整个表单构建;但是你对HTML5的表单构建一定一知半解。HTML5定义了许多新的类型的input元素让你在构建表单的时候使用。
  1. <input type="search"> 用作搜索框
  2. <input type="number"> 用作数字输入框
  3. <input type="range"> 用作滑动条
  4. <input type="color">  用作颜色拾取器
  5. <input type="tel"> 用来输入电话号码
  6. <input type="url"> 用来输入web地址
  7. <input type="email"> 用来输入email地址
  8. <input type="date"> 用作日期选择器
  9. <input type="month"> 用来输入月份
  10. <input type="week"> 用来输入星期
  11. <input type="time"> 用来输入时间
  12. <input type="datetime"> 用来输入更精确的时间
  13. <input type="datetime-local"> 用来输入当地时间


(译者:对于上面这些input元素的作用目前还没有深入研究过,只是通过字面翻译,因此会存在不准确的地方,在第二轮完善翻译的时候会修正)

要检测HTML5这些新类型的input元素可以使用之前介绍过的检测技术中的第四种。这里这种检测方式的工作原理:首先,它会创建一个对于页面来说没有意义的input的元素在内存中。所有input元素的类型默认都是“text”,这是非常重要的。

var i = document.createElement("input“);

然后,将整个input元素的类型设置成为你想要检测的类型.
i.setAttribute("type","color");

如果你的浏览器支持你要检测的这种类型的input元素,那么这个属性值会被浏览器识别(该类型值会被保留)。反之,浏览器会忽略这个属性值,随后类型依然会是默认的“text”。
return i.type !== "text";

如果你不想自己亲手去写这13个不同的检测方法的话,你可以使用Modernizr来检测你的浏览器是否支持这些HTML5增加的新的类型的input元素。Modernizr重复使用一个input元素就能有效的检测所有这13种input的类型, 然后它构建一个叫Modernizr.inputtypes的散列,这个散列包含了13个键值对,键表示类型,值是布尔值(true表示支持该类型,反之是false)。

if(!Modernizr.inputtypes.date){
  // no native support for <input type="date">
  // maybe build one yourself with Dojo 或者 jQueryUI
}

[Dive Into HTML5部分翻译]HTML5 特性的检测:Geolocation

4

Posted on : 10-05-2010 | By : 澄净 | In : HTML5
 
Geolocation


Geolocation特性能够识别出你在地理位置并且如果你愿意的话,你可以把你的位置信息分享给别人。识别你地理位置的方法有很多——可以通过你的ip地址,利用信号塔获取你手机无线的连入位置,或者通过能够利用卫星定位获得经度纬度的GPS设备。

(以下是提问回答)

  问:geolocation是HTML5的一部分吗?为什么你要这里介绍这个?

  答:在浏览器支持新的HTML5特性的同时,对Geolocation的支持正在被加入到其中。严格的说,geolocation是Geolocation Work Group制定的标准,不过该组织已经从HTML5 Working Group中分离出来了。但是在本书中我还是打算介绍它的原因是geolocation是目前整个web发展的一部分。
 
检测浏览器是否支持Geolocation特性可以采用之前介绍过的检测方法中的第一种。如果你的浏览器支持Geolocation API的话,在全局的navigator对象上会有一个geolocation的属性,反之,该属性值为undefined
function supports_geolocation(){
    return !!navigator.geolocation;
}
 
同样的,如果你不想自己亲手去写这个检测方法的话,你可以使用Modernizr(1.1或者更近版本)来检测你的浏览器是否支持Geolocation API
if(Modernizr.geolocation){
    //let's find out where you are!
} else {
    // no native geolocation support available
    // maybe try Gears or another third-party solution
}
 
如果你的浏览器不原生支持Geolocation API的话,不要失望,因为还有Gears。Gears 是Google开发的兼容Windows, Mac, Linux, Windows Mobile和Android平台的开源浏览器插件。它为一些原生不支持本章节中介绍的某些新的特性早期的浏览器提供了第三方支持。其中一个提供支持的特性就是Geolocation API。尽管它和navigator.geolocation这个API不同,但是实现了同样的目的。
 
还有一些在特定手机平台上的Geolocation API,比如BlackBerry,Nokia,PalmOMTP BONDI
 
在Geolocation章节会详细介绍所有和这部分有关的API的使用。