ruby的ssl问题

师弟的ruby出了点问题,启动rails的时候报错:

$ ruby script/server
=> Booting Mongrel (use ‘script/server webrick’ to force WEBrick)
=> Rails 2.1.0 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment…
Exiting
/usr/local/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/initializer.rb:225:in `require_frameworks’: no such file to load — openssl (RuntimeError)
from /usr/local/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/initializer.rb:113:in `process’
from /usr/local/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/initializer.rb:93:in `send’
from /usr/local/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/initializer.rb:93:in `run’
from /home/xulei/ROR/mybook/config/environment.rb:13
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require’
…………………….

一大堆错误。

尝试使用apt安装ruby和rails,没想到ubuntu 8.04存在依赖性关系,未遂。看来这件事情将我转到ubuntu的yy想法无情打破。

源码安装ruby和rubygem,然后gem安装rails,还是以上问题,未遂。

google一下,说是先装openssl-dev,然后“reconfigure all the ruby packages from scratch”,一直没理解这个reconfigure是什么意思。后来弄明白了,原来是到ruby的源码目录configure、make和make install,这样就ok了。

ror的效率确实不错

用三个晚上搞定了实验室的主页(http://pact518.hit.edu.cn),没太费劲。

主要是业务流程做起来比较快,但是ror效率高当然是指在熟悉ror的前提下,不然如果出了问题,找问题的时间完全就可以拿来做一个新的站点了,呵呵。

其实我对ruby的语法还是不太熟,不过做比较简单的应用已经够用了:-)

新公寓,新生活

搬公寓了,终于到了两人间,感觉还不错。拿了cliff的推车,和astro搬了好几次,终于把全部家当挪过来了。

今天搞定上网问题,锐捷上网认证还是很恶心的,不过单机改mac之后,可以上网了,win和linux都没问题,不知道使用hub之后会怎么样。

今天顺便把win给ghost恢复了一下,说实话,win PE真的很牛,集成了很多软件,像ghost这样使用的东西就带了,还有例如qq、暴风影音和卡巴这些orz的程序也进去了,总大小不过100多M而已,如果去掉网络支持,50+M都能搞定,很好很强大……

rail autocomplete

具体就是参考这篇文章:

http://ajax.howtosetup.info/savor-the-scriptaculous/create-an-auto-complete-field/

但是我复制代码发现没有效果,抓包看日志的结果是HTTP422错误(但是GET请求没有问题,POST请求需要带token key?):
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
/vendor/rails/actionpack/lib/action_controller/request_forgery_protection.rb:86:in `verify_authenticity_token’
/vendor/rails/activesupport/lib/active_support/callbacks.rb:173:in `send’
……

google了一下,在相应的controller中添加这句话:
protect_from_forgery :only => [:create, :update, :destroy]

这样即可。

解决ftp乱码问题

http://linux.chinaunix.net/bbs/archiver/tid-747126.html

由于windows使用的编码是gbk,上传文件一般都是gbk的编码,而ftp服务器一般都是输出utf8,所以linux下用ftp看文件都是乱码。

好像一般的ftp服务器都没有转换编码的功能,所以需要另找方法。

具体的方法参考上面的链接,不过有几点不同的:

1 没有源码安装。我用的是testing的源,没有fuse-convmvfs包,所以我加了sid的源装fuse-convmvfs,同时需要安装fuse-utils运行fusermount

2 我的应用下,编码转换正好相反:

su fuser -c ‘/usr/bin/convmvfs -o srcdir=/home/marvel/psp,icharset=gbk,ocharset=utf8,allow_other /home/marvel/psp_gbk’

这样处理之后,用utf8编码即可访问我的psp_gbk目录了

firefox 扩展更新

firefox扩展更新需要两个文件:install.rdf和update.rdf。前者是在xpi包中的,客户端用这个文件获得更新站点的信息,后者是放在服务器端,客户端每次检查更新的时候会下载这个文件,检查现在可用的版本号,然后下载。

firefox扩展更新有两种方式:http更新和https更新,两者区别在于更新的文件是通过http或是https传输。因为考虑到更新的时候存在中间人攻击(attack in the middle),所以推荐使用https更新,但是如果只需要http更新的话,那么需要给出updateKey来认证服务器的身份。

我还是讨论https更新吧,因为前者没有什么好说的:-) 一个典型的install.rdf和update.rdf如下:

<RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#"
xmlns:NC=”http://home.netscape.com/NC-rdf#”
xmlns:RDF=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”>
<RDF:Description RDF:about="rdf:#$mP9ic3"
em:id=”{ec8030f7-c20a-464f-9b0e-13a3a9e97384}”
em:minVersion=”1.5″
em:maxVersion=”3.0.*” />
<RDF:Description RDF:about="urn:mozilla:install-manifest"
em:id=”surf.marvel@lilacbbs.com”
em:name=”SurfLilac”
em:version=”0.0.4″
em:creator=”marvel”
em:contributor=”happygirl”
em:description=”Surf on lilacbbs.com”
em:homepageURL=”http://lilacbbs.com/surflilac/”
em:iconURL=”chrome://surflilac/skin/surflilac.png”
em:updateURL=”http://lilacbbs.com/surflilac/update.rdf”
em:optionsURL=”chrome://surflilac/content/pref/pref-surflilac.xul”
em:updateKey=”MIGfMA0GCSqGSIb3D4GNADCBiQKBgQDbbAD1IyiVmkbMbhSxK60cmGisUzorEvo98+Hs83ZPOYvrMteeYjf2HbnMSobYjjREWTO+DBdS0/HYisubtRXHlZU41ezBhFS00C3J2JiSWyY+HFjRz3vXQSfD5KpkzS2jMGPS0KL4aU9wU/P4Sq4QuhfZJVNVkBejdotr7zsb1wIDAQAB”>

<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em=”http://www.mozilla.org/2004/em-rdf#”>

0.0.4

{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
1.5
3.*
http://lilacbbs.com/surflilac/surflilac0.0.4.xpi
sha1:26181045af2614d73ba49bb5fdf8f6cc7188cee0
http://lilacbbs.com/surflilac/changelog/updateinfo0.0.4.html
azl0DkDkELGKSmTs8+FoxOzq+tDpVqILLlO/iG/zP0wduOKrHxxxxxxxxxxxxxxx

首先,install.rdf中的em:updateURL指定了更新文件update.rdf的地址,其次install.rdf的em:updateKey和update.rdf的em:signature指定了升级认证的密钥对。这三个是最重要的,剩下的update.rdf中的RDF:li指定了某一个版本,这里可以有多个RDF:li。

我介绍一下具体怎么操作吧,我们需要mccoy(http://developer.mozilla.org/en/docs/McCoy)这个生成密钥对的工具,步骤如下:
1 用mccoy生成一个密钥,具体步骤参见上面的链接
2 生成install.rdf,文件中含有updateURL
3 用mccoy install步骤2中的install.rdf,你会发现该文件增加了一个updateKey属性,文件格式也变化了,没关系
4 将扩展目录打包成xpi,计算xpi的散列值,例如sha1sum lilac.xpi,记住生成的值
5 生成update.rdf,格式参上。再加入em:updateHash子节点,值为4中散列值,格式参上
6 用mccoy sign步骤5生成的update.rdf,你会发现多了一个em:signature,文件格式也变化了,没关系
7 将xpi文件和update.rdf复制到你的服务器上
8 -EOF-

firefox3扩展的id

一个典型的install.rdf如下:

<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em=”http://www.mozilla.org/2004/em-rdf#”>

marvelliu.@gmail.com
SurfLilac
0.0.1

{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
1.5
3.*


marvel
happygirl
Surf on lilacbbs.com
http://lilacbbs/firefox/lilac/
chrome://surflilac/skin/surflilac.png

其中,第一个em:id表示程序的id,这个有两种形式,一种是类似于电子邮件的格式,例如foo@a.com,但是不一定需要是你的真实邮件地址;第二种是gid,具体如何生成gid可以参考http://developer.mozilla.org/en/docs/Generating_GUIDs。

第二个em:id表示这个扩展安装的宿主程序的id,这个可以在https://addons.mozilla.org/en-US/firefox/pages/appversions查到。
我当时以为这个em:id是随便写的,结果提示firefox和这个扩展不兼容,ft,呵呵。记住,如果是firefox(版本为0.3, 0.6, 0.7, 0.7+, 0.8, 0.8+, 0.9.x, 0.9, 0.9.0+, 0.9.1+, 0.9.2+, 0.9.3, 0.9.3+, 0.9+, 0.10, 0.10.1, 0.10+, 1.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6, 1.0.7, 1.0.8, 1.0+, 1.4, 1.4.0, 1.4.1, 1.5b1, 1.5b2, 1.5, 1.5.0.4, 1.5.0.*, 2.0a1, 2.0a2, 2.0a3, 2.0b1, 2.0b2, 2.0, 2.0.0.4, 2.0.0.8, 2.0.0.*, 3.0a1, 3.0a2, 3.0a3, 3.0a4, 3.0a5, 3.0a6, 3.0a7, 3.0a8pre, 3.0a8, 3.0a9, 3.0b1, 3.0b2pre, 3.0b2, 3.0b3pre, 3.0b3, 3.0b4pre, 3.0b4, 3.0b5pre, 3.0b5, 3.0pre, 3.0, 3.0.*, 3.1a1pre)的扩展,这个值永远是{ec8030f7-c20a-464f-9b0e-13a3a9e97384}。
随便说一句,firefox应该是通过扩展的em:id来辨别扩展,所以不要图省事用别人的扩展的em:id 🙂

六二

亲爱的老婆,今天的网络很不好,好几次想上空间都没有上的去,答应你要到我的blog给你写一些东西的:-)

一早你问我是不是没有睡好,我说还好,嗯,差不多吧。昨晚你肚子就不舒服,我就在想要不要紧呢,哎,早知道就带你去医院了。老婆,你知道吗,你在家里告诉我身体不舒服的时候我有多难过吗,我不能跑到你的身边照顾你,我担心你的家人无暇顾及你。每次你肚子不舒服的时候,我也不开心,有时候想想,其实每个月的那几天不仅仅女人发愁,男人也挺难受的-__-

妞妞,有一些事情老公让你受委屈了,以前和现在的老公不是一个称职的好老公,但是好老公不是天生的,每一个好老公的背后都会有一个好老婆。妞妞你说是吗?老公会在以后向好老公转型,和妞妞一起走过以后的岁月,(当然在某一些方面还是可以保留坏老公的特征,当然是妞妞喜欢的那种坏啦~~)

老婆,你问过我,我会不会为你而哭。傻孩子,这个问题不是早就有答案了吗?男儿有泪不轻弹,只是未到伤心时。我心急,我上火,我吃不下饭,都是因为你啊。不过,这一年,除了泪水,更多的是欢笑。我最喜欢和老婆度过那每一分每一秒。我最不舍的是和老婆分开,我最不愿意见到的是七公寓熄灯,最不愿意见到大叔来关门,最不愿意见到老婆离我上楼。而我最喜欢和老婆压马路,最喜欢和老婆温存,最喜欢和老婆一起吃东西,最喜欢和老婆睡觉觉,哈哈~~

————-我是分割线——————–

这两天做毕设太忙了,每天睡的都不太好,总是有点犯困。不过老婆也挺辛苦的,每天六点就醒了,呵呵。放心吧,老公早就看到你写的blog了,我会努力做好毕设的。有我的好妞妞,什么困难都能克服的啦 :-)

老婆,如果你问我世界上最痛苦的事情是什么,那就是看不到你的面容,听不到你的声音,摸不到你的肌肤,感觉不到你的心跳。如果真的是这样,我宁愿终老一生。如果你不在了,我也会找遍天涯海角陪你,就算到了天堂。

所以,请你不要怀疑我的真心。有我,有你,就有一生。

—————–分割线结束—————-

另,补充一点:

老婆,对不起,昨天说话急了一点,但是我发誓我真的不在凶你,我从来也没想过对你凶,你是我的好老婆,是用来疼的,不是用来凶的。如果我做的不好,请当面说出来,我最怕老婆哭了。

还有,知道我最伤心的是什么吗?你吃饭的时候说不是很喜欢我了。你打我骂我多久都好,我最不愿意你说这句话了。两个人在一起不容易,磕磕碰碰在所难 免,但是老公永远是爱你的那个好老公(当然在某些方面也是坏老公,不过坏的让老婆舒服的那种坏-__-),所以别什么事情都拉上感情,说多了不好。老公的 不足老公知道,老公会好好改进的。你不是说过你哥哥脾气也不好吗,但是当官之后也会变的,老公也会一样的。

不过话又说回来了,如果你真的开始不喜欢我了,我就会马上重新把你抢回来,不给别人任何机会。嗯,我说道做到。

最后我想说什么呢?那就是,在我心中,每天都是六月二日,每天都想跟老婆呆在一起。你一定会说,谁是你老婆呀,哦,对了,我的老婆就是我的小,哈哈~

送你一张图,不许再说“谁是你老婆”这样的话了哦!!!

P.S. 你是我的宝,我是你的小小狗

地震无情人有情

母亲已死,3个月的孩子压在她身下,手机留下了…

抢救人员发现她的时候,她已经死了,是被垮塌下来的房子压死的,透过那一堆废墟的的间隙可以看到她死亡的姿势,双膝跪着,整个上身向前匍匐着,双手扶着地支撑着身体,有些象古人行跪拜礼,只是身体被压的变形了,看上去有些诡异。救援人员从废墟的空隙伸手进去确认了她已经死亡,又在冲着废墟喊了几声,用撬棍在在砖头上敲了几下,里面没有任何回应。

当人群走到下一个建筑物的时候,救援队长忽然往回跑,边跑变喊“快过来”。他又来到她的尸体前,费力的把手伸进女人的身子底下摸索,他摸了几下高声的喊“有人,有个孩子 ,还活着”。 经过一番努力,人们小心的把挡着她的废墟清理开,在她的身体下面躺着她的孩子,包在一个红色带黄花的小被子里,大概有3、4个月大,因为母亲身体庇护着,他毫发未伤,抱出来的时候,他还安静的睡着,他熟睡的脸让所有在场的人感到很温暖。随行的医生过来解开被子准备做些检查,发现有一部手机塞在被子里,医生下意识的看了下手机屏幕,发现屏幕上是一条已经写好的短信“亲爱的宝贝,如果你能活着,一定要记住我爱你”,看惯了生离死别的医生却在这一刻落泪了,手机传递着,每个看到短信的人都落泪了

五个月大的婴儿获救 在士兵怀中好奇张望

寻找希望

幸运的猪

救援士兵席地而睡

废墟前的祈祷

绵竹市,市民们在救助中心为手机充电

离开“家园”

被救出的孩子向解放军叔叔“敬礼”