看论文很ft

今天看一篇论文“智能交通系统中Dijkstra算法的高效实现”,一篇参考文献是:GIS 领域最短路径搜索算法的高效实现[J]. 中国图像图形学报, 2003, 8A(8): 951-956

结果搜了好几个数据库,没有该文,找《中国图像图形学报》期刊,未果,居然有期刊找不到的情况!

后来好像放狗了,才发现原来不是《中国图像图形学报》,而是《中国图象图形学报》,sougou拼音打不出来,但是确实图象这个词不常用,我开始也以为是错别字,汗一个。

下面就好办了,按照期刊的年份月份找,终于找到了,但是发现名字居然是“GIS领域最短路径搜索问题的一种高效实现”,怪不得搜不到。

原作者,你能不能不把文章名和期刊名同时写错??

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 🙂