关于霏昀

☑80后 ☑双鱼 ☑猫 ☑技术男 ☑Web前端 ☑秋裤男 ☑窝囊废 ☑内拉祖里 ☑弃机从文中 ☑右派 ☑开放社会敌人的敌人

Some Solutions for Pure-javascript Web Application

——–闲着没事备忘下,完全是因为在windows上装couchdb失败后无聊所致——–

其实3年多之前还挺瞧不起js的,结果这几年混下来,糊里糊涂js就成了自己第一称手的语言。

用得顺了也就喜欢起来,而且很多时候js的表达力也挺强的。所以虽然RoR也一直在手边没放下,但是也挺留意用js写server端的项目。毕竟短期来看无论flash还是sl都不能让browser是逃不出js的掌握,如果有特别合适的js写server的东东,我就可以把RoR扔了,完成自己的语言大一统,XD——当然到现在也没看到特合适的,囧。

归正传,题目所谓Pure-js Web App就是只用js这一种编程语言通吃Server和Client端。目前这种项目数量倒是挺多的,不过粗劣分一下类的话,大面上也就两类种东西:一个是维持现在Client-Server-DB这种3-Tiers的体系结构,只是把Server端的编程语言从java、php等等换成js;另一类相对好玩一点,这类基本上抹掉了Server这层,体系结构变成了Client-DB,而全部所谓的业务逻辑代码全都移动到了browser的html页面中。

先说第一类,这类我最早关注的一个是helma——这个是最纯粹的用js写server。我还比较喜欢这个项目:部署简单,内置了jetty,默认情况解压直接跑(其他很多项目需要部署到其他的http或者servlet server中);内建了一个基于xml的对象数据库,不用一开始就配mysql(也可以用mysql);server和app管理和调试工具;文档全;良好的MVC支持。不过helma也有这类的server-side js的通病,他的定位是用js替换php、java、ruby等等server-side语言,这结果是虽然听上去使用这类项目后client和server端代码都是用js写,但是其实这两个地方写出来的js完全不一样。

相对来说,虽然同是server-side js,Aptana旗下的jaxer看上去漂亮得多。jaxer给html中的script标签加了一个runat的属性(M$好像搞过类似的东西?),通过将runat属性设置为server(提供一组用于访问db、调用远程service的api)、both或者client(default),可以决定js运行的位置。而通过一个runat=”server-proxy”的特殊标记,client可以很容易调用server的功能。这样理想下开发人员只需要写包含js的html再部署到jaxer server上就行——咋一看用同一语言同一编程方式挺好的整合了server和client端。不过仔细一想,我还是挺怀疑的。虽然代码文件的区分基本没有了,但是物理上server和client的界限还是存在的。结果就是用helma这类东西,开发人员必须在项目中来回切换server代码和client代码。而用jaxer,开发人员必须在脑子里来回切换server代码和client代码,囧……而且jaxer文档里的例子大多是inline js,真正开发谁这么写呀……一旦外联js,因为这些js文件是区分server和client的,所以很直觉就分到不同的目录,然后……鉴于jaxer并不内建支持mvc,于是我猜会很像js版本的php。补一句,我并没有真正用过jaxer,可能有点信口开河,有兴趣的最好还是去自己看看,如果有jaxer大规模开发经验的,欢迎留言~

第一类我看得多一些就是这两个,另外还有很多在servlet server上跑rinho以及在apache、lighttd上跑spidermonkey的项目。但是总得来说大同小异——我见过比较另类的是把extjs跑到asp服务器上增强jscript能力的,据说很好用,而且鉴于国内虚拟空间的国情,这做法还真挺实惠的。

直接用js作为server side脚本的问题是因为体系结构不变,server和client的区分还在,结果client js和server js完全是不同编程方式。如果只是想用js写server也没什么问题,不过总会觉得有点不优雅。

于是第二类的方案本质上是修改了我们传统中的3 Tiers体系结构。这类方案里,client端直连db。server端基本不再运行任何业务逻辑代码,变成了单纯host html和js的静态服务器。

这类解决方案,我现在知道的就是OpenRestyCouchdb和dojo的Perservere,应该还有其他的。

OpenResty是yahoo一帮人搞的,现在还不开放注册,账号可以发信索要。这个项目提供一组REST和json访问PostgreSQL的接口。用了这个东西,开发的模式变成了,开发人员在前台写html+js客户端,直接操作后台数据库的内容。所有的业务逻辑代码都统一在前端的js代码中。openresty这个作者的blog据说就是用这种模式搭建的。

CouchdbPerservere从思路上和OpenResty没有区别。前者是很热的erlang项目。文档数据库,加之erlang这个东西,传说水平伸缩性无敌。这个项目一直很贴js,view直接用js写,访问走rest和json,包括他自己的管理界面也是直接用html+js做的。这里还有一个用js操作couchdb的例子(windows装couchdb失败的我,没有试……)。后者是dojo的一个子项目,也是对关系数据库的一个包装,好处是与dojo紧密集成。

当然用这种提供REST和json接口的Storage,前台并不一定是js+html,任何通用语言都可以。但是看上去这些项目都很往js贴(比如json而不是xml),毕竟browser上js独大,而现在在desktop上又有了air——air的跨平台还是很诱人。

如果扯大词的话,这种Client-DB直连的模式还可以扯到“云”中。比如OpenResty的服务也可以看成云存储的一种。于是后端用云做存储,前端在浏览器中做计算,大家还真是省事了,XD。(写到这,忽然想起来su27同学写过这么一个东西,gae的js interface。恩,好吧,多么的云计算呀)

不过目前看上去这种模式也有几个问题,一是代码安全,如果全是html+js,那就真是什么秘密都没有了。虽然可以做混淆,但不是万全之策;二是安全性,比如连接远程Storage的用户名和密码总不能放到js中吧?三是跨域,如果用第三方的Storage,这个问题也挺不好解决。综合2,3的话,至少目前来看想完全只用静态服务器也不太可能,还得搭一个Proxy中转。

最后,wiki上还有一个关于Server-side Javascript很完整的列表,可以参考。

虎头蛇尾的结束~

永生的兔子 – living dead

很久以前,隐雾山就已经拥有了这座大陆上最绮丽的自然和人文风光。每当树木最繁盛的季节,隐雾山独有的极乐鸟迎来繁殖期,那些身上长满五彩羽毛的雄鹊开始拼命厮打,掉落的极尽轻盈的缤纷羽毛会在空中漂浮很久才落到地面。于是太阳光辉下终年笼罩在薄雾中的隐雾山主峰,就恰如淡绿底子的画卷上缀满斑斓金光。而转过山阴,沿着隐雾山脉行走几十里就会发现一座花岗岩的侧峰被凭空斜削去一半,形成的斜面平台上坐落着几百座高矮各异却都耸入云端的笔直建筑,那里是早已人去楼空的兔子城遗迹。

今天兔子城遗迹中依然林立着那些让人敬畏的砖木结构大厦。人们至今无法了解那些经历了千万年却仍然完好的梁木究竟使用了什么样的防腐技术。于是那些甚至超越峰顶的高大建筑就这样不声不响地展示着这支已经静谧了的上古文明究竟发展到了何种高度。

走进大厦,大部分的房间都已经凌乱不堪,然而这都是后世盗掠者的痕迹。仔细寻找,依然可以发现一些保存原样的房间。如今人们确信了当时兔子们对于永恒的偏执,他们创造的所有物品都展示着这种偏执。时间这一万物的破坏者也不曾对房间内的各种摆设、用品以及那些只能猜测其用途的精密器具产生丝毫的影响,他们全部完好无损地在那里,甚至那一张张印制着影像的金属薄片都没有丝毫的锈蚀。整座城市好像只是短暂地休息,时刻等待兔子文明的归来。

而如果你悉心留意就会发现,所有保存完好的房间里都放置着若干大小各异但比例一致的长方形扁平盒状物:光华的圆角全无缝隙,一面是一成不变的黑色镜面,另一面则有着各式各样的浮雕、鎏金錾刻、油彩涂绘。兔子城的标志建筑——中心广场竖立的巨大方杯,则是这种称为“华镜”的盒状物中最大的一个。

一直以来,这座大陆流传着各种关于永生的传说——南面海陆的鱼人肉,西方山林中的不老泉。然而这所有的传说,都不似如今兔子城的那个兼具神秘和实绩。

“大约4300年前,兔子城的科技水平就发展到了极致。这是从他们的文献记载里发现的,那时候兔子城的工程师研究出了某种永恒之力。从那以后,上到城市运转,比如作物生产、气候控制、水处理等等,下至各种生活用品的工作,”导游隔着围栏指点房间内桌子上的各种奇妙器具,“都由那种动力驱动和控制,居民们什么都不用做就能很好地生活……”

“……可惜到现在我们考古学家和科学家也不能重现这种动力。”导游不失时机的补充了一句,让游客们则发出此起彼伏的叹息声。

“从此,兔子城开始将全部国力投入到宗教信仰里面。此后1000多年,是兔子城的艺术成就达到巅峰的时期。刚才在前面我们看到的那些最精美的手工艺品基本上都是这个时期生产出来的。……
“……这之后就是华镜时期。”

“华镜是一个叫沚的僧侣工匠发明的。”,导游从口袋里掏出一个精致的华镜,“这是个复制品。过去考古学家一直以为这就是个单纯的艺术品,因为华镜的背面,”导游展示着有鎏金的那一面,“不管是錾刻还是浮雕,一般都具有很高的艺术价值。不过现在我们知道,这个才是正面。”导游把华镜翻过来,指着黑色的镜面。

“当然我们现在只能看到黑色镜面,因为华镜也是用永恒之力驱动的。我们刚才说过,兔子城信仰的是不灭法上帝。当时通过这个黑色镜面,兔子们可以看到这位不灭法上帝的真身。……”

“华镜时期一共延续了八百多年,这期间,兔子城的居民除了吃饭睡觉,每天做的事就是通过华镜观看上帝的生活。并且所有兔子都尝试让自己的生活和上帝的生活同步。……
“……前面那个展柜里就是上帝部分起居记录的拓本……
“但是大概在元前335年,这个记录就完结了。为什么呢?我们看前面展柜里有最后一条记录的拓本,就只有2个字。”

虽然是不同语言的文字,但仍然可以看出是非常潦草的两个字,完全不像之前记录那样工工整整。
“这两字代表的意思是‘静谧’。我们知道兔子信仰的不灭法里,把先知的死叫做静谧。所以这条记录说明,这一天,也就是华镜时代记录开始后的第823年17月4天,兔子城的居民通过华镜看到,上帝死了。”导游用抑扬顿挫的语气念白道。

“这说起来其实挺讽刺的,因为不灭法里最重要的信条就是永恒,结果最后这位上帝还是静谧了。按理说,兔子城的信仰应该就崩溃了。但是事情还有出乎意料的发展,我们到前面的展厅看……”游客们拥着导游向前走。

“……我们刚才说兔子们一直努力把自己的生活和上帝的同步。这样很自然的,很多兔子就想到了死,但是他们一尝试,发现一个问题,就是他们全都变成了不死之身。”

这就是兔子们获得永生的传说,观察到上帝死亡而被祝福或者诅咒的种族。作为传说,这个说法也许并不比那些环宇外文明降临等从前也流传甚广的说法更加可信。事实上,50年前,永生传说的确不过是关于兔子城遗迹众多可能的解释之一。直到那个在隐雾山观察极乐鸟的旅行者跌落深谷后,他的发现改变了这一切。

如今在山阴深谷的西侧,刀削一般笔直上下的悬崖上已经开凿出了供游人上下的坡路。沿着这里下行的途中,导游还会为你指点当年那棵阻挡了旅行者,保住他性命的松树。一路接近谷底的位置,水气开始弥漫,而纵使在盛夏谷底依然寒冷彻骨,于是裹起军大衣和羽绒服的游客们还是不免哆哆嗦嗦起来。然而从这个位置向下看去,已经可以发现在零星散落着苔藓的谷底岩石上,盘坐着无数赤身裸体、骨瘦如柴的永生者们。

“好了,到这里就不能在往前走了。”导游站到铁制围栏的前面比划着,不过事实上谷底诡异的气氛往往使游人们不敢走到围栏的边缘。

“……当然,对于这些永生者,我们仍然知之甚少。一是因为他们似乎对任何东西都没有反应,更不会和我们交流。其次呢,大家注意那个永生者背后的墙壁,”导游指着靠近铁围栏很近靠墙的一个骷髅一般的兔子,“注意看那个墙壁上面的圆孔,对,那个其实是弹孔。大家可能知道这个事件。30多年前,就是这个区域刚刚对游客开放的时候,那时候安检不严格,有个宗教激进派的青年曾经带着枪进来。他们的教义里是不承认永生者存在的,所以他对着那个兔子连开了5枪,其中2枪没打中就留下石壁上的弹孔。另外3枪倒是是结结实实地射中了,不过结果是这位永生者毫发无伤。当然学者们也做过一些其他的实验,但是总得来说以目前的技术,这些永生者都是‘金刚不坏之身’。……”

“……唯一一次观察到永生者有所动作也是在30多年前,比较靠里面的位置有个女性的永生者起身在石壁上磨刻了3天。大家来之前应该在博物馆里看过这段录像了。除此之外,这里一共526个永生者,50年来全都一动不动。……”

我先后到过隐雾山4次。也看过那段录像,那是一个眼神空无一物的“骷髅”兔子用她那“坚不可摧”的手指在石壁上打磨字迹的骇人画面。画外音解说,这个深谷里有3000处之上的磨刻字迹,全部是在漫长的岁月里用手指在石壁上打磨出来的,其中大部分字迹都是关于时间的谚语。比如当时那个女性打磨的字迹是:

“无论消磨多少时间,剩下的依然是时间。”

多年以来,我一直在追踪关于永生的各种传说和实绩。然而7年前是我最后一次下到隐雾山深谷。那一次正值盛夏,返程的时候我和一名年迈的专业摄影师同行——他一生都在拍摄隐雾山,随着隐雾山主峰渐行渐远,他回身向我指点那笼罩在薄雾中的淡绿色山峰,

“你回去可以对比一下50年前的照片,那时候夏天的隐雾山是多么金光灿烂。”

通过他我才了解到近50年来过多的人类活动严重影响了极乐鸟的生存。他说如果照这个速度下去的话,不出100年极乐鸟就会灭绝。那之后,我就再也未曾到过隐雾山。当然,这不完全是因为极乐鸟的缘故。

如今,仍有很多人认为永生的兔子们是危险的,一些宗教里永生者也被描绘成恶魔的化身。无法毁灭的身躯,山峰上那座科技超越我们想象,又保存完好随时能被开启的城市遗迹,这一切确实容易引发人们最恐惧的联想。最新的灭世预言书中,已经描写了那些永生者醒来,重新开启兔子城进而沉没整座大陆的事迹。

相反的,另外一些人则虔诚地笃信永恒的兔子文明,甚至是已经“静谧”的不灭法上帝。他们认为永生兔子是正在进行苦行的神使,上帝也只是进入了更高级的空间。于是总有一天这些永生者会醒来并帮助我们到达永恒——所有这一切都写在新版的福音书中。谷底五百多名永生者显然不是兔子城的全部居民,于是在大陆每个难于到达的险要角落里,都能发现信奉兔子文明,一边虔诚苦修一边寻找其他永生者的人。

然而还有很多人——包括我自己,相信永生者再也不能醒来,正如兔子城永远不会再被开启。如我们所见,自从环宇初开,文明就与“时间”——这位造物主最大的宠儿,进行着不断地战斗。而追求永恒的兔子文明不过是这场争斗的又一位牺牲者。永生者和城市遗迹的存在,只是时间还没未来得及为这次胜利善后,又或者暂时向我们这新文明展示一下他上一次的完胜。

“我真不明白那些活死兔子有什么好看的。”我清楚地记得那位摄影师最后狠狠地撂出这句话。随后他恋恋不舍地看了一眼金光点点的山峰,接着转身一声不吭地继续前行,直到隐雾山主峰完全隐没也未曾回头。

这也许正是在追踪永生传说的过程中,我放弃了隐雾山的缘由。因为我知道那位摄影师有意无意间道出了真相——谷底的兔子们并不是真的“永生”者,那些不过是已经消逝的伟大文明所残留下来的活的遗物而已。

永生的兔子 – living dead
2009-2-18 23:45

发语录,然后睡觉~

1.如果不恨A米队,就不是真正的国际队的球迷,反之亦然。  
2.A米队两次降级。第一次是付费降级,第二次是免费降级。
3.小时候我希望米兰队降入乙级,后来我改变了主意,最好降入丙级。  
4.我反对任何形式的种族主义,但我永远不会让我女儿和A米队的一个球员结婚。  
5.我的梦想?国际队在比赛结束时进一球打败A米队,进球是越位或者手球,最好既越位又手球。  
6.只要有尤文图斯,总会有人窝脏,尤文偶然也承认盗窃,但从不退还赃物。  
7.如果我同ac米兰的人握手,事后我一定洗手;如果我同尤文图斯的人握手,事后我一定检查手指还在不在。
8.意甲存在于我们的DNA中,我们决不偷窃冠军,也决不会降入乙级. 

—— 普里斯科

最后看得担惊受怕。。。

上半场睡过了,起来还能搞明白情况正好看到第二个进球。

下半场清醒过来,就看伊布和阿德拼命浪费机会。然后最后20分钟一看小罗拿球就担惊受怕的,囧。。。

不过好歹是赢下来了,周中对曼联还是坚定地别督了。。。

ps. 看阿德硬过马尔蒂尼真好

对了,补一句,第一个球不是手球+越位真是可惜了

下午一冲动刷上2.2了

其实2.0用着也还行,但是下午一个pdf reader是2.2 only的,于是一冲动就刷了

结果重装软件等等,浪费一晚上时间。。。

不过safari抽风的几率ms是变小了,但愿不是心理作用。

ps. 昨天被某人一撺掇,今天一查,结果看着sony prs 505真叫一个长草呀。。。eeepc、psp、wii什么的都暂缓,谁送我一这个我就以身相许了。。。

歌词,例行

When marimba rhythms start to play
Dance with me, make me sway
Like a lazy ocean hugs the shore
Hold me close, sway me more

Like a flower bending in the breeze
Bend with me, sway with ease
When we dance you have a way with me
Stay with me, sway with me

Other dancers may be on the floor
Dear, but my eyes will see only you
Only you have the magic technique
When we sway I go weak

I can hear the sounds of violins
Long before it begins
Make me thrill as only you know how
Sway me smooth, sway me now

净诸业障



总得来说我相当喜爱怪力乱神的故事(可以有点恐怖气氛,但是排除纯粹恶鬼作乱的恐怖片),所以当初看到王海溪的推荐文本后,立刻找到《巷说百物语》来看。很喜爱。不过自己在豆瓣上的收藏评语——“果然是个挑战人类极限的片”,现在看上去还真是做作。

然后今天发现,《魍魉之匣》还真是个集巷说百物语大成的故事,Orz。能把这么多条骇人听闻的事件线索串在一起,最后还能把故事说圆满,对于喜爱有科学解释的神怪故事的人——比如我,有这种书看就可以被“非常羡慕”了。至于故事刻意求工的说法,大可不屑一顾。

当然对于推理迷们,还是却步一下,或者摆正心态,不要把这个当作推理小说来看,至少至少千万不要当作本格来看。对于这么复杂的故事(集科幻、神怪、变态、畸恋等等于一身),允许一个无所不知、神通广大(飒飒语)的京极堂同学存在,来帮大家摆平真相就好了。一路通读单纯享受抽丝剥茧的快感,就不要什么平等线索和挑战读者了,而且思考这么有违常识的解释实在不过是让人徒费脑细胞而已。(其实我连事件发生的先后顺序都是最后才搞清楚,囧……)

此外我发现我真的一听到京极堂说起绢子的“那个事件”,就立马联想到肯定是这种事件了(= =,好含混,我只是不想剧透)。结果果然是这么日本民族风格的事件。说实话虽然这个是所有事件的缘起点,但还是让人觉得有点无聊,啊,是无聊。

最后这个系列的装帧真是好,很漂亮——和台版各有千秋,而且很容易让人在一堆书里引起注意(惭愧,我真的是完全无知的情况下逛书店才发现原来京极堂系列出了)。期待《狂骨之梦》。不过这种装帧最大的问题就是最外面的封套很容易烂掉,所以我的已经烂了。。。

顺路再提一下动画版吧,本来是打算看的,都下下来了,但是打开第一集看第一眼,我靠,clamp神奇四大妈扑面而来……于是,拖了一遍,截了几张图,然后就删了,囧。。。截图陈列如下:

好伟岸的京极同学。。。再看台词,真是可惜前面没有一个天光暗影惊愕表情的“masaka”来让我截图

然后,这个男子,-______-|||

最后,最右面那个,微微驼背的那个,真的是御龟神关口同学。。。对,没错,还真是一名9头身wsn。。。

clamp千秋万载一统江湖……