2021年6月24日星期四

过程与积累

目标是重要的,大部分人都想成为有钱人,大部分公司希望在竞争对手中脱颖而出,大部分人都想在自己从事的领域内出类拔萃,然而通常为达到目标都要付出努力。
比如财富,理应靠积累,经营,管理来获取,这必然要投入大量的精力和时间,大的财团和家族甚至经过几代人的经营才形成了今天让人羡慕的样子,一夜之间腰缠万贯总是极少见,假使中了彩票,或靠偶尔的投机敛财而暴富,即使达到了目标,也会被冠以“暴发户”的帽子,暴发户显然不是个褒义词汇,其潜台词是庸俗、自大、狗屎运、不值得尊敬。排除嫉妒和特例,这种看法多数时候是有道理的:因为缺少了达到目标的过程,缺少了在这个过程中积累起来的经验、体会、磨砺与乐趣,难免会狂妄、浮躁、不可一世、盛气凌人。

“聪明”与“运气”一样,几乎每个人都会有一些,有的人多了,机会就会更多,可能会更方便快捷的达成目标,所以一夜暴富没有什么值得骄傲的,如果心平气和,别人可能会羡慕,如果狂妄浮躁,必然会被鄙视(加上嫉妒的成分),社会上滋长的仇富心理大多与此有关。真正值得尊敬的有钱人,大抵都是那些经过长时间的努力和贡献而积累财富的人,对这种人来说,财富往往反而是其工作与志向的副产品。

与”聪明“和”运气“不同,智慧是必须经过学习和体验而得来的,智慧积累了前人的经验和自身的修养,是人类最可宝贵的财富。不论财富也好,智慧也好,追求永无止境,所以目标反而不是最重要的,向目标努力的过程才是我们人生最可宝贵的财富,带着希望去经营与积累,带着快乐去学习与体会,远比为了金钱的多寡而闷闷不乐要“聪明“得多,也”智慧“得多。

2010年1月13日星期三

据说转载这个过些天百度会给钱

以下文字转载自一个现已不存在的地址:http://is.gd/6bEeB;发文时间是2010年1月13日下午1:20分左右,作者时百度的首席设计师孙云丰(孙老师你好,恭喜一博成名):

google宣称要退出中国,所证明的,恰恰不是市面上的那些g粉所宣称的那样,google是个人权斗士,而刚好反了过来,正好证明google是个市侩分子。

google 的首席法律顾问的调调让我感到恶心。因经济利益退出,就直白白的说好了,把自己涂脂抹粉一番,还煞有介事的提到google被中国人攻击,中国异议分子的 Gmail信箱被攻击,把这些事情作为退出中国的铺垫,这种论调是侮辱中国普通老百姓的智商,但还真有可能迎合那帮目空一切,但从未到过中国、对中国没有丝毫了解,却又喜欢对中国说三道四的西方人的假想。

只提一个假设,如果谷歌占据了中国80%的搜索市场份额,google的高管,还会这么高调的宣称要do no evil,从中国退出吗?

整个事情给我的唯一感受,就是恶心。

科普一点:

信息不对称是造成社会不平等最主要的原因之一。而对普通百姓最为关键的信息,并非中南海秘闻,而是最为常规的经济、文化、科技等领域信息。尽可能的为普通老百姓对这些领域的信息提供便捷,并消弭信息占有的不对称,这是搜索引擎存在的最大社会政治意义之一。

从这个角度而言,尽可能的设法为百姓提供便捷的信息获取技术服务,提供切实的价值,而不是挂羊头卖狗肉的宣称自己do no evil和政府撕破脸皮搞壮烈,才是一种真切的负责态度。找台阶下可以,但不要拿一个高管制国家的民众感情来做台阶,这是极其不道德的。

政治环境短期内是无法改变的。在中国,每个企业或者个人,都必须戴着镣铐跳舞。其实在别国一样,只是程度之别。但这是现实。在有限的条件下,尽可能的提供自己勉力而为的一份子,才是一个真切的做企业、做人态度。

在我博客上乱喷的兄弟,甚至还有搞笑的喷我five毛党的,都回家好好的念点书,再回来喷吧。希望看得见点水平的,而不是除了咒死爹死娘就不知道说啥的。 80年代的愤青,可不是现在这副衰样儿。

————–

以上是作为一个曾经的忠实google用户而说的,和百度无关。市面上沾沾自喜于了解一点google的产品技术细节将google奉为道德楷模而自封G 粉的兄弟,请勿跟帖瞎喷,你们根本不懂什么叫搜索引擎,什么叫自由人权。

————–

btw,评论关闭。要喷到twitter上喷吧。我的地盘不欢迎。

2010年1月1日星期五

支持生成 <a href="http://goo.gl">goo.gl</a> 短网址的 Firefox Google 工具条

挺好用的,不明白为什么tinyurl和bitly之类的缩短服务被墙,大概是看着一个个身材短小精悍的字符串这些家伙心里发毛。google的服务生命周期应该长点吧?

主旨:

"支持生成 goo.gl 短网址的 Firefox Google 工具条"
- 天涯来吧 - Google - 支持生成 goo.gl 短网址的 Firefox Google 工具条... (查看 Google 边栏评注

2009年4月28日星期二

3G初体验

运营商真黑。
听说联通的wcdma试运行了,周末烧包一下,订了个50元包600M的套餐,告诉我24小时开通,将近至少30小时之后,开始使用,能连wcdma,虽然不太稳定,但速度还算流畅,又下载又看视频的,试了老半天,很快收到短信说余额即将不足,又玩一会,联不通了,好半天才发现是欠费了,赶紧缴费,上网一查费用,原来套餐还没开通,是按1k一毛钱收费,在不到一天的时间里,扣去将近一百元,NND,算是我吃饱撑的交学费了吧。仔细再看清单,怎么这么多种费啊?!于是打客服电话,要改套餐,答复说着套餐是按一整月算的,也就是说我27日定制成功的套餐,只能用到月底,下个月如果不改就默认还是这个套餐。于是我打自动台去改,告诉我只能带身份证去营业厅修改,再转人工台询问,得到同样的答复,只好作罢。顺便问了一下那些SP收费和增值费怎么回事,怎么取消,回答那是在网上下载东西时网站收的费,我说那你帮我取消吧,回答那是服务商收的费,跟我们无关,我说费用都在你们网站上列着,有代码(虽然不知道代码代表什么服务),有时间,有扣掉的钱数,为什么与你们无关?那我就想取消怎么办啊?回答还是那都是你自己下载东西收的费,要不给你发个短信自己查看一下你定制了什么服务吧。于是我按提供的短信查询了一下,吓了一跳,怎么一下子凭空冒出来五六种服务?我只记得定制过一个天气预报的服务,其他是哪来的?上网查一下,果然有很多骂声,比如“106558550”这个代码所代表的业务,到现在我也没弄清到底是个什么东西,钱倒是每月照扣不误。

作为一个懒人,从99年用上现在这个联通号码,就一直没换过,现在一打客服电话,都是“世界风VIP客服为您服务...",都熬成VIP了,不容易啊,但这服务哪见得一点VIP的影子?资费高就认了,信号不好也都习惯了,最让人受不了的就是完全不符合普通人正常思维方式的计费标准,以及强行定制乱收费的盗贼行径。懒如我者都要发飙了,却一点办法都没有。拿起法律武器以理力争?顶天退你个十块八毛的,够不够花的那些时间生的那些闲气?电话还是要打的吧,3G还是要用的吧,这么多年到处留号,实在没法轻易换掉。莫非是我当年用联通没用移动是站错队了?莫非其他移动业务运营商没有这种问题?未必吧。面对强势的垄断行业,除了自己加点小心之外,忍了吧。

老夫很生气,但是相信后果一点都不严重。

2008年11月19日星期三

这集Boston Legal太扯

美国人对中国的妖魔化印象根深蒂固。

最近一集Boston Legal(S5 EP08),讲述一个在美国呆了三年的15岁中国女孩,意外怀孕,打算堕胎,最后的真相竟是:堕胎的原因是这个女孩得知胎儿是女性,作为中国人,很自然的 要把孩子。在美国人看来,中国人对性别选择已经到了令人发指的地步。还有这样一句台词:B超对中国人不是件好事。整个一集,中国人重男轻女和性别选择竟成 为了中心思想,像其他每一集一样"发人深省"。

真他奶奶的讨厌。现在中国农村都没像以前那样看重性别了吧?想象一下,一个15岁,在美国生活的女孩会因为胎儿性别原因堕胎?放他娘个屁!美剧的编剧有水 平,不过只要涉及到中国相关的话题,必定是20年前的陈词滥调,没有调查,没有体验,单凭想象和印象,便极尽污蔑鄙视之能事。让人恶心。

几乎每一部美剧都有类似情况,包括我最喜欢的House和Boston Legal,近期都有这种倾向。令人失望!

2008年10月13日星期一

无病呻吟之科幻小说

好几次,家里大清理的时候,老婆总是跃跃欲试的要把那些占据书架一大角,积攒了十来年的科幻世界杂志当废纸卖掉。在一哭二闹三上吊和威逼利诱的把戏用尽之后,我还要费好大口舌才能为这坨故纸堆争取到更长久的生存权。

的确,对科幻作品,通常的看法是不登大雅之堂,是与漫画游戏一样给少年人消磨时间用的,几十岁的人还看科幻,在很多人看来是挺可笑的一件事。另外,在信息触手可及的当下,积攒大堆故纸,似乎也是某些上了年纪的人无事可做时聊以怀旧的习惯。所以看科幻、攒杂志这样的事情,对我而言权作自娱自乐,不足为外人道。

优秀的科幻小说作者通常都良好的科学素养,对其所处时代的科学技术发展有全面深刻的认识,对科技发展的方向和可能带来的变革及影响有着卓越的敏感性和预见性。比如儒勒凡尔纳的科幻小说在今天的读者看来几乎没有科幻元素,更像是一部部历险记,这正是因为凡尔纳对他所处时代的科学技术发展有着异乎寻常的前瞻性认识,他在小说里的种种“奇思妙想”,早已被一一变成现实,甚至有些东西很难说究竟是凡尔纳预言了未来还是科学家发明家们受到他的启发创造了未来。同样,现今流行的林林种种高科技的新玩意,比如互联网、病毒、卫星、基因技术等等,在三十年前也都是科幻小说里的常客。而克拉克曾经在小说里预言的太空梯、太空核动力、地震预防、人体冷冻等技术,也正是目前科学前沿的一些主流方向。从这个角度看,不得不说科幻也是具有现实意义的。

身处于这样一个科学技术飞速发展的时代,人们对科技的进步趋向于两个极端,一方面,不论多么稀奇古怪不合常理的事情,总有人信以为真,或是认为理所应当,因为总有人去研究,总有人去控制可能产生的不良后果;另一方面,由于媒体的误导,大众反而对一些原本正常的科学领域的现象和研究小题大做、夸大其词、杞人忧天。从这个角度看,更广泛的科普教育是必要的,而优秀的科幻作品往往能做到寓教于乐,且雅俗共赏,不失为一种科普方式。这算是作为一名科幻爱好者的一个借口吧(爱好科幻是需要借口的,否则会被认为是幼稚浅薄,比较尴尬~_~)。

科幻作家往往是悲观论者,他们往往会更敏感的看到科学技术发展的负面效应,在他们的笔下,世界曾经一次又一次的被毁灭。因此,作为一名科幻爱好者,我对那些有科幻色彩的现实的第一反应,往往反而是负面消极的。下面是近来看到的几则具有科幻色彩的新闻,我的第一反应都是回忆起曾经看过的某些类似题材的科幻作品(新闻标题后面对应的是相应的科幻小说),权作自娱自乐。





2008年9月3日星期三

Chrome之画蛇添足

整整一天,到处都弥漫这Chrome的味道,原本没必要多说什么了,不过在随便记录点想法之后,忍不住手贱,狗尾续貂一下,反正也不多我一个。

关于google的浏览器Chrome,原来的很多想法不准确,比如以下几点:
 - 原以为,google会推出自己的浏览器,但短期之内(甚至三年内)不会,实际上几天之前人们还只是捕风捉影,而Chrome几乎一下子就从石头缝里蹦出来了;
 - 原以为,google即使出浏览器,也是为了给自己的现有服务提供一个定制的平台,而非与MS、Mozila、Opera和Apple以及大批山寨浏览器直接交锋的通用的桌面浏览器;实际上从对Chrome的试用可以感觉,它的目的就是一个通用浏览器,有为其自身服务提供优化的余地及可能,但绝非单纯的google服务客户端,它同时借鉴了各家之所长,虽然beta还很简易,不过其心昭昭,如果说MS的浏览器是利用了OS的优势而进行垄断,google就是利用了它的口碑和明星效应强势出击;
 - 原以为,google的浏览器至少会与其自家的服务有很好的集成;但是从这个beta来看,与google服务的集成很弱,甚至远不如Firefox方便;
 - 原以为,google的浏览器会与自家的一系列客户端软件有很好的集成,比如gtalk,picasa, desktop search,google earth等,而且与Firefox类似,必然提供设计良好的扩展机制;目前来看,任何集成都没有,设置连google toolbar相匹配的插件也没有,也没看出可能的扩展方式;
 - 原以为,google的浏览器会有很多看起来非常标新立异的东西;事实上看起来都是其他主流浏览器已经具备的特性,比如标签页预览(Opera和Firefox相应扩展),简洁的外观(Safari),url快捷输入,标签页和书签管理(各种新版本的主流浏览器)等等;
 - 从发布前的截图看,Chrome似乎很简易,直观的感觉就像gtalk那样,虽然有特色,但为了简洁而放弃很多主流IM必备的功能,所以很难成为主流;不过试用之后,发现之前的臆断很错误,google很像是在玩真的。

Chrome很多特色功能与现有的主流浏览器看似雷同,但细节上下了很多功夫,增强了用户体验,也就是在保证用户已有的浏览器使用经验的同时,用起来更舒服。比如:
* 对现有浏览器的兼容与重用。书签、密码、浏览历史、导航条等可以直接从默认浏览器中导入,完全称得上无痛迁移;
* 地址框兼作搜索框,这样一个细节的变化,不仅给google最核心的搜索功能带来了便捷,更重要的是,如果以Firefox上近来流行的Ubiquity扩展为参照,这个简洁的地址栏给mashup带来了更多的想象力,而mashup面对的是无穷的天地。虽然功能上与Ubiquity差距甚大,不过对google而言,这几乎是举手之劳了;
* 速度快。好事者已经测试并得出结论,Chrome的浏览速度是IE的40倍。这个数据未必客观公正,“速度”一词也很含糊(我想准确讲应该是指页面渲染效率和并发的web资源访问的效率),但即使只凭主观感受,Chrome比其他主流浏览器都快,甚至比系出同门的Safari(同样基于Webkit)都快,确实快。不过问题是,裸奔的Firefox也很快,Chrome现在差不多算是裸奔,不知道加上那么多插件后是否还能这么快。与速度(效率)相对的是,Chrome占用系统资源很多。
* 默认的平台支持。最重要的是google gears,这差不多相当于微软在IE里默认内置了Silverlight。尝试一下zoho,rememberthemilk,google reader等支持gears的应用,没有障碍。还有默认内置了flash plug-in,似乎其他主流浏览器第一次访问flash内容时都需要安装flash插件,google把这个约定俗成的插件变成必备的了。当然还有google对Chrome最重要的原创功能,即多线程javascript引擎V8,对用户而言它是透明的,不过访问那些重度使用javascript的应用时,有性能提高的感觉(或者是错觉?)。
* 另外还有一些细节,是很有原创意味的,比如tab可在窗口间自由拖拽,地址栏高亮显示域名,将当前页面创建为应用程序快捷方式等,书签栏包括了一个“其他书签”,很惊讶的发现安装在Firefox里的StumbleUpon的内容作为书签被导入进来(但没有delicious书签,也许是因为它属于yahoo?)

这一切都像是google在向所有用户在招手:试试我的浏览器吧,不会让你失望的,至少不会让你不习惯的。

据说Chrome这样一个beta一天之内占有了2%的桌面,很多人会很受伤,最受伤的大概是Firefox,因为google原本是Firefox最大的客户。与Sarari相比,Chrome优势也很明显,而且更容易占领各种桌面操作系统。

作为beta版,Chrome还有很多需要改进的地方,就个人喜好而言,我觉得one process per tab的方式太耗系统资源,相应的进程管理也没什么必要,标签页的管理不如firefox或ie方便,不支持gesture,浏览器本身还很脆弱,容易崩溃,等等。

接下来google会做什么?进一步改进用户体验?提供扩展机制?让Chrome更健壮?提高安全性?与google各类服务及软件的整合?我们试目以待。


2008年8月29日星期五

浅谈developer friendly

Windows XP推出的时候,XP一词几乎到了被滥用的地步。XP大概是指user experience,即用户体验。为软件付钱的是用户,所以用户体验当然重要。而开发者(以下称developer以特指)大概是“用户”的一个特例,当developer在使用一种开发工具、平台或框架的时候,developer的体验也就是用户体验。作为一个developer,很多时候更关注的是开发体验。好的开发体验可称为developer friendly。下面基于自己的体会,结合.NET和ROR两种开发体验的范例,谈谈对developer friendly的理解。

.NET和Ruby On Rails均是最先进的软件开发模式的代表,虽然它们并非一个级别的东西,但思想上有很多共同之处,这些“共通“的地方,大概就是他们”先进“之所在。我觉得它们最大的一点共通之处在于二者都花了很大的功夫在developer friendly上。另一点在于二者都力图在应用开发的不同领域(domain)内提供相同或类似的用户体验,更准确讲叫开发者体验。

先以.NET为例,.NET的出现对developer有两个重要意义:
* 一是对多语言的支持,使得developer能最大限度的利用已有的知识和经验,同时还能从统一的clr中得到同样丰富的类库与run-time支持,vb到vb.NET,java/c++到c#(还有那个被废掉的java版本的.NET实现),javascript到jscript.NET,以及现在的DLR支持下的多种动态语言的实现(ironpython, ironruby, javascript等等),而CLI(和DLR)的标准化,使得在.NET平台上扩展任何编程语言的做法在理论上是可能的。虽然我也总是认为,这只是把同样的东西(.NET framework)用不同的方式(各种基于.NET的语言)来表达,很多时间与精力花在这上面有点浪费,但是从微软的角度看,不论你从哪里来,.NET总是欢迎你,对developer来说,没有什么比直接使用已有的知识在新平台开发更友好的方式了。

* 另一个方面是在不同domain内开发方式上的趋同。原本针对微软平台的产品做开发和二次开发都需要相应的语言和方法,这种”domain"很多,传统的开发方式更多,比如桌面应用(vb, vc++等),web(asp/COM/vbscript/jscript/html/css,iis...),database(T- SQL),office(vba),mobile(embedded vb/vc)等等,一个domain内的熟手要想转到另一domain,是很困难的事情,不仅在于不同domain所需知识的差异,还包括开发方式,编程习惯等很多方面,在跨domain开发时,developer很难应用现有的经验和知识,基本上跨domain的技能都需要从头学起。而.NET从发布至今,微软的几乎所有产品都在悄悄的(或突然的)支持.NET开发,至少在编程习惯和开发方式上是这样的。
- 桌面应用自不必说,从1.0开始,Windows Forms便屏蔽了不同开发工具和语言的差异(几乎只剩下不同语言语法上的差异了),到.NET framework 3.0(3.5/SP1)对WPF的支持,从前使用的SDK和API几乎可以完全忽略。

- web应用方面,对客户端的要求只是浏览器,当大多数编程工作集中在server上时,更可以完全放弃以往ASP+COM粗糙的编程模型,而随心所欲地发挥.NET平台/语言的功效。 asp.NET提供了基于server control的web form编程模型,这种方式几乎屏蔽了web应用本身固有种种复杂因素(stateless, client/server roundtrip, debug, security, validation等等),使得web开发变得如同传统的桌面程序开发那样方便与直观(拖拽,数据绑定,属性设置,双击,编写事件代码,F5运行...),继而在ajax走到前台的时候,ajax也作为server control的extension被加入到toolbox里,在2.0的时候,masterpage,membership等原本需要大量编程才能实现的工作被抽象成了一个个out-of-box的feature,只需配置和简单编程即可使用,等等。当然webform屏蔽了太多细节,为了事件驱动的编程模型增加了太多原本不必要的东西,以黑盒子方式出现的server control给developer带来了很多不安和麻烦。为了顺应developer之意,随后asp.NET mvc作为另一种可选的开发模型被一个preview一个preview地加入进来,借鉴了ROR, django和monorails等成熟的mvc框架后,在强大的.NET framework和visual studio支持下,asp.NET mvc应该会是web开发领域的best practice,虽然其中几乎没有什么微软的创新。随着基于DLR的动态语言的成熟,rails式的DSL也不在话下,JRuby+Glassfish已经做了一个很好的榜样。

- 在database开发方面,无论DDL, DML还是DCL,原本都是SQL(T-SQL)的天下,从SQL Server 2005开始,数据库引擎开始支持.NET assembly,developer再也不必感叹stored procedure和function在实现复杂编程时的限制和不便了,除了部署时有些许麻烦,用vb.NET操作数据库实在是爽(如果有过在stored procedure里实现复杂逻辑的经历会深刻体会到这一点,虽然这不是一个好习惯)。更牛的是针对sql server所提供的报表服务,分析服务和集成服务,SQL Server安装时可以选择安装一个visual studio环境,可以用来在数据库上直接开发和部署这些服务,所以,甚至在生产环境里,developer都可以使用自己最熟悉的开发环境(visual studio)进行编译和部署,微软为developer想的真是周到。

- 基于office产品的二次开发由来已久,没记错的话,office2000以前只能使用VBA开发,2003里office里各产品开始支持.NET开发特性,visual studio里开始安装vsto扩展,到如今,vs2008里默认的项目模板包含了对2003/2007里各种产品的全面支持。office开发和部署原本是一个限制很多而且有些别扭的模式,而现在,把word/excel/infopath作为一种客户端形式,使用熟悉的编程语言,熟悉的事件驱动模型,基于完整的.NET framework,针对office的编程模型几乎与winform和webform完全统一起来,熟练的掌握winform编程的经验几乎可以没有任何障碍的转移到office应用开发上来,加上SharePoint的扩展,这种转移意味着现有的技能可能被放大到一个更宽广的领域。自身技能的可重用意味着经验知识增值和平缓的学习曲线,对任何developer来讲这都是个好消息。

- 还有一点可以说明,微软有一些很重要的努力几乎完全是为了developer friendly而做的。两个domain可以体现这一点,一是基于compact .NET framework的mobile的开发,另一是RIA方面的开发。mobile开发只了解大概,不过有一点比较明确,以前的windows CE上的应用开发一般是使用embedded c++/vb,简言之就是基于Windows CE这个小型的Windows(应该是小型而不是子集)采用非托管代码开发应用,优缺点与在windows上用c++和vb开发应用雷同,mobile开发毕竟不如desktop和web开发更广泛,所以按理说这已经足够了,在资源受限的mobile设备上,应该能简则简。之所以裁剪出个 compact .NET framework,除了移动设备硬件水平大幅度提升,j2me等移动设备上的虚拟机已有先例等原因外,给developer提供便捷一致的开发环境是一个重要原因,曾经做过简单尝试,虽然对mobile开发没有概念,但是按照开发winform的经验建立一个winCE程序(现在叫smart device了吧),拖拽、双击、事件编码,运行,直到一个手机样式的模拟器打开,程序运行起来,几乎没什么障碍,虽然实际的应用开发一定比这复杂得多,但对于一个developer来讲,这种体验必定能让人感觉到友好与自信。

- 更有说服力的是微软在RIA应用与开发上下的功夫,即Silverlight。从Silverlight的产生和发展过程即可见一斑。.NET framework 3.0发布以后,WPF是其中最酷最直观的一个新特性,不过曲高和寡,推广是个大问题,虽然微软想尽办法简化安装.NET framework的过程,也不遗余力的推vista,时至今日,仍然看不到wpf得以普及的希望。于是wpf/e出现了,'e'大概指 everywhere,能称得上everywhere的平台,大概只有浏览器,而基于浏览器的web客户端的局限性不可能从根本上解决,所以只有通过RIA。WPF的“样子 ”(和编程模型)看起来天生就与另一个早已遍地开花的RIA类似,也就是flash(flex)。在RIA上,Adobe与微软殊途同归,一个是从浏览器开始,flash到flex再到AIR,表明Adobe从网络扩展到桌面的野望。微软倒着走,既然暂时看不到wpf得以普及的希望,那就利用wpf给用户带来的印象深刻的使用体验,把wpf推广到浏览器上去。如今,真正基于wpf的应用并不多,对于普通用户来讲也无所谓有无,而所谓印象深刻的“用户”,很大程度上指的是developer,而“使用体验”也更多意味着开发体验。wpf的编程模型很优秀,有时候我甚至会想,桌面编程原本就应该是这种直觉的模型,比如以 tree结构组织的窗体和控件,本来就应该直接映射到xaml这种hierarchy结构上,用来描述UI component外观的属性,本来就该像css那样用resource和template来抽象和重用,等等等等... 从微软的角度看,他们也并没有“发明”这种新的编程模型,只是在向flex和xul等已经存在并经过实践检验的成熟的编程模型趋同而已。不过对于 developer而言,这种趋同绝对是一件好事,一个有经验的flex developer转而开发wpf或Silverlight是一件相对容易的事情,我们可以把wpf和silverlight看成是微软在向所有潜在的 developer示好的重要努力。再回头看Silverlight的发展过程,先前的wpf/e很快更名为现在的Silverlight,从名字到开发方式,都很有规划,很有章法,之前的wpf/e实际上只是一个过度,也许是因为当初有这个想法的时候很着急推出点什么,所以Silverlight 1.x 实际上只是wpf/e的别名,作为过度,它最大的问题并不在于它本身是否具有足够丰富的功能(事实上silverlight从一开始就支持各种媒体播放和很酷的交互方式,下载的run-time也很小),而是对于developer而言,它没有提供一个很好的编程模型,为了host一个silverlight组件(实际上是一个浏览器的plug-in在host),并控制silverlight与html的交互,只能通过javascript来完成。时至今日,vs2008(或其他任何一种IDE)都不能提供绝对完善的javascript编辑环境,而且javascript这种看似平常的动态语言,在充分发挥其动态特性并且代码越来越复杂的时候,会展示出其非常诡异的一面,所以如果silverlight要完全依赖于javascript的话,显然不容易被developer所广泛接受。于是微软推出了一种比较奇怪的版本策略,一方面这个从wpf/e改名而来的silverlight从beta演变成了1.0版,其后的1.x版本也都都基于同样的编程模型(javascript);另一方面Silverlight 2.0的alpha被推出,形式上与1.x同,但几乎整个run-time都被重写。实际上并不是重写,据说silverlight与wpf是从同一个代码树派生下来的,可以说silverlight的run-time是.NET framework的一个子集。第一次看到2.0的这个思路让我觉得非常惊讶,因为这意味着整个.NET framework要被挪到浏览器中,只依赖于浏览器里的run-time,而不论本地OS是否安装(或支持).NET framework。这需要多大的一个run-time啊?!当确认我的想法基本没错后,就马上开始浮想联翩了。因为这意味着.NET developer可以使用最熟悉的语言和环境来开发一个RIA程序,几乎不需要太多的额外知识,意味着一条平滑的学习曲线(当然前提是对wpf、 linq等有足够的了解)。而微软对silverlight运行环境的承诺是只需下载一个2-4M的run-time,难以置信。随后我们看到的是 silverlight的不断改进,包括加入越来越丰富的控件和对动态语言的支持等,同时runtime的尺寸一直控制在可以接受的范围内,直到2.0的 beta版本推出,北京奥运会期间NBC采用silverlight播放网络视频,使其知名度一举飙升。Silverlight 2.0实现到目前的状态,微软花了极大的努力,Scott Gu在一个专访中提到了这些努力,包括如何裁剪和如何尽可能的优化以控制尺寸。回头再看,Silverlight2.0所做的这些努力,几乎只是为了一个目标:developer friendly。(btw:采用同样策略的还有IronPython,1.x版本基于CLR实现,并行的2.x版本基于跟适合动态语言开发的DLR实现)



再看看Ruby On Rails。ROR是一个优秀的web开发框架,虽说与.NET framework并不是一个级别的东西,不过ROR的很多优秀之处体现了和.NET framework同样的理念,重要一点就是对developer而言十分友好。

与.NET开发相比,ROR并不十分强调IDE的先进性,textmate据说是DHH们的最爱,咱没有mac,不过体验过号称为textmate移植版的e-texteditor,老实讲,用惯了visual studio的developer不会觉得他们有何不同凡响之处,不过是一个对ROR开发而言便捷得恰到好处的编辑器。即便更高级的ROR IDE如NetBeans 6.1和3rdrails,也与visual studio有很大差距。而ROR的主要特点是一个框架、一种语言、一套惯例与思路。对developer而言,ROR最大特色是它的全部东西对开发而言都是实用的,也是易用的,换言之,developer friendly。

作为框架,ROR提供了shell command来生成代码,固定的目录/文件结构直接映射到MVC模式,无需配置文件(需要的话也只是几行简单yaml),大量helper方法几乎囊括了web开发中所有常用的功能,扩展很简单,写helper,放在相应的helper文件,写类库,放在lib目录,第三方扩展,放在vender目录,执行任务,运行rake即可,运行和调试很便捷,script中内置方便使用的web server,等等...就像常说的那样“框架为你规定了一切,你只需把精力放在真正重要的事情上”。

对developer而言,过多的选择有时候会让人不知所措(比如在使用php时,单单MVC框架,就有十种以上选择,再加上不胜枚举的模板引擎和数据访问方法,以及他们的组合),在纷纭复杂的选择中,花费了时间,最终却未必得到一个适合自己方案。rails则恰到好处地把所有必要的东西包装(比如ActiveRecord、 ActionPack和ActiveResource)并组织在一起,近乎于best practice,其不同版本对框架结构的调整也体现其与时俱进的生命力。“恰到好处”非常重要,这意味着框架能够在一方面能够满足大部分常规需要(不必开发大量底层重复性的代码),另一方面提供足够灵活的机制让developer有充分的扩展余地。这个“恰到好处”正是针对developer而言,“恰到好处”也是rails从众多类似框架中脱颖而出并被纷纷效仿的关键所在。

作为一种动态语言,ruby几乎是最简洁优雅的(个人认为要强于python)。ruby本身是一种通用语言,但它的动态特性使其经常与另一个词联系在一起,即DSL(Domain Specific Language),这里所说的domain可大可小,可以用来描述某种业务领域,也可以用来代表软件开发的某个方面,比如,html或css都是各自 domain内的DSL,分别用来描述web页面内容/布局和定义style。而Rails本身就是一个典型的用ruby定义的在web开发领域内适用的 DSL。也就是说用ruby语言定义一组在web开发中实用/常用的语法,这套语法接近自然语言,专门适用于web开发。打个比方,"3.years_ago"这样一个语句,实际上是rails为int类型扩展了一个years_ago方法,以简洁易懂的方式代替了通常至少需要几行代码才能实现的功能,即显示3年以前的时间。之所以定义了这样一个方法,是因为在web开发中经常会有计算和显示特定时间的需求,rails里包含了大量此类扩展,但绝不是随意为之,比如不存在一个"3.yeas_ago_plus_two_months"方法,因为就一般意义上的web开发而言,这种方法没有代表性,且不可枚举。而ruby的好处在于其开放性,如果在你的应用中确实会经常用到“n年以前加两个月”这种方法,你可以在helper或lib甚至 rails本身中扩展这样的方法。所以DHH采用ruby来实现rails并非偶然,这样一种灵活、易读的动态语言,对developer而言,是最舒服的选择。这里有个体会:即使使用cakephp或django这些与rails类似的web框架,因为编程语言上的差异(php和python),都没有使用ruby on rails时那种惬意的感受,这只是个人看法。对developer而言,大概这便是friendly的体验。

说到DSL,再补充一点。由前例可以体会,对DSL而言最重要的一点就是对domain恰到好处的抽象。 “恰到好处”可以理解,也就是前面提到的为什么扩展了years_ago方法而没有years_ago_plus_two_months方法。而“抽象” 这个词本身比较抽象,什么样的工作算是抽象?抽象到那种级别合适?没有标准答案。不过在rails里一些重要的方面体现了如何抽象和抽象到什么地步。有三个典型的方面:

* Model: 这个词就是MVC里的M,本身就有点抽象,通常理解为数据模型,在rails里,数据存储介质一般指database(当然也可以是xml,csv或一个 pojo样式的不与任何存储介质关联的实体类),对数据的抽象就是model, ActiveRecord就是model的具体体现。ActiveRecord就是一个ORM,与其他ORM工具的不同之处在于,在rails里,不需要描述实体与db映射的复杂配置文件,多数时候这种映射的依据就是convention,也就是按一些约定俗成的规则做映射,比如一个叫posts的表对应一个叫 post的model类,posts表中一个叫user_id的字段表明users表与posts之间存在一个多对一的外键关联。这种规约看起来没什么大不了,不过对于一个通用web框架而言,“以规约代替配置”这种设计理念是很大胆的,某些时候,这意味着rails里的ActiveRecord可能无法满足一些特殊需求(当然rails提供了足够灵活的机制在需要时可以用代码配置这种规约),而这种代价换来的好处是在很大程度上简化了配置,简化的代码结构,减少了依赖,目的无他,程序对developer而言更清晰简洁而已。ActiveRecord的好处当然不止于此,一旦在实体中定义了 association,就可以便捷的在关联对象之间导航,这种关联可以是1:1, 1:n, n:n, join tables, conditional joins和polymorphic associations,尤其是polymorphic associations,几乎可以实现传说中的OODB了。此外,在ActiveRecord中定义grouping,定义validation,都是非常简洁惬意的事情。在第一次看到LINQ to SQL时觉得这是非常棒的一种数据访问方式,不过随着对rails中ActiveRecord的深入了解,我简直怀疑LINQ是在照抄它的思路了。再加上migration和针对db的rake任务,以及自动生成的test框架,rails中的数据访问相关功能就完整了。

* HTML Template: rails中使用ERB作为默认的模板引擎,ERB本身功能很完善,不过与其他知名的模板引擎相比,似乎并无特别之处,有时反而觉得django的模板引擎更规范一些。rails2.0中也可以使用haml作为模板引擎,如果习惯perl的模板方式,haml也是一种很好的选择,更为清晰简洁。在这里谈起模板引擎,是因为考虑到模板的概念是对传统html的一种抽象。更准确的说,rails提供了一套比较完整的view templates,除了ERB之外,rails还提供一整套helper,比如“form_for",”text_field“等等。我们得理解web应用是由一系列元素构成的,比如客户端的html和javascript,以及服务器端用来控制逻辑和做render的代码,而html中翻来覆去使用的就是 button, div, textbox等等html控件,加之css控制外观,javascript控制行为,才组合成千变万化的web page。如果手工编写一个form,很多工作是重复或大同小异的,rails里的helper们正是对这些重复却又不尽相同的工作的抽象。比如一个 text_field方法,只提供name和value参数,他就是一个textbox,加上其他option作为参数,可以为其定义css,或响应一个 onclick事件,如果再对其扩展,它还可以成为一个带有suggestion功能的textbox。采用常规的方法实现这样的一个控件,我们需要多样技能,比如html,css,javascript,服务器端的ruby代码,甚至ajax(XmlHttpRequest)等。helper的作用就是把这些重复性的工作抽象,包装在一个个望名而知其意的方法里。虽然常用的helper并不多,但rails还是提供了大量的helper,它们可以应用在web开发的方方面面,有些功能甚至是我们想不到的,他们唯一的共同点就是都是在实践中总结出来的,有实用价值的东西,而不是像一个通用类库那样包含了方方面面,但实际上很多东西是用不到的。这种使用简洁的抽象,唯一的受益者就是developer。

* Javascript: 这种东西需要抽象吗?能抽象吗?rails给出了肯定的答案。这里说的是RJS。可以把RJS理解为一种针对ajax特性的DSL。据说高级的 developer是不用这种javascript的抽象的,我的理解是对复杂的ajax操作,RJS有一些局限性,而且RJS以Prototype和Script.aculo.us作为基础库,也妨碍的根据个人喜好使用其他javascript库,比如jQuery。不过这不妨碍我们理解和使用RJS。RJS是一种模板形式,被成为javascript generator template,与通常提交一个动作结果的模板不同,这些模板会生成如何修改一个现有的被提交页面的指令。这可以很容易地修改声明有Ajax 应答的页面内的多个元素。这些模板的动作在Ajax背景下被调用,并可更新页内容。一个简单的例子如”page.insert_html :bottom, 'list',“,它的作用是在当前页面底部插入一个'list'元素。这是一个javascript在客户端操纵html元素的例子,然而作为developer,实现这个功能(以及其他复杂得多的客户端功能),几乎不需要javascript相关知识,因为这里没有javascript代码,只有对javascript的抽象。我想asp.NET的ajax控件扩展,实际上也是类似的道理:即封装javascript以及与服务器交互的功能,屏蔽复杂细节,展现高级特性。 如果不考虑RJS的限制,对developer而言,只要会用ruby,并且了解RJS能完成哪些功能,就足够了。

上述几方面有一个共同的特点:虽然它们针对的是web开发中的不同方面(db访问,html template,javascript),但抽象的结果是不要求developer精通每一方面的知识(比如 SQL,html,css,javascript,ajax等),熟练掌握ruby和rails框架的原理基本上就够了,我想对developer而言,这意味这平滑的学习曲线和快速开发的能力。

最后,说说为什么需要developer friendly。DHH在谈论为什么要使用ruby来开发rails时的一段话很有代表性:

Ruby is a language for writing beautiful code. Beautiful code is code that makes the developer happy, and when a developer is happy, they are more productive. Ruby is unique in the way it lets you express something briefly, succinctly, and beautifully.

没错,软件开发的主体是developer,用户会选择产品,但不会去选择开发工具与框架,只有developer(广义上的)才会在意这些,developer的取向直接引导了用户的使用习惯,Windows 的成功说明了这一点。让developer感到舒服,不仅会提高生产力和产品质量,也意味着你的框架,你的平台将被广泛接受,直接影响的就是你的市场占有率。

我想,当鲍尔默在微软开发者大会上歇斯底里的高呼”developer!developer!!developer!!!“的时候,大概想到的也是这些。

2008年8月26日星期二

奥运后杂感

奥运期间,每日看着中国的金牌数量疯长,振奋和兴奋之余,偶尔会想,如果奥运会是一个展示国力和证明中国人能力的舞台,无论是承办的过程还是所取得的成绩,我们都几乎做到极致。就算是为了满足一下虚荣心吧,这个过程也是任何一个大国,包括美国和前苏联,都曾经努力完成过的。奥运一方面是一种对国家综合实力最有好的展示,另一方面也是增强国人自信的必要手段。我们已经成功的完成了这次展示,接下来呢?

中国人向来很在意别人对自己的看法,北京奥运的成功,让我经常忍不住想知道老外们作何想法。不出所料,一向自大的美国人用奖牌榜代替了金牌榜,并且吹毛求疵别有用心的讲了很多无中生有也无可奈何的蠢话;一向无耻的韩国人虽然还没来得及证明菲尔普斯和博尔特是韩国人,但他们的奖牌榜是把韩日朝放在前面比较,其他所有国家靠后,他大韩民国自然又是雄霸天下;法国人讲了很多酸话,可以理解,不必计较;英国人利用复杂的数学模型计算出不同项目金牌的含金量,结果自然是他不列颠的金牌一块顶三块,也可一笑置之。这些言论和行为艺术也恰恰佐证了北京奥运的成功。

欣慰之余,也会去想,中国社会真的是如同北京奥运所展示出来的这么成功么?体育赛场上争金夺银的同时,我们在其他领域也有同样的竞争力么?当看到中国股市上与奥运金牌榜形成鲜明对比的曲线,当看到那些关于掌握了中国经济命脉的特殊家庭的文章,当看到那些在现有法制陋规下无辜蒙冤的案例,当看到灾区那些因为资金问题偷工减料而在顷刻间化为砖泥的校舍,当看到国有垄断企业按种种“国际惯例”从数以亿记的中国消费者身上赚取暴利......我们很难得出肯定的结论。

所以,有时候会觉得很困惑:我们的社会究竟是怎样一种状况和发展趋势?我们看到、听到和经历的东西,有太多的矛盾之处。是虚假繁荣么?GDP和其他统计数据即使水分再大,连续二十几年两位数的增长也是不争的事实。是穷兵黩武、好大喜功、不计民生么?十几亿老百姓解决了温饱和基本的教育医疗住房等问题也是世界上其他任何一个国家所难以企及的,反例见朝鲜和伊朗。是思想僵化不思进取么?"中国特色的社会主义"这一思想本身及其贯彻过程,都证明了全中国自上而下的创造力和锐意进取的精神。可是伴随这些成就的,却往往都是一些负面消极的东西:贪污腐败、权钱交易、弄虚作假、司法黑洞,一方面一些有权有势的党贵们欲壑难填,竭尽敛财之能事,一方面国际金融炒家们在中国这只肥羊身上插满了吸管,中国人民积累几十年的血汗钱被轻而易举的吸干榨净。而就社会制度,更确切的说是政治体制而言,似乎完全不像我们从小受到的教育那样,有着非此即彼的区别,我们这个号称为社会主义的国家已经不再是按马克思对生产资料所有制形式的区分所定义的那种了,而这似乎又没什么不好......这么多大是大非的问题看起来都很矛盾。

生活在这个种种矛盾并存、价值观混乱的时代,很多时候我们弄不明白什么才是主流和趋势,甚至也不清楚哪些事情是被鼓励的哪些是法律、道德甚至常识所不允许的。

带着困惑,阅读了一些关于中国社会现状、由来和反思的东西,希望能收获一些判断是非的依据和能力。最终却明白为什么要推崇“摸着石头过河”,因为各种原因(历史的、文化的、政治的、经济的、国际环境的、生产力水平和科技进步的)所造成的现状,对现代中国似乎没有一种现成可借鉴的康庄大道可走,想要发展,“与时具进”就绝不是一句空洞的口号。

有一本书很值得阅读,《十亿消费者》,最初在和菜头的博客里看到介绍,后来三口气读完。这并不是一本教中国人如何奋发自强的书,相反,这是一个在中国生活工作多年,对中国社会和各种现象有着深刻认识的华尔街记者所撰写的用来告诉美国商人如何在中国经商与中国人打交道的书。正如作者和译者(乱翻书)所言,这样一本书是不可能在中国出版的,并非因为书中有何“夸张”或“反动”的言论,而是由于书中所记之事大多发生在并不久远的过去,其中一些 人物依然活跃在领导层。作为一名记者,作者基本客观的记述了这些人和事,非常专业,每每从历史到现状,阐述和分析得非常透彻,从中我们可以了解很多虽然发生在我们身边,但却很少知晓来龙去脉的事情。同时很多对现代中国人和中国文化中的弊病的看法一针见血,很多观点是作为一个中国人很不愿意看到但却完全无法否认的,有一些部分我想我是红着脸读下来的。在这一点上,和鲁迅的阿Q正传有着类似的功效。

感谢译者乱翻书,是他的高质量的翻译工作,给我们呈现了这样一本指出我们问题所在并且能够帮助我们自省的书。

从古至今,中国从不缺少思考者和实干家。我们陷入低谷时,他们努力给我们自信和向前的动力;我们爬上高峰时,他们给我们提供警示和方向。这样的人可能包括鲁迅这样冷静深刻的学者,或是袁隆平这样热情睿智的实干家,但更多的时候是那些我们并不了解但却通过不同方式从不同角度默默奉献的普通人。我相信《十亿消费者》的译者和那些关注此书并有所思考的中国读者,同样都是怀揣着一颗拳拳爱国的热心,希望客观的了解我们自身的问题,希望通过自身的努力为社会和国家作出些许贡献的人们。

再看北京奥运会,对现代中国社会,可以把它看成一场盛大的仪式,既是一场对过去成就做总结的庆功会,也是一杯为全民族壮行的上路酒,任重而道远,我们的振兴之路也许才刚刚开始。

愚人杂感,杂记之。

2008年8月9日星期六

意料中的圆满

自以为是的,在第一时间写点直观感受,早上醒来却很后悔。

回顾一下所谓的第一感受,发现和我的本意基本相反,整个开幕式,看的时候很激动,看完之后很振奋,说点感受却很消极!

反省一下为何如此心口不一,大概是想当然的认为,精彩的地方大家都看到了,无需赘述,所以目光大部分集中在鸡蛋里的骨头上,结果反而三分褒七分贬,和本意大相径庭了。前面说的不足的部分,也无意收回,不过那些只是碧玉上的星点瑕疵而已,瑕不掩瑜。

刚刚看到张艺谋在第一时间接受搜狐采访的视频,很有感触,老张讲:很圆满 ,而且是意料中的圆满。努力、艰辛、自信,可见一斑!

2008年8月8日星期五

开幕式观感

先不看评论,随心所欲地写点开幕式观感。

1. 最后这个火点得太拽,主角连个正脸都没给,更主要的,看了半天也没弄明白那是个夸父追日还是嫦娥奔月。

2. 作为世界上人口最多的国家,发挥自己的优势,利用人海战术,开场的击缶和活字表演确实震撼!一些场景很有想象力,给人留下深刻印象,比如远远走来的烟火大脚,人与科技共同完成的巨幅画卷,平地升起的巨大星球(居然还是演唱主题曲的舞台)等等。

3. 某些方面,导演水平有待商榷。比如镜头的切换,总是感觉很别扭,该有宏大场景的地方弄得小里小气,该由长镜头表现的烟火弄得很突兀,该表现细节的地方没有 重点(居然还有一个将近10秒钟不知道是谁的脚的镜头)。总之,和煞费苦心的策划与表演相比,摄像导演得太一般了。

4. 最失败的就是那个假象的借助全场观众手势放飞白鸽的环节,领导也好,观众也好,中国人也好,老外也好,都在闷热中坐了五七八个小时了,没有强制的要求,有几个愿意劳什子连续不断的做那么拽的手势,用脚趾头想也该意料到。

5. 运动员入场时,观众的欢呼声很能听出些趣味,印象比较深刻的有中华台北(欢呼声仅次于东道主),韩国(也许是我听错了,但分明有嘘声在内),伊拉克(同情弱者?),美国(为啥没见到戴口罩的^_^)和中华人民共和国(东道主)。

6. 不记得从前的奥运会是否有人墙把运动员隔离开了,篱笆墙们从运动员入场蹦跶到结束,这大热天的,谁家姑娘谁不心疼啊。

7. 大腕云集,胡总带领下的中央领导们自不必提,布什普京盖茨一干人等也都扎在人堆里冒着白毛汗,让在家喝着啤酒吹着凉风的我们看起来很爽。江伯伯出镜率蛮高的,可怜了身旁那位年事已高的前任国母了。

8. 之前看过一些评论,说开幕式表演很张很艺谋,整体来看,确有此感。不过个人认为这不是什么坏事,原本想象开幕式表演中会有很多迎合世界各国口味的元素,实 际上并没有。感觉上,基本上体现了具有张艺谋特色的中国风格,张艺谋的未必是最好的,但只有民族的才是世界的,在这样一个向全世界展示的舞台上,只有把那 些我们自己看起来老生常谈甚至土的掉渣的东西拿出来,才有价值。

9. 不能完全否定东道主的服装设计,至少全场一眼就能分辨出身着红黄服装的中国运动员来。“西红柿炒鸡蛋”,之前听过很多人这样评论,总觉得是鸡蛋里挑骨头, 太夸张。看了以后才明白,没有比这更准确的形容了:)。我们有一个很大的问题,就是总是想方设法给事物赋予太多的象征意义,队服为什么一定要和国旗的颜色 一致?表演为什么一定要2008个人?开幕式为什么一定要安排在2008-08-08 08:08?为什么要选“五个”福娃做吉祥物?有谁能清楚的说出每个福娃头上那堆奇形怪状的东西都象征着什么来着?

天公也算作美,热是热点,至少没有出现传说中的中到大雨;这么大型的仪式,或多或少有点不尽如人意的地方也都可以理解。无论如何,北京奥运会的开幕式算是圆满结束了,跟着操了好几年心的全国人们也都可以松口气了。接下来,回到正题上,看比赛吧。

2008年7月30日星期三

给自频道找找茬

个人观点:到目前为止,"自频道"比较成功,最成功之处在于,就这么个破玩意发布至今已经引来无数关注,叫好的叫骂的声音此起彼伏,单从这一点看,在注意力决定成败的互联网上,自频道做得不错。

keso 很生气,因为“自频道版权问题”,北城更关注对“博客热情”的影响,还有讨论自频道成为“超级网络媒体代理商”可能性的,还有加问号的“新媒体自掘坟墓的 又一力作”,讨论的角度很多,我看多数是因为魏武挥介绍自频道的blog写的挺张扬。咱草根没资格也没兴趣参糊大佬们的口水仗,不过既然惹得咱花时间去体 验了,不挑挑毛病找找茬心里难受。

1. 不管定位多玄乎,说到天,自频道不过就是一个带编辑功能的rss聚合而已。

2. 既然首先是个rss阅读器,就得经得起比较和推敲,不要以为加个编辑功能再放上广告就是“新媒体商业”了,还是先别太看得起自己,至少基本功能和用户体验 上先和流行的rss reader看齐吧。反正我的使用体验是,不论从哪一点来看(内容输出、feed的组织和管理、阅读体验、收藏、标识、推荐等等)都比不上任何一个主流的 rss阅读器(google reader, 鲜果,抓虾)。

3. 列举几点感觉不好的体验:
* 所谓内容就是item的正文摘要,基本上没有能全文阅读的(除了那些原本就是输出几十字摘要的feed),就这样还放个“展开阅读”和“缩进文章”的开关,挺搞笑。
* 对item的编辑,居然也是“所见即所得”的,也就是只能编辑刚刚看到的摘要(还带着省略号的),我试来试去,最后发现真要编辑就只能回到原文处copy全文再paste过来,貌似很高级的操作哦。
* 看得出来为了显示摘要,程序做过一些处理,因为“摘要”居然不只是正文的开始的百八十字,不过显然处理得不到位,凡是经过处理的原文的格式信息全丢了,乱糟糟一大片,没人会有耐心去分辨。
* 像feedburner这种被墙封了的源,通通都是验证失败。拜托,你是做数据采集的,稍微有点专业手段好不好。鲜果抓虾从来没有这样的问题。
* 还是源的抓取,太慢了,慢也不要紧,我等你去抓的时候至少给我个提示吧,害得我傻了吧唧的以为输入有误,折腾了半天,不知道自己做错了什么,这种用户体验也太业余了。还是先向别人学习一下再说吧。
* 所谓“版权问题”根本是没法保证的,原始feed里一些重要信息很多没有显示出来,我可不是瞎说,专门拿rss文件对照的,比如digg的rss,作者、 分类、评论计数等信息都有,显示出来都没了,可能是因为digg的rss输出有自定义标签吧,不过这不是不显示原文作者的理由。
* 几乎每个原始feed都有pubDate的,不过在自频道里,所有的输出都是按"分享时间"来排序的,还大喇喇的在每个feed上方标识出时间和日期,我今天导入的feed,所有item的时间都是今天,而且没有地方能修改排序,看着真难受啊。
* 基本上这是我用过的最差的rss阅读器之一。如果算上编辑和分享功能,就是我用过的最差的带编辑功能的rss阅读器了。
* 我看到“自频道”旁边的“beta”字样了,可gmail也一直是beta。这种beta做个startup不会有人说什么,不过blogbus好歹也算 有点口碑的BSP了,何况“自频道”还炒得这么凶,这种水平的产品拿出来宣传实在有点脸红。你让我来做我可能做得还不如你好,可我是草根,我也没吹牛。

4. blogbus是BSP,作为provider,它应该是内容的生产者,优势在于已有的blog平台、用户和口碑。而“自频道”基于rss聚合,本质上,它是rss的消费者。虽然都是针对rss,但并不是一码事。就好像你是一个汽车生产商,但并不意味着你一定就是一个好的车手。

5. 如果真的要做一个自媒体,现有的主流的在线rss reader更有优势,比如鲜果和抓虾,几乎用不着大动干戈,给每个item提供一个edit功能就完全可以了,可以借shared items功能输出经过用户编辑过的rss,阅读就在现有的reader或任何其他地方(只要不是现在的自频道)。或者,假想一下,给热文之类提供 wiki功能,用户共同编辑热文(如果有必要的话)再输出,这样既避免内容重复,又保证原文质量,如果再加上一些人工分类编辑的功能,那才叫真正的新媒体 自频道。

6. rss(包括众多衍生者)被发明出来的本意是提供一种开放的数据结构,将信息结构化的,便于在internent上传递,便于信息“忠实”地在生产者(如 blog)和消费者(如rss reader)之间传递。我觉得“忠实”很重要,就像正规的电子文档都用pdf,因为pdf的内容一般来说是不容易被修改的。当然这是一种防君子不妨小人 的约定俗成的办法,如果有人改动了原始pdf公文的内容并再次分发,就叫“篡改”。我理解rss也是同样的意思,原样传播是正常的,你当然可以去编辑和修 改然后重新发布,不过在我看来,这就是篡改,是没有公信力的。别人没这么做并不是别人不能,大概是不屑吧。

7. 假设如其所愿,“自频道”各方面都就绪了,结果可能就像很多人预料的那样,“突破了自动抄袭的技术壁垒”,“成为垃圾站的温床”,可以预料到的是:大量重复的、雷同的内容层出不穷,有价值的信息被埋没在更多的垃圾里,这是对用户耐心的考验,而且几乎注定要失败的。

8. 按“自频道”宣传的本意,不过是要给人们提供一种批量的自动导入和编辑内容的方法,如果人们愿意花点时间(比如去适应“自频道”糟糕的用户体验的时间),利用现有的互联网工具,谁都可以创造出更方便的“自频道”。比如:
* 使用yahoo pipes(或ms的popfly或google mashup等mashup工具)去处理rss源,都是很cool的东西,不必被流程图模样的block吓到,它做成那样就是为了给不懂编程的人来用的, 只要习惯了他们的用法,获取rss源的途径几乎是没有限制的,处理rss源的方法也几乎是无限制的,有限制的只是想象力。
* 使用任何一个online rss reader订阅自己制作的rss源,或者在igoogle,netvibes上展示你的源。定制的源可随时根据需要去修改,或者根据不同需要制作任意数量的源。
* 如果真的需要编辑rss内容(为什么?),如果恰好懂一点编程,去google app engine上申请一个app,做个导入rss的接口,做个list和form,或发挥想象力做更多的事情。
* 这些都是随便提提,可选择的方法远比这些多。对于自频道的假想用户,上述都是可以自己做到的,不需要花一分钱,需要的可能只是花点时间去了解和学习一下,DIY的感觉比被人忽悠好得多。

2008年7月17日星期四

Deploy Ruby On Rails App on Heroku - A Simple Guide for Windows User

Heroku is an amazing online deploy/development environment for ruby on rails.

Ruby on rails is popular due to its practical methodology, framework and tools, rather than an extensive acceptance by web hostings(like php). If you've tried to deploy a ror application on one of most of popular web hostings (those promised to provide 1500+G space, 3000+G/mo file transfer), you may agree with me, because they always limit you so much. Of course you can buy a dedicated server, but how about just publish a toy project before pay anything? Heroku is a good choice.

As an online service, heroku did some wonderful things, for example, an irb, an ror editor, an rails console, a gem manager, and so on. The point is, they are all run in browser, even without any rich client support (I believe it will be practically used if is implemented in a rich client). You can check these features at http://heroku.com/features.

An important feature is about "work locally". For linux user, all the necessary tools are native. For Windows user, a few additional resource are required. Here's a simple guide for Windows user.

Heroku supports two ways to transfer source code between local and server,

* A simple way is "import/export", "import" means upload a compressed source code package in .tar.gz, it's easy on linux. For Windows user, a convenient approach is to use 7z. For example, your app folder is "myapp", compress it into "myapp.tar" using 7z, then compress "myapp.tar" into "myapp.tar.gz" using 7z. Upload "myapp.tar.7z" to an existed app on heroku, done! "export" means download a .tar.gz package from heroku, uncompress it, work locally.

* The other approach is more practical. using Git and a "heroku" gem for source control.

** Git is yet another source control tool, a substitute for SVN in ror world.

** GitHub is a Git repository, Rails itself and many other ror source are currently hosted there.

** "heroku" gem is a tool which helps to manage source code hosted in github, including source control and publish source code on heroku.

** Git is native in linux, for Windows user, there are two options: Cygwin and msysGit, the former is a comphensive linux simulator on Windows. The latter is an unofficial Git implementation on Windows.

** Download either of them (they are similar if you just need Git), and install. For Cygwin, remember to select git manually.

** msysGit provide a GUI interface for Windows user, Actually, I don't think it is better than its bash shell interface. So, even as a Windows user, you'd better to know a little about bash shell.

** Open msysGit bash shell from start menu, like this:

msysGit Bash
** Register an account at github.com, the "Free" one is ok, remember the email you used (e.g. name@example.com).

** Generate a ssh-key. In the opened msysGit bash shell, input following command:

ssh-keygen -C name@example.com -t rsa

In the following steps, it will ask to provide path and passphrase, use default by pressing enter (or change them if you know what you are doing).

** Get your SSH Public Key. Input following command in shell:

cat .ssh/id_rsa.pub

The SSH Public Key (lines of strange charactors) will display in the shell, copy them (how? just like what you did in a Windows cmd shell), and paste into Github account (go to https://github.com/account, login if necessary, there's a textbox titled with "SSH Public Key"), then click "Update Keys".

** The last thing is to get "heroku" gem: "gem install heroku"

** Everything is prepared, go to see heroku's demo, or follow the next simple steps to start to develop and deploy a ror app on heroku:

- Open msysGit shell, input "heroku list". which lists all your existed rails apps on heroku;

- Input "heroku create myapp", it helps to create skeleton of a ror app named "myapp" (I guess it run "rails myapp" for you on heroku server), you can access http://myapp.heroku.com directly (of course you should make sure "myapp" is not an existed app name on heroku), a ror welcome page is waiting for you.

- input "heroku clone myapp", make a clone of "myapp" for local development. First time, it will ask your email and password which you've used to register in Github. (BTW, in msysGit shell, change directory to the location you want to put your local app. It looks like "cd /d/apps/", which equals to "cd d:/apps" in windows cmd shell. Interesting to both linux or windows user:) )

- if everything ok, you could edit your rails app with your favorite editor or IDE. (I tried Netbeans and e-texteditor, both ok.)

- Make some changes to your local app, (for example, generate a scoffold, or modify routes mapping in config/routes.rb, these will take effect after you push them to heroku), run server and test it locally. If everything ok, check in (and publish) your local source code to heroku (Github) by following commands:

- 'git add .', adds the current content of new or modified files to the index, note you should in your rails app folder;

- 'git commit -m "comments about this checkin" ' , stores the current contents of the index in a new commit along with a log message from the user describing the changes;

- 'git push', updates remote refs using local refs, while sending objects necessary to complete the given refs;

- ok, now try to access your rails app on heroku by accessing http://myapp.heroku.com,all the local changes work. 'git push' does some great things: check in source code, publish updated source code on heroku, rake db:migrate (if there's migration), restart rails server (let the changes to routes.rb takes effect), maybe include other necessary work. Great!

- Git is similar to SVN,except above options, you can do checkout, diff, merge, mv, rm and so on. Check helps as you need.

- In fact, all the above command can be used in Windows cmd shell if you setup msysGit as need. And all these commands can be used in Cygwin either.

As a ruby on rails fan, you really should take a tour through heroku, there are so many interesting features except "work locally". After deployment environment getting done as above, you are ready to publish your toy project to the world.

2008年7月13日星期日

How many things to learn?

I was/am a MS tech fan due to my job and intrerest. For a long time, I was eager to learn everything about .net. For examples:

* There are more than 200 tech books on my bookshelf, Wrox, O’Reilly and others. My wife named Wrox area as “red-light district”, and O’Reilly area as “Zoo”;

* I collected webcasts and ebooks as possible as I can find. and burn them into DVD;

* There are hundreds of feeds in my rss reader, I subscribed all the popular blogs about .net, from MSDN to Scottgu, from Codeplex to Rob Conery;

* I browse Codeplex “tag by tag”, download all the pop projects;

Unfortunately, my interest was not just about this. I was interesting in OO/P/AD, design pattern, TDD, refectoring, UML/RUP, project management, agile project, enterprise framework, networking, web design, database,java, c++, python, javascript, even ERP for a while. Recently, the terrible interest spreads to ruby, ruby on rails, then linux server when I decide to deploy my toy project, then virtualization when I decide to setup my own vps of linux…

Sounds great, right? The truth is…

* half of books on my bookshelf were not touched,

* webcasts were reviewed when they were just downloaded, but never be opened after burned,

* there are always 5000+ unread feeds in my rss reader, sometime I will mark them as “read”, but the number came back soon;

* reading source code is good, but the projects which were really carefully researched are not much.

As everyone can guess, I may be an expert on “how many things do you know?”, but not an expert of each of the listed parts, although my interest has taken most of my free time :( . Sound despressed.

Write this because I read a blog “Do you have the time to learn everything“. I agree with some of its points. It’s definitely impossible to learn everything, people should has a limited learning list with prioritization, people should learn to make choice first. I know this from beginning, but when I start to be interesting in something, I feel this is the most important. what a fool!

Life is limited, knowledge is not. But if learning is as fun as playing game or watching TV, just do it.

That’s the words to comfort myself.

2008年7月10日星期四

wubi...

As a layman in linux world, it’s glad to know there is such a greate tool for linux installation from Windows, i mean Wubi.

Wubi is not the Chinese input method.

Wubi is an officially supported Ubuntu installer for Windows users that can bring you to the Linux world with a single click. Wubi allows you to install and uninstall Ubuntu as any other Windows application, in a simple and safe way. Are you curious about Linux and Ubuntu? Trying them out has never been easier!

I tried to use PC without Windows for a few weeks at home. Frankly, it’s not a good experience for me. Ubuntu is actually better to use than other linux distribution. But in my experience, “better to use” means it is similar to Windows than others. if it’s true, why not use Windows (we have paid for OEM).

Linux should do more to contest PC desktop. When I use linux at home, I am not a software developer, and not a linux fan, I am just a computer user who likes to try different things. In most time, I read, watch, listen, write. I don’t care if it can run on different hardware platforms, I don’t like install software from source(even by apt/rpm/yum), I don’t like that I have to learn much and try more to make a BT client work, I don’t like to take half an hour to search, download, make, install and reboot to just watch an “amazing” desktop 3D effect, and so on… At last, I believe most of people in most of time could agree with me. Of course, I like linux as a server, free and powerful, but not on my desktop at home.

Linux need to be modest. do something like wubi (it’s said fedora 10 will add a similar feature), attract more people to like to try. For linux desktop, there is a huge space to improve.

说...


急事,慢慢的說;

大事,清楚的說;

小事,幽默的說;

沒把握的事,謹慎的說;

沒發生的事,不要胡說;

做不到的事,別亂說;

傷害人的事,不能說;

討厭的事,對事不對人的說;

開心的事,看埸合說;

傷心的事,不要見人就說;

別人的事,小心的說;

自己的事,聽聽自己的心怎麼說;

現在的事,做了再說;未來的事,未來再說

2008年6月26日星期四

和谐不需要理由?

google被封的时候,就像是地震,受灾的是所有人,起码个体心理上是平衡的,而且当时确信这种引起公愤的事情不会持续很久,我们都忍了,虽然最后等来的是被“阉割一新”的google。

tumblr 被封的时候,就像被抄家,本是一个方便快捷的miniblog,虽然没有熟人用,自己却很喜欢,把鸡毛蒜皮的小东西方便地放在里面,自娱自乐,别有情趣。被和谐之后,仿佛自家大门上被贴上了封条,心疼和别扭只有自己知道,在强大的gfw面前,进自己家就象是做贼,要翻墙,要带tor,以便捷为特色的 tumblr,失去便捷性,也就失去了使用的价值。

flickr被封的时候,就像隔岸观火,虽然很多人在用,毕竟自己很少用,别人抱怨就抱怨吧,牢骚就牢骚吧,谁让你们崇洋媚外,我天朝不是有yupoo么,虽然是个不折不扣的模仿者。

wikipedia, blogger, wordpress等被封的时候,就像是焚书坑儒,嬴政李斯当年在做这些的时候,有明显的政治目的:因为刚刚建立的秦帝国需要为其中央集权实现意识形态上的统一,烧了若干儒家典籍,埋了四百几十个方士儒生,目标明确,方法简单粗暴,就如同如今gfw之所作所为。倒是后来董仲舒汉武帝的罢黜百家独尊儒术,同样是出于中央集权的目的,方式方法上温和得多,也有效得多,因为“独尊儒术”是将儒学作为官学,从而吸引有才华的人学习、参与和推广,“罢黜百家”却不是将其他学派和观点一笔抹杀,只是官方不鼓励不支持,民间却还是可以自由保留和发展。以史为鉴,焚书坑儒的做法非但让人及其反感,而且效果极差。汉武帝的方法是否值得借鉴?wikipedia和blogger里面是什么?都是知识和信息啊!都是全人类的文化和智慧啊!难道就因为里面包含了在“某些人”看来 “可能会”对国民产生负面影响和误导的极少数内容,就一刀切的干掉?这都是什么逻辑啊?!

如今,“和谐”的魔爪伸向了专业网站,sourceforge, freebsd都未能幸免于难,原因???我百思不得其解......难道和谐已经不需要理由了?月光博客上一文另一文猜测了两种可能性:

其一:非常巧合的是,三天前我曾经介绍“五个最佳的编程文本编辑器”的时候,其中的一个开源项目Notepad++就是SourceForge的一个项目,该软件的台湾作者引起很大争议,因为他在该开源项目的首页声称要抵制某某运动会。

其二:SourceForge虽然也是英文界面的专业网站,但这个庞大的开放源代码软件仓库也长期被中国电信封锁,封锁的原因据说是里面有一个名为FreeNet的代理服务器的源代码软件项目

哪种解释都没法让我信服,我不相信gfw会有如此低智商的主人,也不相信相关部门的决策者有精神病。原因有二:
第一,如果某人在家里宣布抵制运动会,我们就要让他家所在的小区甚至所在的城市人间蒸发(其实并没有消失,只是让自己人看不到而已)?这种做法好听一点的叫掩耳盗铃,不好听的就是若干与侮辱人智商相关的文明用语了。
第二,知道sourceforge是什么,并且能够去下载一个开源软件的人会因为区区一道墙就被阻止了?我们的祖先建立过如此伟大的墙,汉族文明却被墙外的铁骑一而再再而三的翻墙而过,踏在脚底。我们的祖先早已明白,墙的象征意义远远大于其最初被建立时所被期望的实用价值。不想翻墙的和不会翻墙的,你只要告诉他那里有道墙,他就不会心存妄想;有心想翻墙的,铜墙铁壁也是形同虚设。

这都是很浅显的道理,我能想到,墙的主人必定也能想到,所以我认为不会是因为上述二文中所提到的原因,但事实是sourceforge被封掉了(为了证实,我刚刚趴在墙头向那边瞄了一眼, sourceforge.net/org/com,硬硬的都还在),所以一定是有什么原因的,我宁愿相信这是一次操作失误,或者有其他什么不为人知的深层原因。同时,我保留对封杀者及其列祖列宗使用大量文明用语的权利。

我觉得sourceforge的被封(姑且不论是什么原因),就像是当年的大明朝大清朝的闭关锁国,禁止民间对外交流,禁止对外通商,禁止学外语,否则咔嚓咔嚓...那个时候这么做是有道理的,彼时天朝自认乃泱泱大国,礼仪之邦,地大物博,不屑也不必与蛮夷之邦交流通商,更不愿外来的思想文化误导国民,影响教化。问题是,那个时候的天朝有这样的自信心和自豪感,现在呢? sourceforge是世界上最大的开源软件社区,是全球软件行业从业人员的智慧结晶,是软件技术学习与应用的宝库...就这样被毫无道理的拒之门外,我们有我们祖先的那种自信吗?我们的软件产业很牛吗?我们不屑于学习国外同行的技术与经验吗?我们不必参与到全球的软件发展进程中吗?一个专业的技术网站有什么能够颠覆国家政权影响社会和谐的阴谋吗?真正对sourceforge有需要的人会被挡在墙外吗?和谐不需要理由吗?

不知道政府的上访办能否接受要求互联网解禁的请求,如果可以,我的上访请求提纲如下:
1. 我是中华人民共和国公民,热爱祖国,拥护党和政府,
2. 我接受过初中以上教育,具有基本的分辨是非的能力,
3. 我是一个互联网使用者,工作和生活都与互联网相关,
4. 我坚决抵制并打心眼里讨厌xx功,x独以及其他一切破坏社会和谐安定团结的组织及其言论,即使不劳gfw,我自己也坚决把这些东西都封上,我请求gfw请注意力都放在上面,还国人一个清静和谐的互联网;
5. 我赞成非礼勿视,非礼勿听,非礼勿动的原则,对来自互联网的不健康内容做到视而不见,见而不信,同时我会尽力把这一点灌输给我的子女亲朋,肯定比gfw会尽心,所以不劳gfw,其实gfw也封不住;
6. 我强烈抗议gfw简单粗暴的工作方式,其基本工作原理是:墙上有个污点,就把屋子拆了,饭里有只苍蝇,就把食堂砸了。gfw本身是一面墙,我们理解创建它的初衷,我们也都不反对用它来屏蔽掉特定的信息,它的存在没有问题,有问题是墙的管理者,这种一刀切的工作作风是不负责任的表现,是缺乏能力的表现。
7. 建议政府的互联网管理工作也要透明化,就像越来越多的其他职能部门所做的那样。必需能经得起公众的质疑,比如:你有没有管理原则?你的原则是什么? sourceforge或wikipedia这样的网站被封掉是基于什么样的原则?这样的原则合理吗?合理不合理是由谁来决定的?如果wikipedia 里存在某些你认为不当的内容,在不屏蔽掉整个网站的前提下,你能否屏蔽掉不当内容?为什么不能?是理论上不能还是你不能?是你嫌麻烦还是你能力不够?你知道wikipedia是可以自由修改的不?你能否把一刀切省下来的时间用来组织人力物力去创建和修改wiki条目,在全世界的互联网用户面前以正视听?做这样的事情,是x功 x独x会的力量大还是我们天朝力量大?还是你不屑于去做这样的事情?难怪da‘lai在海外一呼百应,是因为我们总是害怕自己的人民看到外面的“反动言论”,所以把自家的窗户封上,小人在外面说我们坏话我们连听都听不见,更不用说出去辩白,结果外人听了小人的话,都觉得我们是坏人,等到我们想跟人家去解释的时候,人家早已先入为主了。
8. 一个有气度有自信的民族是不会整天把心思放在如何阻塞国民的视野和言路上的,人民有分辨是非的能力,人民有发表看法的权利,人民有获取信息的自由,不要自以为是的小看了人民的能力、自制力和爱国精神,不要一到开大会之前(政府的,党的,甚至眼前这个运动会)就开始大规模的突击式建设和谐社会,这是为了完成领导提出的建设和谐互联网的要求吧?!“凡是境外的,脱离控制的,用户可以自由创作内容的东西通通封掉!”,难道领导就是这么要求的吗?

“和谐社会”不是现在提出来应景的,创建和谐社会是中国人自古以来的共同理想,当”和谐“一词被动词化的时候,就应该引起注意,以"和谐"为名义的事情并不一定都是合理的,当某些事情需要被“和谐化”的时候,请考虑清楚“和谐”的目的是什么,“和谐”的原则是什么,必需被“和谐”的理由是什么,三思而后行,请不要给这么美好的一个词汇抹黑。

2008年6月15日星期日

ibeyond的小有名气

ibeyond是为数极少的我能跟真人对应上的网名,在线时间长了,到处注册,到处填写id,用同样的id成了很多人的惯例,我也一样。之说以说起ibeyond,是因为最近在浏览rss订阅的时候,不止一次看到这个熟悉的名字(比如keso的推荐,以及http://item.feedsky.com/~feedsky/applife/~7005526/77039891/5113514/1/item.html,以及作者声明后面的comments等),原因都是因为其在google app engine上写了个访问blogger的代理程序,ibeyond声明在此,让ibeyond这个人名变得小有名气的程序在此,用来访问blogger,确实是个不错的想法,使用起来也很方便。
google app engine我也试了,用了,觉得不错,一个别样的web host,能方便的访问google资源,目前只支持python以及一个精简的web框架,感觉yet another rails implementation,更贴近Django(主要支持的一种template就是Django的view template),没什么太大兴趣。不过ibeyond的小有名气让我对之前的体会更深刻:好的想法总是比工具更重要。
主观臆断一下,实现应该不会太难,google app engine提供了访问google资源的api,当然应该包括对blogger访问的api,建一个appspot(比如gfw.appspot.com),把传入的id与blogspot.com组合成url,访问之,返回之,一个blogger.com的代理就诞生了,妙处在于以google的服务器为代理,除非google app engine被封掉了。不过这很有可能,google被阉割的太多了,典型的如之前的page creator。总结一点,凡是境外的,zf没法直接控制的,并由用户自由创建内容的东西,都可能是被和谐的对象,之前的Tumblr用得好好的,NND,被封掉了,眼下的google sites,功能很好,技术很棒,但从gfw及其主人的视角来看,与page creator大同小异,早晚是被和谐的货,google app engine呢?就看ibeyond这个巧妙的想法的实现吧,即使整个google app engine被和谐,也是“情理之中”的事。所以如果哪天google app engine消失于国内用户的的浏览器,ibeyond的gfw proxy也是“功不可没”,:D。

2008年6月11日星期三

ubuntu可用

我看压根就不能指望linux来代替绝大多数pc上的windows,不论做得多好,压根就不是为普通老百姓做的,除非做成mac os,不过以免费、开源为基础的linux是不可能做成mac的,做成了mac也就不可能免费开源了。
ubuntu 8.04比之前的7.xx版本改进了很多,已经很不错了,打算尝试一下没有windows的电脑生活,看看能用多久。
仅以此帖作为ubuntu上的一项测试。

2008年5月21日星期三

脑袋凹陷续

凹陷还在,不过不太痛了,去了医院,医生很不负责的告诉我说没事,我当然希望没事,不管医生都没仔细看就说没事,总规让人不放心。我说我不知道怎么搞的,医生说他也不知道,NND我要知道还来问他?!他说不放心就排个片子,于是花了两百多块照了个CT。

看病前后不到五分钟,等了一上午,拍片前后不到两分钟,等了一下午,好在我这无大碍,那些真正有病需要治疗的人,也许需要付出的不仅是耐心,甚至有可能是及时治疗的时机。不知改怨谁?难道去埋怨地下的毛主席?

片子显示一切正常,找医生看了也没看出什么问题,就当一切正常吧。不过也许是心理作用,这些天脑袋一直晕晕沉沉,摸着头顶的大坑,心理怪怪的。怕影响大脑正常工作,做了个IQ test,还行,得了个135,聊以自慰。

IQtest挺有意思。http://www.et-express.com/psychology/iqtest2/IQ1b.htm