Ruby 语言 思想驱动生活

Ruby,Rails,编程是一种乐趣。

RubyConf 2007 agenda

RubyConf 2007
November 2-4, 2007
Charlotte, North Carolina
http://www.rubyconf.org/agenda.html

哪有数据库抱怨sql太复杂的

其实就是一个简单的update语句
UPDATE TAB1 SET COL1 =
SUBSTRING(COL1 FROM 1 FOR POSITION( "AAAAAA" IN UPSHIFT(COL1))-1) 
|| "BBBBBB"||
 SUBSTRING(COL1 FROM 
 POSITION( "AAAAAA" IN UPSHIFT(COL1))  + 7
 FOR CHAR_LENGTH(COL1) - POSITION( "AAAAAA" IN UPSHIFT(COL1)) - 7)
 WHERE POSITION( "AAAAAA" IN UPSHIFT(COL1)) > 0;
这个语句就是想把一个字段的AAAAAA替换成BBBBBB而已,不过sql/mp没有提供replace之类的函数,只好用这样的土方法了。(如果这个字段有5个AAAAAA,则这个语句要执行5次,呵呵,够土)
但是执行的时候出错:
*** ERROR from SQL [-8300]: File system error occurred on
*** \XXXXX.$DATA01.TEST.TAB1.
*** ERROR from File System [1133]: […]

Rails中使用ESI实现页面cache

什么是ESI
ESI的全称是Edge Side Includes,是一个基于XML的标记语言,目的是在HTTP中组装各种资源。是由Oracle和Akamai等公司提议的,在W3C的网站也可以找到相关规格说明,最新的是2001年的了,也不是什么新东西。传统的cache技能基本都已页面为单位进行缓存,问题就是页面部分的动态内容可能比较多,而且是每个客户端的内容都不一样(比如个人的登录信息,欢迎xxx等。),缓存比较困难。ESI为了能把页面的一部分进行缓存,使用基于XML的标记语言,来描述对page内个内容的缓存情况。这样,服务器(缓存部分)就可以只缓存共同部分了。
ESI有点类似SSI,但是它比SSI功能更丰富。
目前支持/实现ESI的开源服务器包括Squid,Mongrel-ESI等,商用的有Oracle和Akamai的服务器。
要在Rails里支持ESI需要安装两个插件,一个是Mongrel用的插件Mongrel-ESI,一个是Rails用来处理ESI标记(tag)的fragmentFu。两个软件都可以在http://mongrel-esi.googlecode.com找到。
如何安装一下Mongrel-ESI我就不说了,因为我也没有装过,下面的代码我都没有试验过。
下面来看一下ESI的代码,下面是一个测试的例子(转自http://blog.tkmr.org/tatsuya/show/368-rails-10-esi,日文)
cd /home/my/rails/app/path
—-index.html—–
<h1>Welcome ESI!!</h1>
<p><esi:include src="/welcome/now" max-age="45"/></p>
esi标记里的就是ESI的内容了,应该比较好理解,max-age的意思就是页面缓存保留的时间,这里的话每45秒缓存就会被更新一次。
再来看看控制器里的代码:
./script/generate controller welcome now
—-welcome_controller.rb—-
def now
  render :text => "#{Time.now}"
end
启动Mongrel_esi:
mongrel_esi start
  ** Starting Mongrel listening at 0.0.0.0:2000
然后就可以去浏览器里看看了,是不是45秒那个显示的时间才更新一次。
上面的例子是标准的ESI写法,当然Rails中这样写就有点累了,这个时候就需要fragmentFu这个Rails的plugin了。
在ERB里,写法是这样的:
./script/plugin install http://mongrel-esi.googlecode.com/svn/trunk/plugin/fragment_fu
—-/app/view/welcome/index.html.erb—-
<h1>Welcome ESI!!</h1>
<p><%= render :esi => {:action => "now"}, :ttl => 45.seconds %> </p>
ttl这个名字比较亲切。
当然,ESI里面也能使用Cookie或者Http的request数据:
#query string
<p><%= render :esi => "/users/name/$(QUERY_STRING{my_name})" %> </p>
#Cookie
<p><%= render :esi => "/users/home/$(HTTP_COOKIE{UserID})" %> </p>
除此之外,ESI还有异常处理机能。因为ESI指令的include可以指向别的地址,所以,取得cache内容也可能失败。
比如下面的代码(来自http://revolutiononrails.blogspot.com/2007/08/advanced-rails-caching-on-edge.html

<esi:try>
  <esi:attempt>
    <esi:include src="/latest" max-age="5" timeout="1"/>
  </esi:attempt>
  <esi:except>
    <esi:include src="http://static.foo.com/latest" max-age="5" […]

还是病毒

还是发现了一些病毒,或者叫做木马。
又搞了半天,更有点对病毒作战的感悟
首先是两个软件很不错,一个是冰剑(IceSword),一个是SREng(System Repair Engineer)
冰剑可以删除taskmanager不能杀得进程,也能删掉explorer不能删掉的文件。
SREeng可以发现注册表的问题,今天就是它提示的,提示APPINIT_DLLS被修改了。就用冰剑把那个文件(dll)删掉了。
二是禁用VB脚本,尽量使用firefox了。
在当前用户的temp下发现了类似这样的文件
Set Shell = CreateObject(”Wscript.Shell”)
Shell.Run(”C:\DOCUME~1\a\LOCALS~1\Temp\zj.exe”)
set Shell=Nothing
i=1
下面的这条命令可以禁止文件系统对象(FileSystemObject)
regsvr32 scrrun.dll /u
总之,另外,这几次发现的都是盗用密码之类的木马,而且都是明目张胆的往某些ip地址post数据,抓出这些傻逼病毒使用者/制造者很容易吧,我们的保护神公安局在干什么呢?
以下来自网络搜索结果,我也没全尝试:
_______________________________________
  2、禁用Wscript.Shell组件:
  Wscript.Shell可以调用系统内核运行DOS基本命令。可以通过修改注册表,将此组件改名,来防止此类木马的危害。HKEY_CLASSES_ROOT\Wscript.Shell\ 及HKEY_CLASSES_ROOT\Wscript.Shell.1\改名为其它的名字。将两项clsid的值也改一下HKEY_CLASSES_ROOT\Wscript.Shell\CLSID\项目的值和HKEY_CLASSES_ROOT\Wscript.Shell.1\CLSID\项目的值,也可以将其删除。
  3、禁用Shell.Application组件
  Shell.Application也可以调用系统内核运行DOS基本命令。可以通过修改注册表,将此组件改名,来防止此类木马的危害。HKEY_CLASSES_ROOT\Shell.Application\ 及HKEY_CLASSES_ROOT\Shell.Application.1\ 改名为其它的名字。将HKEY_CLASSES_ROOT\Shell.Application\CLSID\项目的值HKEY_CLASSES_ROOT\Shell.Application\CLSID\项目的值更改或删除。同时,禁止Guest用户使用shell32.dll来防止调用此组件。使用命令:cacls C:\WINNT\system32\shell32.dll /e /d guests
  4、FileSystemObject组件
  FileSystemObject可以对文件进行常规操作可以通过修改注册表,将此组件改名,来防止此类木马的危害。对应注册表项为HKEY_CLASSES_ROOT\scripting.FileSystemObject\。可以禁止guests用户使用或直接将其删除。考虑到很多的上传都会使用到这个组件,为了方便,这里不建议更改或删除。

Ruby也要搞认证考试了

今年10月在东京和Matz在住的松江,明年2月开始开始网络版的考试,有英语和日语。
Matz和他们公司的另两个人组成了一个Ruby Association LLC (http://www.ruby-assn.org/index.html.en),当然,并没有辞职,这个公司是个LLC,主要为了帮助Ruby发展而建立的。这个认证也是由Ruby Association主办的。

与病毒斗,真累

昨天双击d盘,没反应,右键一看第一个是auto,好像又中了那个病毒了。而且是不到1年之内的第三次了。以前还算顺利,杀这个病毒。这次就惨了。
查看进程,启动选项,很正常,删掉autorun.inf和那个pagefile两个文件,当时是没事,这时候,如果再从桌面或者开始菜单启动任何程序,这两个文件都会被重建。
重启,报explorer.exe错误,金山的个人防火墙也没了(没启动),查看explorer这个文件,好像没什么问题。启动防火墙,突然报explorer要访问网络,我靠你一资源浏览器干什么新潮访问个鸟啊,一旦允许,立刻金山报了无数病毒,多是窃取密码的木马。Win32.Troj.Lyloader.a.14848
Win32.Troj.PswrobT.gl.90112
Win32.PSWTroj.WOW.sa.153088
等。
地点都是
\Local Settings\Temp
名字是1.exe,2.exe,3.exe之类的。
鸟人,查看一下网络状况,一个连到了74.222.148.2 一个222.73.15.76。一个美国,一个上海(SB那个上海人和gaj)。端口都是80,肯定有问题。
用IceSword看了一下Explorer加载的模块,发现了两个dll比较差劲
一个在ie的plugins,叫做newtemp.dll,而且是隐藏文件,一个是cnsmin.dll。
在文件系统里查找,最近几天的dll,果然就这几个文件,还有一个kulionzx.dll,好像也是病毒。从注册表里找到这些,都删掉,重启之后目前一切正常。
至此虽然告一段落,但是为什么会中毒,毒源还没找到,每天上的网站也都是固定的几个,也不怎么乱下软件。其中一个原因是可以肯定的,就是windows,至于为什么windows的病毒这么多?原因也是很多的,比如windows系统很复杂,说他复杂过linux毫不过分,普通的人很难完全精通掌握系统复杂层次的东西,当然,他们的安全防范的设计估计也挺差,不至于因为大家都用管理员账户就可以这么容易感染病毒吧,比如那个注册表,怎么那么容易被改写?难道真是因为用户都变成傻瓜了。

NSK里的DEFINE

Nsk里的Define跟c语言里的define类似,不过不是语言级别的,是执行环境级别的,或者说是session级别的。Logon之后定义的define,logoff之后就没了,下次logon还要在执行(手工或者放到logon之后自动执行的脚本里)
Define的好处就是方便,简单。比如程序读写文件,实际的文件名随时会变,大多数情况下都会把要读写的文件放到一个固定的config文件里,然后从config里来得到文件的路径。Nsk的话,在程序里只需要使用理论名(即define值)。
Define是一个key value类型的,程序使用key,至于value是什么,执行之前指定就行了。
先说define名,就是上面的那个key了,必须是=开头,长度(包括=)2-24,第二个字符必须是英字母。
Define属性。最主要的是class属性,指定define的类型,包括sql的catalog,defaults,map(key-实际文件名),spool,tape等。经常用的就是catalog和map了。
这是一个简单的map的例子
$DISK SUBVOL 4> ADD DEFINE =MYDEF , CLASS MAP , FILE $DISK.SUBVOL.FILE1
$DISK SUBVOL 5> info define =MYDEF
Define Name =MYDEF
CLASS MAP
FILE […]

这段话有问题吗?

在看Ralf Wirdemann 和Thomas Baustert的《RESTful Rails Development》,1.2节的why REST的时候说道:
Clean URLs. REST URLs represent resources and not actions. URLs always have the
same format: first comes the controller and then the id of the referenced esource.
The requested manipulation is independent of the URL and is expressed with the help of HTTP verbs.
说REST有着清楚简洁的URL风格,URL里不表示(带)action,是controller/:id这样形式的,至于对这个资源进行何种操作,是通过http header里的动词来指定的。
我是对这句话很有疑问,http header 里就4中操作,如果处理CRUD以外的action的话,怎么办?
Map.resources 的时候可以指定collection或者member的action,就是说url里还是会出现action的,比如users;top10,可以列出排名前十的用户,这个top10就是collection指定的users控制器的一个action。
这句话说的即使不错,也是不严谨的。对于刚接触REST这个词的人来说,很容易误解,误入歧途。
我觉得,不是说/projects/1就比/projects/show/1更RESTful了。
本来,URL就是RESTful的东西。

你会给你儿子起个什么名字?

今天在slashdot.jp上看到了这个新闻http://slashdot.jp/articles/07/08/19/2258202.shtml,说中国一对夫妇要给孩子起个带@的名字,中文版在http://tech.sina.com.cn/i/2007-08-17/10321682868.shtml,竟然sina的新闻如此翻译人家cnet的。
还是说slashdot.jp的吧,底下有留言,说隔壁有人叫IDE(这个就是井上的假名),和ASCII(和明日树只是发音一样,假名写法差点)。还从中找到了这个http://ja.wikipedia.org/wiki?????????
说是那个人要给孩子起个名字叫【恶魔】,被拒了,理由是父母滥用权利,损害小孩权利。结果那个人又用同样的发音但是不同的汉字去申请,还是被拒了。这件事引起了媒体的广泛关注,结果是父母离婚,小孩被送进了儿童养护设施,就是一福利机构。这个小孩今年应该是14岁了吧。
另一个就是给孩子起个名字要43个字母
http://en.wikipedia.org/wiki/????????????????
这个人被罚了钱,还认为这是自己的创造。
你会给你儿子起个什么名字?

足球又回来了

第一场是拜仁,还好,德甲还能在cctv5上看。有了托尼,克洛泽,里贝里的拜仁,今年会有什么样的成绩呢?
刚说到这克洛泽一个助攻,托尼进球了,太棒了。
比赛结束了,3:0,克洛泽一个助攻两个进球,里贝里,拉姆,卢西奥,也都很兴奋那。
英超和意甲都被天盛买了,好比赛都看不了了。
今天开始,各大联赛就要陆续开始了,又可以为生活添点乐趣了。
不光是看,从现在开始,还要尽量找到地方去踢球,才叫爽。上次踢球,还是去年10月8号,大概,快一年了,真是憋得难受。
想起来都脚痒。

« Previous Entries  Next Entries »

Locations of visitors to this page


Recent Comments