Posted on 12:13 pm, December 1, 2011 by 窗外的睡神
又一个知乎上的问题和我的回答。
我来从HTML的历史谈谈他们3者的区别。
在HTML的早期发展中,W3C成立之前,很多标准的制定都是在浏览器的开发者们互相讨论的情况下完成的,比如HTML 2.0, 3.2直到4.0, 4.01,这些标准大部分都是所谓的retro-spec,即先有实现后有标准。在这种情况下,HTML标准不是很规范,浏览器也对HTML页面中的错误相当宽容。这反过来又导致了HTML作者写出了大量的含有错误的HTML页面。据说,时至今日web上99%的页面都含有HTML错误。
W3C 随后意识到了这个问题,并认为这是互联网的一个基础性问题,应该加以解决。为了规范HTML,W3C结合XML制定了XHTML 1.0标准,这个标准没有增加任何新的tag,只是按照XML的要求来规范HTML,并定义了一个新的MIME type,application/xhtml+xml。W3C的初衷是对这个MIME type浏览器要实行强错误检查,既如果页面有HTML错误,就要显示错误信息。但是由于已有的web页面中已经有了大量的错误,很多开发者拒绝使用新的 MIME type。W3C不得已,在XHTML 1.0的标准之后加了一个附录C,允许开发者使用XHTML语法来写页面,同时使用旧的MIME type,application/html,来分发页面。这个旧的MIME type不会触发浏览器的强错误检查。这就是我们今天看到的情况,很多网站宣称自己遵守XHTML 1.0标准,那只不过是说,他的页面中用了XHTML语法,但并不能保证完全没有错误。要验证XHTML有没有真正起效,需要查看web服务器使用哪种 MIME type来分发页面的。
W3C随后在XHTML 1.1中取消了附录C,即使用XHTML 1.1标准的页面必须用新的MIME type来分发。于是这个标准并没有很多人采用。这种情况同样发生在尚未完成的XHTML 2.0身上,它要求强错误检查,于是没有人采用。XHTML的故事也告诉我们,有时候先有标准再来实现,是行不通的。
有了XHTML的教训,WHAT Working Group和W3C在制定下一代HTML标准,也就是HTML5的时候,就将向后兼容作为了一个很重要的原则。HTML5确实引入了许多新的特性,但是它最重要的一个特性是,不会break已有的网页。你可以将任何已有的网页的第一行改成<!DOCTYPE html>,它就成也一个HTML5页面,并且可以照样在浏览器里正常的展示。
Posted in Uncategorized
|
Tagged HTML, 知乎
|
Posted on 12:09 pm, December 1, 2011 by 窗外的睡神
一个知乎上的问题,下面是我的答案。
我来说两句吧,Windows Phone 7我从一发布就开始用,HTC HD7一直用到现在,几个月前就升级到芒果了。下个星期Nokia Lumia系列就发布了,还在考虑要不要换个Lumia 800。基于WP7的Silverlight应用也开发过两个发布到Macket Place了,不过一直忙工作,程序没有更新到芒果,现在在芒果上运行会时不时地崩溃。WP7之前,我用了几个月的iPhone 4,Andriod还没机会用。
WP7区别于iOS和Andriod的最大特点是,以人为中心,而不是以应用为中心,这一点在Mango之后得到了显著的加强。什么是以人为中心呢?举个例子来说,在iOS上,用户要了解朋友状态,需要通过不同的应用,比如要找facebook的朋友需要 facebook应用,要找twitter上的朋友,需要twitter的应用等等。而在WP7上,通过People Hub,不管是facebook上的朋友还是其他哪里的朋友,都可以通过这一个地方了解到他们的动态。沟通也是,短信,MSN,Facebook chat等等通通集成在一个地方,而且可以无缝切换。比如你正用WP7和你的facebook朋友通过facebook chat聊天,对方下线了,那么消息就会通过短信发到对方手机,或者对方从MSN登录了,那消息又会自动发到它的MSN上,你不需要切换应用,在短信界面里就全部搞定了,你甚至不需要知道对方在用那种方式和你沟通。
另外一点区别是,WP7希望提供所谓“一目了然”的特性,来节省用户的时间,减少对用户注意力的分散。比如WP7的待机画面提供了时间,日期,约会,邮件,短信,未接电话等等信息,用户不需要解锁屏幕就可以了解这些状态。WP7主屏幕上的应用程序图标也具有显示缩略信息的功能。比如你想知道最近是不是有facebook朋友给你留言,你不需要等到打开facebook应用才知道,那个Me应用的图标就有提醒功能,如果有更新,你会在图标上看到缩略信息,然后你可以决定是否要打开应用做处理。
其他可称为Killer应用的当然是微软的看家产品Office系列了。WP7上的Outlook我觉得是我用过最棒的手机邮件客户端了,它可以完美支持HTML格式邮件,不会因为你用WP7回了一下邮件,就把整个邮件的格式搞乱掉,比iPhone自带的邮件客户端强很多。Mobile版本的Word, Excel配合SkyDrive也很不错,对需要经常查看这些文档的用户很实用。OneNote虽然还没发和PC上的OneNote比,不过配合 SkyDrive也算得上是不错的手机笔记软件了。
最后说说WP7的开发模型,一共有两套,基于Silverlight的和基于XNA的。前者用来开发一般的应用程序,后者则用来开发有一定规模的游戏。看看Microsoft Game Studio的出品的从Xbox上移植的那些经典游戏就知道,用XNA还是能开发出大规模的手机游戏的。至于一般应用,开发者需要一些基本的 Silverlight知识,不过不需要太深。微软的开发工具还是很给力的,UI设计可以通过Expression Blend做,所见即所得。代码自然是通过Visual Studio,WP7的SDK自带Visual Studio和Blend的Express版本。如果是对微软技术有经验的开发者,上手很容易。
我的HD7用了一年多,我觉得完全够用。对比iPhone 4,HD7最不让我满意的地方就是它的相机了。RTM的时候拍照需要用实体按键,HD7的那个键在机身侧面又细又长,还很硬,使劲按总会导致手抖。芒果之后拍照可以不用实体键了,这个问题有所改善。不过成像质量和iPhone 4还是有差距,不知道Nokia Lumia 800的卡尔蔡斯镜头会不会在这方面有帮助。
Posted on 4:05 pm, July 13, 2011 by 窗外的睡神
Windows平台上有许多GTD工具,但是没几个做的像Omni Focus这样出色的,即便是能用的也不多。我用过一阵子ToDoList,这个tool该有的功能都有,甚至能用来做简单的项目管理,但是它的UI实在土了点,而且它用自己的数据格式做存储,不利于知识管理。一些Online的GTD工具我也试过,但实际上我并不需要把我的todo list放到网络上,或者在好几个设备之间同步。我只需要一个简单的工具来管理自己的todo list罢了。
最近我在用的是Jello Dashboard,这个软件是目前我觉得最适合我的GTD工具。它是一个和Outlook结合的轻量级GTD工具,由于Outlook是我日常最常用的软件,基本上一开电脑,第一个打开的就是它,因此Jello Dashboard显得非常实用。它本身没有数据存储,而是利用Outlook的Task, Appointment, Contact和Notes,并同tags结合起来方便管理。它提供不同的视图来管理tasks。实际上这个工具是一个基于HTML和JavaScript的应用,如果你不满意它的视图,你可以通过定制CSS来修改它们。它的Collect功能可以用来快速创建task,非常实用。由于它用的都是标准的Outlook对象,所有的内容可以方便地在Outlook里查找,而且数据都存储在Exchange中,不用为备份操心。最近我的HD7升级到Mango之后,可以自动同步Exchange的task列表了,这对我来说已经足够了。
其实每个人对GTD工具可能都有自己的需求,很难说一个工具能满足所有人。比如现在许多工具都以网络和设备间的同步作为重点和卖点,但我实际上并不太需要这样的功能。同时在适应了某一款GTD工具之后,你可能会对GTD的概念有新的认识。这是不是应了那句话:We Shape Our Tools and Our Tools Shape Us.
Posted in Uncategorized
|
Tagged GTD
|
Posted on 10:56 am, June 15, 2011 by 窗外的睡神
我在Windows 7上使用的虚拟机软件是VirtualBox,它支持x64的虚拟机,而且是免费的。不像Hyper-V和VMWare Workstation,一个不支持客户端操作系统,另一个的License很贵。
在我的这台笔记本上,我最开始用的VirtualBox版本是4.0.4,很不稳定,虚机动不动就失去响应死机了。后来升级到4.0.6,稳定了许多,不太会死机了,不过虚机的网络驱动似乎有点问题,时间一长就连不上host的网络了。前几天出了4.0.8,我就又顺手升级了。可是在升级其中一个虚机的Guest Additions的时候遇到了问题,主要是我没有先卸载4.0.6的Additions,而是直接安装4.0.8的。以前我也是这么做的,一直没问题,这次不知怎么回事,4.0.8的装显卡驱动报错,导致显卡,鼠标和一个system设备统统没装上。糟糕的是4.0.6的驱动还被它卸掉了,虚机一下变得没法用了。
看了VirtualBox论坛里相关的问题,大部分都说没救了。可是这个虚机里有正在做的一个项目代码,不能轻易废掉。研究了半天各种帖子,终于找到一个方法,记在这里。
- 显卡驱动装不上可以通过修改VBoxVideo.inf解决。这个文件在C:\Program Files\Oracle\VirtualBox Guest Additions目录下,打开,删掉NTAmd64.6.0相关的项目,保存。
- 执行下面的命令来安装显卡驱动:
VBoxDrvInst /i "PCI\VEN_80EE&DEV_BEEF&SUBSYS_00000000&REV_00" "VBoxVideo.inf" "Display"
- 鼠标驱动比较简单,在VBoxMouse.inf上右击,选安装应该就能装上。
- 用下面的命令手工安装系统设备驱动,添加网络驱动和鼠标驱动
VBoxDrvInst /i "PCI\VEN_80ee&DEV_cafe&SUBSYS_00000000&REV_00" "VBoxGuest.inf" "System"
VBoxDrvInst /addnetprovider VBoxSF 1
这样,重启之后Guest Additions的功能就恢复了。美中不足的是,在添加删除程序里看不到Guest Additions对应的项目,意味着它没法被轻易卸载了。要卸载只能通过手工来进行了。以后再升级还会是个麻烦。
所以升级VirtualBox Guest Additions的最好方式还是先卸载旧的Additions,再安装新的。
Posted on 11:12 am, April 28, 2011 by 窗外的睡神
前两星期收到水电费帐单,发现这个月不但一分钱不用交,帐上还多出100多块来。随帐单寄来的信里附了一张说明,原来新加坡政府许诺的增长分红这个月发了,一月份也发了一部分,可能是金额不大,我们并没有注意到。拿着帐单我们当时不由得想,看起来国会选举真的不远了。没过几天果然就宣布了选举日期是5月7号,而昨天就是各个政党的候选人提名日。
我们来新加坡几年,对新加坡的政治及选举其实了解不多。一来我们是外国人,没有投票权。二来像大部分中国人一样,我们也有先入为主的观念,觉得新加坡政府和中国政府差不多,选举只是装装样子而已。直到真真实实的拿到了增长分红,我们才感到了新加坡人手里那张选票的力量。虽然行动党利用政府资源和增长分红这样的小恩小惠来讨好选民,从反对党的角度看也许不公平,但至少选民是受惠的,选民手中的那张选票各政党是在乎的,选民不用太担心自己动不动就“被代表”。
这次的选举据说是新加坡有史以来最激烈的一次,反对党的候选人很多,行动党几乎在每个选区都有对手。昨天的提名日只有李光耀的丹戎巴戈集选区是无对手当选的。据说目前的新加坡选民中超过50%的人是没有投票经验的,因此有人担心大部分选民可能不知道如何很好的利用自己手中的这样选票,但凡事都有第一次,从以前大部分选区都没有竞争对手到现在几乎人人都需要投票,这是新加坡民主的进步,是好事。反观中国,我们还在“被代表”着,路还长着呢。
Posted in Uncategorized
|
Tagged 漂在狮城
|
Posted on 11:57 am, March 24, 2011 by 窗外的睡神

Hort Park是家附近的一个小植物园,坐车过去只要两三站路。如果步行的话,可以顺着从Mount Faber起的南部山脊路径,经过Telok Blangah Hill一直走到Hort Park。以前Lexi小的时候,我们就曾走过。现在已经走过很多次了。
由于只是个小植物园,不是游客会来的地方,因此即使是星期天,也不会有多少人。不像鱼尾狮那里,即使鱼尾狮最近被包进了宾馆客房里,那里还是很多人,自己一不小心就会成了别人照片中的风景。Hort Park里更多的是来跑步健身的年轻人和带孩子来玩的父母。最近天气不热,日照也不算强烈,正适合户外活动。
美中不足的是,Hort Park里没有一处可以休息吃东西的地方。以前来的时候,还有一家餐厅,可能因为游人太少的缘故,已经歇业了。现在要吃东西或喝饮料,只能找自动量贩机。其实这里也不用开什么高档西餐厅或咖啡馆,开一家亚坤或者旺这样的本地咖啡店就好,走累了来一杯咖啡或奶茶,加两片kaya butter toast,好吃又不贵,生意肯定好。
Posted in Uncategorized
|
Tagged 漂在狮城
|
Posted on 9:50 pm, March 13, 2011 by 窗外的睡神
上次去虎豹别墅,用它拍照的时候死机了,从那之后在拍照拍video的时候就经常死机,但因为用Home+Power能重启回来,一直也没在意。今天去西海岸放风筝,它又死机了。我想不如把它升级到4.3去吧,也许能好。谁知道折腾了一下午,它竟然彻底挂了。
先是备份的时候它死机导致备份失败,并且它直接进了DFU,尝试了网上各种方法想把它Kick出来,都没用。最后忍痛不要那些没备份的照片了,直接从DFU恢复。iTunes提示升级+恢复,升级到4.3明明成功了,可是机器却重启不起来,现在的状态是深蓝色屏幕,没有苹果标志,机身发热,iTunes认不到,Home+Power没反应。看来它是要在挂掉之前耗尽最后一丝电啊。可恶,iPhone的电池不能拆。
看来只能送去修了,还好不是冠希的相机。
Posted on 1:43 pm, December 13, 2010 by 窗外的睡神
ezReader是我在MarketPlace里的第二个应用。我通过App Hub最近发布的,还很粗糙的报表功能了解到,ezReader在12月7号的时候,下载次数达到了100次。这个成绩比SimpleText靓眼一些,但主要是因为ezReader提供了Trial版本,用户有机会免费下载试用,实际的付费用户却不见得比SimpleText多。
我自己从iPhone切换到Windows Phone 7,感觉到的几个不便的地方,第一是没有中文输入法,这个只能等更新了。还有就是电子书和RSS阅读,这两个应该是智能手机的核心应用,而Windows Phone 7上好用的应用却几乎没有。ezReader只是一个很简单的阅读器,算是能够解决一部分人读自己收集的ePub的需求,完全达不到iBooks或Kindle的水平。写ezReader的过程好比是带着脚镣跳舞,只能在WP7的种种局限之下,用各种workaround来达到目的。
我一直认为,一个好的电子书阅读器完全超出了个人程序员的能力之外,需要一个团队和相当的投入才行。我为什么写ezReader呢?首先是满足自己的需求。再者,对于团队和投入来说,就需要回报,单靠程序本身收费来取得回报不现实,就好像WP7上的iSilo一样,定价10几块美金,根本无人问津。所以背后一个强大书库的支撑是必不可少的,就像iBooks和Kindle那样。微软应该不会进入书库这个领域了,Apple应该也不会将iBooks带到WP7上来,Kindle不支持ePub格式,而Google是否会支持WP7也很难说。很有可能我们会看不到一款运行在WP7上的出色的电子书阅读器,与其等也等不来,不如自己动手。
很多人很关系WP7在一月的更新会有些什么新功能,我更关心WP7会不会为开发者提供一个更好的WebBrowser控件,现在这个太烂了,接口太少,基本上不能称为是一个控件。
Posted on 3:02 pm, November 26, 2010 by 窗外的睡神

昨天,我写的一个小程序,SimpleText,通过了Windows Phone 7 MarketPlace的审核,登陆到了MarketPlace。这个小程序是一个很简单的文本编辑器,唯一的特色是能够和Dropbox同步。有的时候,如果需要在手机上记点东西,又想要共享到其它设备,比如iPhone/iPad/Andriod/PC/Mac…上,这个小程序就派得上用场了。
说说我对Windows Phone 7开发的一点感受吧。WP7的开发基于Silverlight和XNA,如果有这二者的经验,写WP7的程序完全不是什么难事。或者即使没有它们的经验,这要.NET和C#玩得比较熟,WP7的开发也是可以迅速掌握的。只是目前WP7的平台和SDK还有许多的不足,要写出一个功能丰富的应用还是有很多限制的。比如最初因为WP7无法同步文件到应用程序中,我就想写一个Dropbox的客户端,通过Dropbox来下载文件。可是WP7的SDK没有开放接口来调用其它程序,比如我可以下载一个Word文档,可是却无法调用Office Mobile来打开这个文档。内置的Outlook可以做到,但SDK却没有提供开放的接口。不得已,我只好将目标定成了最容易处理的纯文本文件。使用纯文本的另一个好处是,可以轻易在各平台间共享。OneNote Mobile是更好用,但是却无法在微软的平台之外打开。
MarketPlace的测试算是比较严格,一些细小的bug都能被找到。但是它的政策也存在问题。SimpleText昨天通过验证之后,我想将价格修改成free,这样我就可以邀请大家来测试了。可是不幸的是,MarketPlace不允许我这样做,一个Paid app不能被改成free。MarketPlace也没有类此iPhone App那种promotion code的机制,我即使想送几个程序给朋友也不行。看起来MarketPlace是不太鼓励free app的,我起初定了一个0.99USD是因为看到论坛里有讨论说,free app在提交了5次之后,第6次开始每次要向MarketPlace交20USD。SimpleText提交了3次才通过认证。我不太能理解MarketPlace这样做的理由是什么,但是如果微软希望MarketPlace里的应用数量和下载量迅速增长的话,这个政策是不会太有帮助的。
不论怎样,这是我一个人独立完成的一个商业程序。4周的业余时间,一个星期研究Dropbox Api,WP7类库和MarketPlace的规范,一个星期写代码,两个星期提交,修bug,再提交。能够最终通过MarketPlace验证已经让我很有成就感了。