InfoQ“构建的可伸缩性”文摘

InfoQ上面的一篇文章《构建的可伸缩性和达到的性能:一个虚拟座谈会》
http://www.infoq.com/cn/articles/scalability-panel
这篇文章很好,给了你很多做可伸缩性的线索,记录下这些点滴。推荐感兴趣的人去InfoQ阅读原文。

  • ab & httperf: 它给我们提供了一些自动化的负载测试,因此对比于我们从firebug中获得页面级的计时,使用这个工具可以获得会话级的计时。
  • firebug:
  • Ganglia是非常优秀的。同时Nagios或Zabbix(举个例子)将告诉你何时资料遭到破坏,使用少量加工你就能够让ganglia给你提供任何东西。
  • 对于MySQL,Innotop + slow query log 帮了大忙
  • GDB和DTrace是用于C++的基础架构。core或 pstack是个颇有价值的工具
  • 我们使用各种工具来重现问题并调试它们(包括栈的问题)——Visual Studio、 Eclipse、WinDbg、cdb、Purify、Fortify、dtrace以及许多定制的东西,为我们的架构所构建的东西
  • 从某点上讲,伸缩性已经从领域问题(即,如果你不使用内存缓存或者一个等价的分布式哈希表和基于内存的缓存)转移了,而你仍然处于“领域”范围
  • 当今静态内容的可伸缩性已不那么重要了,那只是花钱的问题并需要公司有好的社会组织的问题
  • 不要试图在部署之前就捕获性能问题。你不可能重建真实环境中的条件,因此你不可能得到真实可靠的测量结果
  • 监测。非常仔细的监测
  • 墨菲法则(一种幽默的规则,它认为任何可能出错的事终将出错)确保了你没有严密跟踪的衡量标准就是那个对你不利的标准!
  • 除非你知道当时正在执行什么业务功能,否则一个CPU测量是无意义的
  • 你只能通过使用软件实现伸缩性。“语言是不能伸缩的。框架是不能伸缩的。而架构是可以伸缩的。”

我的旅行的意义,去澳大利亚后

我在想,我为什么和老婆去澳大利亚旅游。我们旅行的意义是什么?

记得今年我读了阿兰德波顿的旅行的艺术,里面探讨的就是旅行的意义。我记得书中说旅行是为了验证什么或者逃避什么。那么我们去澳大利亚是验证什么或者逃避什么呢?其实在去之前我并没有问我自己这个问题。

我很怕在熟悉的人面前出丑,但是到了陌生的环境我感觉我就自由了。这种现象在幼儿园的时候就有了,爸爸来接的时候我都特别乖,特别的沉默,但是爸爸走了我就怂恿身边的小伙伴们做坏事,气老师。这些其实我也记不清除了,是爸爸和我说的,老师抱怨过,我记忆中就是身边的男孩女孩都特别听我的,而且我记得做得最好的就是我能够让他们在做了坏事以后不说是我让做的,所以我一直以为我是非常安全的。不过,实际上是怎样我也不知道,我所认为和我所记得的都是在那个年龄的心智范围以内的。

去了澳大利亚这么远的国家我就不怕出丑了,我就又可以自信的做自己想做的了。自信,不怕出错,感觉很自由,就像回到了童年。回到童年是非常快乐的事情,因为童年在我的记忆里是个太快乐的年龄段了。那个时候搜索所有的记忆也只有两件害怕的事情,一个是“从山上掉下来”一个是“杀人”,其实都是梦境。梦境里面梦到过很多次和爸爸一起爬山,爸爸总是爬在我的前面,而我跟在后面,我们爬的是笔直的峭壁,我非常害怕,但是最后还是掉下去了,身上会感受到失重的感觉,非常可怕,因为我是个恐高的人,我能做的就是呼叫我爸爸,呼叫,大声的呼叫,最后我醒了,自觉的下地去撒尿。嗯,这个恐高症的梦原来就是意味着我要撒尿了。另外一个是在上了小学的时候会做的梦,我会杀掉Turtle同学(是我的发小,最好的朋友(之一)),一般就是用铅笔戳死或者用手攥死。这种梦很离奇,因为杀人以后Turtle同学就神奇的消失了,而且我每次都没有看到我杀掉他的细节,只是强烈的知道我杀了他,然后就是好害怕,开始想念我的好朋友,开始害怕蹲监狱,害怕见不到爸爸妈妈,最后几乎都是哭醒的,不过哭醒以后我发现我没有哭,甚至眼睛里面没有湿润,爸爸妈妈也没有听到我哭。这个梦大概是说那个时候我在意的这些人吧,我怕失去最好的朋友,怕失去爸爸妈妈。那么这两个噩梦就是所有了,其余的记忆都是那么的鲜艳。

澳大利亚就是这么一个鲜艳的国度,鲜艳的要命,就像有生命要从那鲜艳的颜色里边爆发出来,都咄咄逼人的让你目眩。它让我想起了我的童年,我可以和我的老婆撒娇。我终于可以拉着一个漂亮的小姑娘的手一起在大街上面看到所有的东西都兴奋的大呼小叫了。小的时候我不好意思和女孩子说话,实际上在幼儿园的时候我还是和小女孩说话的。但是上了小学以后我发现女孩不能欺负,因为会被老师和父母加倍责备。还有就是我对女孩的身体感觉很神秘,很像偷偷看看,但是又不敢偷偷看,所以干脆不如不看、不听、不想,那么当然也就不说了,所以那个时候开始不怎么和女孩子说话了。但是内心里面我也想和一个打扮的漂亮的有大眼睛长头发的小姑娘一起拉拉手的,直到二十多年以后我的这个梦想才实现。这次去澳大利亚似乎就是让我牵着我漂亮的小姑娘走到了童年,我得到了我一直想要却从来没有得到的东西。我的老婆就是最爱的女人,但是她也是一个童年的伙伴,我在童年直到青年都不认识她,但是现在拉着她的时候她看起来还是一个小女孩,非常可爱,有小圆鼻子,大眼睛,漂亮的细眉毛,薄而细的嘴唇,脸上有几个小小的祛斑,耳朵又小又圆很俏皮,所以她就是我小小的女神。我曾经梦到过很多次,小的时候,我在胡同里面玩的时候,她也在某条胡同里面玩着,我在一刹那,想到了她,她也感知到了我。拉着我亲爱的女神,走在童话的街道上面,我感觉好幸福,就好像我喜欢的摄影画册,浪漫的街头,带有颗粒感的画面,我们傻傻的微笑。为什么会想到摄影画册,是因为悉尼的阳光是那样的赤裸的闪耀,穿过各种神奇的大树小树投射在我们的身上和脚下,光影就这样交错在一起,和我们的身体和空气交织。我喜欢有光影的空气,这种空气可以滋润你的心情,让心情被热带的潮湿空气软化。悉尼的空气我很怀念,那是一种湿润和凉爽的空气,水滴像是水晶的雾摩擦着你的皮肤,闪烁的广从水晶里面渗透到身体里面,身体的内部都被水和光射透了,感觉就像在天堂一样。光非常强烈,感觉心情非常神圣。童年、女孩、颜色、光影、神圣,实际上这是我从宫崎骏的动画里面读到的一些关键字。正巧上周和爱人看了《悬崖上的金鱼公主》,我很强烈的知道,即使是在童年,我也知道我要的是什么样的世界,什么样的女孩,什么样的生活。似乎这个电影就是记录的我们在澳大利亚作为一对结了婚的恋人的感受,那种童年的幸福感的回归。

童年不怕什么,我回到了童年,所以我活得了2周的自由,这种自由是一个多彩的调色板,我们可以肆无忌惮的使用颜色。在那里很自由,即使没有那么多的钱住很好的旅馆,没有那么多的钱去吃正餐,没有那么多钱享受遍历出租车,可是我们可以享受愿意往哪个方向走就向哪个方向走的自由。我们可以放纵的用中文说一些肉麻的话,却不用担心有人会在意,我们就像风一样在城市里面穿梭,我们还可以相信我们是透明的。我们不会给城市留下什么印记,我们只求城市给我们留下一个快乐的印记。这种感觉非常的自由。

这是我旅行的最大意义。

这次还圆了另外一个梦,我看到了动物世界里面最多彩的珊瑚礁。我是一个看颜色上瘾的人,在动物世界里面给我最大震撼的就是大堡礁,那里有最神奇的颜色。记得小的时候我学过很多年的绘画,其中最自豪的就是在最初的配色课程上面老师总是夸奖我,那个时候就是在一个鱼的轮廓上面填充颜色,鱼身上的鳞是相同的几何图形,你可以发挥的想像让它变得五颜六色。那个时候的我很自由,所以我会按照我的心的方向去填充,所以我就有了漂亮的的图画。但是在后来那些灰色的学习会话的岁月里面我却只记得我错过了变形金刚,我错过了太多太多的周六晚上才有的动画片,就是因为我要去学习画画。所以在后来我在绘画方面没有任何发展,现在不过就是比从来不画画的人能画出圆润一些的线条,其它的所有技能都退化了。大堡礁就在我的面前的时候我又捡起了对颜色的那种自由的饥渴,我感觉我又可以自由的享受颜色带来的兴奋了。生物选择使用绚烂的色彩绽放自己的生命!所以颜色就是生命的象征,我喜欢颜色,实际上是因为我喜欢我们的生命!我在水中不停的呼唤我的亲爱的老婆,喊出不知道名字的鱼的名字,拿起活着的蓝色海星给她摸,我非常喜欢给我身边的朋友讲生物知识。虽然现在我的生物知识已经不如小学生了,但是我依然可以享受讲解那些不清楚的记忆里面的知识的快感,分享知识在任何时候都可以给你快乐。亲爱的老婆也非常兴奋的听我胡乱编造出的各种介绍,并且认真的问问题。浸泡在颜色中,享受分享快乐的幸福,这是大堡礁给我的。

在丹特里特的雨林里面,我们还划了独木舟,和亲爱的人一起冒险。水是透彻的,因为透彻,所以我就不会恐惧。一直认为密西西比河是可怕的淡水河,因为淡水里面总有奇怪的张牙舞爪的水中生物。但是在丹特里特的清澈小溪中,没有未知,所有的东西都浸泡在透明的水下,所以我不用鼓起勇气就可以用双脚去接触小溪的鹅卵石,却一点都不担心有奇怪的水中生物。我们可以看到好笑的王八和小鱼在水里游泳。

我的感情就随着这样的旅行得到了释放,得到了慰籍。我想这就是旅行的意义吧。

Tin和zz的澳大利亚游记之Woomoolloomoo Bay

Tin和zz的澳大利亚游记之Woomoolloomoo Bay

9月,tin和zz两个人独自飞到了南半球袋鼠之国澳大利亚,开始了12天的疯狂自由之旅。一本Lonely planet,一台尼康 D50,一台松下LX2,四只脚,两个箱子,成就了我们9784张照片和满心的欢喜。

从悉尼的Woomoolloomoo Bay开始吧。

P1080336-当我看到这个景色的那一刻,我就爱上了这里。

_DSC1827-悉尼的温度有些凉,夹杂着雨气,有点冷, 冷风吹走了我们刚飞机后的倦意。就这样,我们开始了一天的徒步之旅。从山上的小道顺路而下,就是令人意想不到的WoomoolooBay

P1080322-这里有三大主题:The Wharf 船坞,军舰 和 牛肉馅饼

_DSC1842-著名的牛肉馅饼店

P1080318-从山上向下拍摄,远方是市中心

P1080324-P1080324

_DSC1853-_DSC1853

_DSC1863-船坞的正面。The Blue 非常奢华的五星级酒店,名字就如船坞的颜色一样。

_DSC1867-船坞的另一侧是个小港口,港口一侧停泊着高级游艇,另一侧是高级餐馆

_DSC1878-_DSC1878

_DSC1874-_DSC1874

_DSC1876-清晨餐馆不营业的,晚上一定很热闹

_DSC1902-连排游艇

_DSC1869-从港口向市中心望去,景色壮观。

_DSC1881-其实,这个船坞于911-1915建造, 门口的介绍说,这个码头是世界上最大的全木制建筑,我肯定,他们肯定没有算上中国的故宫

_DSC1882-_DSC1882

_DSC1884-_DSC1884

_DSC1885-船坞内部一小部分经过修缮,作为纪念馆开放,另一部份就是奢华的酒店啦

_DSC1901-_DSC1901

_DSC1892-这里记录着,这里是悉尼一切开始的地方,到达和离开的起点。而这里也偶然的成为我们悉尼之旅的起点。

_DSC1893-_DSC1893

_DSC1894-起点

_DSC1924-据说著名演员Russell Crowe 就住在这里一个价值一千四百万的顶层阁楼里

_DSC1951-LonelyPlanet 推进的牛肉馅饼。澳洲特色。

_DSC1935-_DSC1935

_DSC1942-超大热狗,15cm长,料足,可口。腸下面还有青豆酱和酱牛肉块,非常不错。

_DSC1945-著名的牛肉馅饼,就是空心面包填充酱牛肉,外面糊上青豆糊。(超级难吃)

_DSC1946-牛肉馅饼内部展示

_DSC1917-Woomoolloo一侧的小山

DSC_3654-从小山上望向Woomoolloo

以上内容由zz于2008年10月11日创建于
href=”http://beta.haokanbu.com/”>好看簿
。 点击此处访问原始链接,或此用户的
href=”http://beta.haokanbu.com/user/2828/story/”>更多内容

好看簿:用照片记录和分享生活的图片博客”

关于javascript库的一个回复

我以前写过一篇说说我对moo、prototype、JQuery的看法在我的blogjava博客里面(现在我已经不更新了,完全使用这个wordpress的博客)。今天也是在Google Reader里面看到JavaEye的另外一个朋友lifesinger的一篇文章:大胆预测下几个JS框架的走势,我个人不是非常同意,所以写了如下回复,也发在我的blog吧。

完全不同意lifesinger的说法:

1、JQuery会走的比较远。因为Django会走的比较远。而且JQuery的内部设计很好,如果说它不好估计是没有理解它的核心理念。而且John Resig的确是个勤奋的福音传播者,它的js使用理念很好,所以这个库会随着它的plugins库的数量质量的双重提高,占重要位置。同时浏览器效率的的提高也会给它注上强心剂。

2、YUI的api设计不好。作为oo的库它不好,作为fp的库它更不好,所以它不会有多好。不过在widget类库里面它肯定继续占重要地位,因为YUI的widget的确兼容性很好。

3、moo我很喜欢,但是它的演化保持了小众的特点,小步前进,api设计上比较偏设计师的想法。做大型项目的时候你回发现moo没有对如何组织你的项目给很好的“风格”上的建议,所以它也就会在大型项目上哑火。

4、Ext,我看没什么大的希望了。因为它的授权问题,基本上它已经不在是开源社区友好的(它也许可以做自由软件社区友好吧)。而且作为一个UI Widget库,它并没有把可访问性放在重要的地方来重视,所以随着UI的可访问性要求的上升,它的默认皮肤带来的eyecandy估计就没法盖过usability的缺失了。

你没有提到Prototype,它目前还是js lib的第一名,随着活跃的RoR社区的继续推进,它应该还会持续足够的市场份额。而且它和JQuery同属于有强烈“风格”的库,所以即使项目很大,它还可以保证代码的可读性与可维护性,这对于很多项目来说是至关重要的。

关于dojo我不说了,以前说过:说说我对moo、prototype、JQuery的看法的回复里面有。

良心能够保护你自己!

沉默了很久,但是这句话要喊出来!良心能够保护你自己,问问自己的良心吧。

老婆写了一篇文章很不错的日记发生在我身上的小故事来谈谈信用问题,里面记录了上个周末我们逛灯具市场的时候遇到的一些“信用”问题,我们总是需要费神的侃价,才能稍微看清我们买的到底是个什么档次的灯。之所以感叹这个司空见惯的事情,是因为我们去澳大利亚旅游的时候看到了很多的诚信,而诚信在商业上体现在定价的自信上。我们看到的澳大利亚商人,尤其是小商品市场的商人,他们对自己的定价充满了自信。我们经常可以看到如冰箱贴这样的小商品,在他们的摊位上可能明确的写着一个3元,两个5元,3个7元。我们习惯侃价,所以问老板是否可以优惠,老板会指指板子上写的价格。那么我们会追问,那4个呢,老板会拿出计算器,3+7=10元,完全按照他写的规则来。这种死板的定价方式体现的是老板对定价的一份自信。回忆起来那里的大部分人都有这种自信。

而继续回忆,在澳大利亚我们不仅看到“自信”,更多的还是信任。比如,我们去住他们的度假村,我们说我们要出海去玩,老板就拿出两条大浴巾给我们,说出海这个用的上,当然他们信任我们会在离开的时候还给他们。街边的饮水机旁边还有抽拉纸巾,遛狗人多的地方有免费的宠物便便袋子,国家植物园是开放的,公园里面的芒果树上掉下的芒果大家也可以自助,社区里面也有公用的烧烤架,众多的方便实际上都是基于信任,大家都回按需消费这些东西,支付的是“信用”,积累的也是“信用”。

我们宏观的问问自己,“诚信”和”信任“哪里来?我觉得从良心里面来。用良心这个词是因为它非常朴素,我们也可以说它是”道德标准“。我相信朴素的感情里,人都回体现出良心。

上周和ThoughtWorks的胡凯,是我在Cruise的队友,热爱背包客文化。他和我说起曾经背包在云南步行过3个月,经常是走饿了就去田边的老乡那里讨口饭吃,老乡经常就分享出自己的”馍馍“来,并且绝对是不要胡凯的钱的。遇到好客的,胡凯还被邀请去人家一起吃过午饭,临走还拿到了老乡现采的很多脐橙,然后又拿脐橙作为报酬搭了顺风拖拉机。听起来感觉很美好,背包客非常崇尚”缘分“。我认为,”缘分“在这里其实就是朴素的良心的体现。我记得动物世界说大象是不愿意看到同类的尸骨的,他们会远远的忘着其它大象的尸骨,并且哀鸣,即使完全不认识这些尸骨的主人,并且他们走近尸骨的时候都回被“吓跑”。我觉得大象的本能是一种设身处地的朴素感觉,他们怕自己死掉,所以会对死者表示哀思。那么对于人类,这也可以更加高级的表现为看到别人有难愿意帮助,看到别人高兴自己也会高兴。

看来完全不相关的事情,其实都是良心。有良心,你可以看到朴素美好的感情,没有良心,你可以看到互相的不信任,欺诈,甚至是幸灾乐祸,还有很多到了恶毒程度的感情。

现在,还没有解释为什么一定要写这篇blog。因为有毒奶粉的问题。因为我怕我也成为沉默的大多数。

在我们公司,因为零食和饮料是免费供应的,所以冰箱里面的东西往往是提前储备好的。这次的毒奶粉事件我刚听到的时候没有在意,因为我国的食品安全问题是常事了,常见也就容易麻木。前天收到我们公司的一位新妈妈给公司集体发的一封信,提醒大家不要让声音就这样越来越小,提醒我们要注意身边的各种奶制品的安全。同事她也说到我们公司冰箱里面的蒙牛奶已经全部更新为三元的了,而提醒我们公司更换奶的人是我们一位国外的PM。听到此事有点感慨,我们公司的外国同事在公共问题上都有很强的责任感。以前有人上班用音箱放音乐,我的同事bobby就发信解释因为每个人的品味问题,所以可能每个人对所放的音乐的反应不同,所以提醒大家最好用耳机。后来有人用P2P软件看电影,网管出来说希望大家不要用了,bobby也站出来写信跟大家解释为什么。我的意思是说,我们不能沉默(龙应台的文章:中国人,你们为什么不生气?),我们要负起责任。公共责任也是良心的体现。

我的文笔不好,写点文字总是形散神也散。上周周末我们非常成功的又举办了一次Beijing Open Party活动,我这次又当了主持,回家的时候我感觉非常累,身体累,但是精神上非常满足。因为我感觉我为社区贡献了我的力量,这是我的责任,我认为它是我能做也应该做的一件事。我又想起我平常面对我的工作,不管是我在新浪的时候做新浪邮件,还是到了ThoughtWorks工作在Cruise和Mingle项目之间,都有一种良心在驱动我所写的程序,我怕我写的代码会对后来维护代码的人带来麻烦,所以我感觉我没有写出什么不负责任的代码。我怕,但是怕的感觉让我按照了良心做事,没有出轨。

那么如果我们的同胞都能保持孩童时的朴素感情,我想他们一定不会越轨去制造这么多可怕的食品安全灾难,那样我们就可以有足够的自信,有足够的自信为自己的服务定价,我们就可以在离开世界前都无愧于良心了。从我们自己做起,不要再带来新的灾难了。我们不能闭嘴,我们不能保持沉默!我们要告诉自己,也要告诉别人,我们有权生气,有权表达我们的想法。

去澳大利亚旅行

要和老婆去澳大利亚旅行了,这是我们第一次出国旅行。前前后后准备了有3-4个月了。

目的地是悉尼和凯恩斯,主要的亮点是大堡礁,这次可以看到以前在动物世界里面看到的奇妙世界了。

可惜错过了这次Beijing Open Party的活动,下次回来还会继续技术征途。但是在这次旅行中,完全没有技术,只有用心的去感受这个世界了,希望我能够好运!

说说我以为的RIA与Rich client

中午徐X和米高讲了一下Rich client的架构。其中徐X讲的是如何从单机分层系统到Rich client。

实际上最早的单机分层系统的UI部分激发了OO作为界面的编程模型。然后分层模型为了C/S结构发生了一些变化,目的是共享数据和通信,但是由于OO在远程调用上面的失败应用(Corba,EJB,Dcom),所以让人对OO产生了怀疑(实际上只是用错了地方)。而后又发生了B/S的变化,是一种完全的中心共享方式,原因是HTTP的无状态性造成客户端很难保存state,所以就有了完全中心共享状态的架构。而后通过通讯的增强(Ajax),客户端的状态保持逻辑通过异步通信来增强,所以产生了更好的用户体验。但是对状态同步的进一步要求和对会话状态保持的进一步要求让Ajaxian了的应用还是有点难以承受,所以Rich client又回归了。当然回归的时候同时带来的还有新的编程模型,如基于标记的声明式编程模型,还有更方便View-Model同步(通知)的数据binding机制,布局管理器,绘图支持能力,多线程能力,内嵌的视频编解码能力。其实WPF作为Windows上的新型UI编程模型他的确从Mozzila的XUL还有Adobe的mxml吸取了一些经验。上面这些是徐X阐述的主要内容,很精彩(最后的编程模型是我加的注释)。

而后米高做了一些技术层面的对比,主要是对比了Web和rich client的区别,不过我比较失望^___^,因为对比有失偏颇,原因是米高只用了5分钟准备ppt。

最后是我的意见。我现在已经不想割裂的分开Rich client和Web上的RIA,实际上目前他们已经有走向统一模型的趋势。

去年在InfoQ写文章的时候我就表达过这个意见。今天徐X也强调了,经典的MVC实际上很重要的是解决了数据共享(同步通知问题)与状态(会话)保持的问题,所有的架构问题其实都围绕了这个问题。首先RIA里面已经开始了layout数据分离的加强过程,比较明显的就是声名式的组件组合配置,还有数据绑定模型,这个在Flash和Silverlight还有JavaFx都有着重的解决,而且方向都很类似。其中Silverlight其实是一个减缩版的WPF。然后我们从架构方面来思考,解决状态共享和传递是通过增强的双向通信能力来完成的,很多RIA框架在开始提供web socket模型,这样让通讯超过无状态的且单向的HTTP,包括HTML5(目的是扩展Web上常用的一些Object,增强Web的编程能力,且让很多元素得到正确的语义,这个与XHTML2的关注点不同)的草案里面也有Web socket(类似socket的编程对象,可以实现二进制协议的面向连接的通讯)的提案。当然些努力就是让实现消息传递的开销更小,时效性更高,配合线程概念的支持,就可以实现复杂的基于消息的异步界面逻辑(这会极大的扩展RIA应用的能力)。因为通讯其实是解决状态共享的一个方向,通过高效的消息通知达到多个消费端的状态共享。另外一种解决Browser端状态同步(这里主要指客户端与服务器的数据库同步)的方法就是离线存储能力,这样削弱客户端对服务器的依赖。这种解决方案的代表就是各种Gears,Google gears,dojo offline等等,他们在浏览器里面嵌入sql lite一类的数据库,让客户端有自己的结构化存储能力,对于没有多客户端数据同步要求的应用来说离线方式可以让客户端形成完整的编程模型,通过sync机制在连线的时候进行数据同步是一种非常帮的RIA发展方向,从这个角度它已经是Rich client了。

那么可以扩展一下。我们知道Lotus Notes有服务器端replication的模式,离线会存在本地,连线的时候再同步。而对于另一些应用,极端地如Skype,他对实时的同步要求很高(当然它属于通讯类应用,也就是3C中的Communicate,而不是Content system),Skype的解决方案就是p2p。如果RIA有了socket(当然还有跨域支持),有了多线程,那么p2p是不是也不算难事了呢?状态同步通过p2p来实现,虽然不是可靠的通讯方式,但是却符合Internet的最大努力原则,所以我觉得这两种技术的结合的确很容易让RIA和Rich client不在有明显的界限,未来的目的就是融合。所以,要注意的是为什么微软拼了命在推Silverlight,而且拼了命的公布了Mac和Linux版本的Silverlight,其重要原因就是让WPF的模型渗透到RIA,用Rich client围攻RIA,来解决Adobe用超级NB的Air这个RIA衍生来围攻Rich client的困难。

这样,我们知道2年前开始声音渐强的Offline storage和越来越强的绘图,data binding的意图了吧,融合已经开始了,目标当然就是吃下这个大平台,然后成为最大的赢家!

关于Javascript的入门图书

犀牛书绝对的过时,也绝对的不友好。在开始的时候,作为一本系统讲解javascript的书,它非常注重阐述规范,所以在那个时代它是最好的图书。但是现在,作为js技术的入门图书,我们有一些更好的从javascript的精髓和基本理念入手的图书,读完他们你就可以体会到规范为什么是这个样子,从记忆角度来说理解后的记忆要强过死记硬背,所以用这些图书入门是更好的选择。

Update: 有位Sina的同事说道犀牛书还是要有一本的,目的是作为参考书。我倒是觉得这个完全可以依靠网络,因为大部分时候我们就是想索引一下方法,或者看看方法签名和解释,这个时候通过在线服务绝对要好过翻书。服务里面gotapi是个不错的选择!

在国内看翻译的推荐看:

1、大辫子nicholas写的Javascript高级程序设计

2、John Resig写的精通Javascript (Pro javascript)

ppk on javascript这本书也不错,比较实用,但是个人感觉没有精通Javascriptt这本讲的清楚。

如果看原文可以期待:

1、John Resig的Javascript Ninja,未出版,但是有样章。

2、Js大神Douglas Crockford的Javascript The good parts.

上周和钱钱讨论Programming Ruby这本书的时候我们也持这个观点,它曾经是一本非常棒的入门书,因为那个时候它是第一本非日文的Ruby图书。但是这本经典书到了现在已经有了很多不一样的竞争者,像钱钱同学推荐的Every day scripting with ruby就更偏实践,更容易让你入ruby的门。

防止脑子坏了

Limo说我总喜欢把twitter的内容和google reader贡献也聚合到我的wordpress (blog)里面是个非常不好的“恶习”。可是我觉得实在是没有办法,因为现在我能产生的唯一一些有价值的信息估计都在twitter的bitching里面或者google reader的人肉过滤结果里面了。当然,如果3个以上的朋友在twitter或者邮件里面也同意Limo所说我就停止这样的做法。

博文标题说“防止脑子坏了”是因为最近一年经常发生上下文丢失的事情,就是说本来是想做事情A,但是实际上却转去做了事情B、C、D,结果最后一件也没有做好。还有一种情况是要实现一个目标,结果遇到了问题A,结果为了解决问题A又发生了问题B,我又调查了问题C、D、E都没有解决问题B,造成最后很疲惫的一件事情都没做好。我觉得这种情况发生的原因是“思路的丢失”。在一个人的思考习惯有问题的时候就容易发生这种丢失思路的毛病。

这种丢失思路对于我这种看到什么都感兴趣的人来说就造成了什么事都做不专。可是我一直以来是以做事情做的专业自居的(为了我的自信心,不要反驳我的这个说法)。在和Limo pair一些东西的时候我也发现了这种情况,他说你做事的方式有改进的空间。因为我这个人本性里面缺少决断力,所以做事犹豫,所以就需要更多的理由来支持自己,所以非常容易发生分支思路。如果所有的分支思路都去cover一遍,那么付出的努力就会很大。无法让问题收敛并最终达到一开始的目标。

我现在已经意识到了这个问题,我正在思考解决的方法。我听说钱钱同学在学习决断力的课程,我相信用处不大,因为人的思考方式没有那么容易就通过学习班提高。今天我尝试了冥想的方式,自己感觉身体的每一个部位的存在,发现这种类似健康治疗的方法对于集中注意力非常有好处,感觉这是个路子。然后开始执行的就是在电脑工作的时候开一个文本记录思路和所有做过(要做,尽量让要做的分支工作进入堆栈,推后处理),在其它地方做事就尽量用本子记录同样的事情。短期看,已经发现了做事效率的提高,起码减少了不少分支的发生。待续…

一端简单的向iframe里面注入css的javascript

随手实验了一下这个是好用的(当然这个iframe要同源,否则安全限制无法修改)。原因是我们的系统里面有iframe输出后台的log,里面的样式都是默认的,为了后台无侵入,所以用js修改样式。这样就可以(也可以注入css文件,这样更干净)。注意contentWindow的写法在IE略有不同。

var css = $('testframe').contentWindow.document.createElement('style');
css.type = 'text/css';
css.innerHTML = 'body {font-size: 7px; color: red;}';
$('testframe').contentWindow.document.getElementsByTagName('head')[0].appendChild(css);