用镜头记录,用心灵体验 | 订阅本站 | 所有笔记 | 亲和力设计 | 流量

DB2 学习笔记

博客话题:DB2,Linux,Web,业余无线电,户外,摄影,截拳道,Thankpad,其他

February 2007

好书推荐:《人体使用手册》

最近读了吴清忠 写的的《人体使用手册》,读罢有很多感触,作者的很多观点都是非常新颖的,至少在我看来如此,某些甚至是在挑战在经过“科学”论证的一些西医理论。从前自己对中医了解不多,没什么自己的观点,前段时间看了Fenng的一篇我对中医的态度,在这里我就不反驳他的观点了,只是推荐他来读读 这本未随同人体一起交付的说明书。 作者在书中介绍,经复旦大学费伦教授课题组的研究,经络和穴位在人体解剖学上已经找到证据 ,这点令人振奋,以往令人感觉虚幻的中医理论终于有了物质为基础的立足点。西医自有其擅长领域,在“科学”上找不到依据的理论是不予认可的,因此也倾向于忽视尚未被发现或者证实的人体具有的自我调节功能。前些天,看了一则报道,目前外科手术中断肢修复,医生会逐根接上断开的神经,可是无法保证完全正确,会影响到肢体的部分功能,最近发明了一种新的方法 ,使用一种材料包裹断开的神经束,人体会自动完成精确的神经再连,在这种方法发明以前,西医大概不会认可神经的自我修复能力。 作者还谈到西医倾向于忽略人体各系统间的作用关系,也就是俗话说的“头痛医头,脚痛医脚”,反过来对应中医就是“辨症施治”。这点书中举了很多例子,比如高血压、感冒等。如果把这些例子都看完,暂不论中医的方法是否正确,我们也一定能看出西医方法的局限性,也会惊讶以现代科技为基础的医学竟然存在这么单纯的诊断模式,但事实就是如此。 书中作者反复提到的一个观点就是良好的“睡眠”,在合适的时间内(从天黑到凌晨1点是人体造血机能工作的最佳时间)有足够的深度睡眠。很多上班族,尤其是年轻人,恰好错过了这段最佳睡眠时间,包括我自己,现在也没有好的方法改掉这个习惯。 书中的内容很精彩,作者用了很多比喻来说明自己的观点,一方面试图论述西医的种种局限,另一方面竭力为中医的理论找出依据,我尽量客观的去理解和认识,对作者西医观点的不赞同,并不代表一定要排斥其对中医的观点,反之亦然。现代的科技虽然可以把人送上月球,也可以把探测器发送到遥远的宇宙,但对地球本身、以及地球上的很多生物,在某些方面却缺乏一些最基本的了解。 在网上能找到这本书的电子版本 ,是出版之前作者的朋友经作者认可后传播出来的,但缺少出版时配的插图和添加的章节,在这里可以下载 ,这里在线阅读 。今天找到了作者的博客,还有很多不错的文章,值得花时间看看。  ...

封面 最近读了吴清忠 写的的《人体使用手册》,读罢有很多感触,作者的很多观点都是非常新颖的,至少在我看来如此,某些甚至是在挑战在经过“科学”论证的一些西医理论。从前自己对中医了解不多,没什么自己的观点,前段时间看了Fenng的一篇我对中医的态度,在这里我就不反驳他的观点了,只是推荐他来读读 这本未随同人体一起交付的说明书。

作者在书中介绍,经复旦大学费伦教授课题组的研究,经络和穴位在人体解剖学上已经找到证据 ,这点令人振奋,以往令人感觉虚幻的中医理论终于有了物质为基础的立足点。西医自有其擅长领域,在“科学”上找不到依据的理论是不予认可的,因此也倾向于忽视尚未被发现或者证实的人体具有的自我调节功能。前些天,看了一则报道,目前外科手术中断肢修复,医生会逐根接上断开的神经,可是无法保证完全正确,会影响到肢体的部分功能,最近发明了一种新的方法 ,使用一种材料包裹断开的神经束,人体会自动完成精确的神经再连,在这种方法发明以前,西医大概不会认可神经的自我修复能力。

作者还谈到西医倾向于忽略人体各系统间的作用关系,也就是俗话说的“头痛医头,脚痛医脚”,反过来对应中医就是“辨症施治”。这点书中举了很多例子,比如高血压、感冒等。如果把这些例子都看完,暂不论中医的方法是否正确,我们也一定能看出西医方法的局限性,也会惊讶以现代科技为基础的医学竟然存在这么单纯的诊断模式,但事实就是如此。

书中作者反复提到的一个观点就是良好的“睡眠”,在合适的时间内(从天黑到凌晨1点是人体造血机能工作的最佳时间)有足够的深度睡眠。很多上班族,尤其是年轻人,恰好错过了这段最佳睡眠时间,包括我自己,现在也没有好的方法改掉这个习惯。

书中的内容很精彩,作者用了很多比喻来说明自己的观点,一方面试图论述西医的种种局限,另一方面竭力为中医的理论找出依据,我尽量客观的去理解和认识,对作者西医观点的不赞同,并不代表一定要排斥其对中医的观点,反之亦然。现代的科技虽然可以把人送上月球,也可以把探测器发送到遥远的宇宙,但对地球本身、以及地球上的很多生物,在某些方面却缺乏一些最基本的了解。

在网上能找到这本书的电子版本 ,是出版之前作者的朋友经作者认可后传播出来的,但缺少出版时配的插图和添加的章节,在这里可以下载 ,这里在线阅读 。今天找到了作者的博客,还有很多不错的文章,值得花时间看看。

 

Posted by Alex at 12:43 PM | Comments (0) | Edit | Taged: (4), 健康 (1), 推荐 (2)

DB2 中的LONG VARCHAR 类型

DB2 中LONG VARCHAR 与VARCHAR 数据类型都用来存储长文本,但是它们之间的用法有很大不同。VARCHAR 与普通数据类型一样,要使用到bufferpool,在创建表时受制于最大的bufferpool page size,而LONG VARCHAR 则与LOB数据一样,有单独的存储区域,不需要使用bufferpool,所以在创建表时也不需要有大的bufferpool存在,在访问这些数据时,直接操作磁盘IO进行存取,所以速度更快。但LONG VARCHAR 数据类型的使用也相应受到限制,不能用在以下语句中: DISTINCT GROUP BY...

DB2 中LONG VARCHAR 与VARCHAR 数据类型都用来存储长文本,但是它们之间的用法有很大不同。VARCHAR 与普通数据类型一样,要使用到bufferpool,在创建表时受制于最大的bufferpool page size,而LONG VARCHAR 则与LOB数据一样,有单独的存储区域,不需要使用bufferpool,所以在创建表时也不需要有大的bufferpool存在,在访问这些数据时,直接操作磁盘IO进行存取,所以速度更快。但LONG VARCHAR 数据类型的使用也相应受到限制,不能用在以下语句中:

  • DISTINCT
  • GROUP BY
  • ORDER BY
  • BETWEEN/IN
  • LIKE
  • 子查询内部
  • 列函数中

LONG VARCHAR 允许的数据最大长度为32700字节,VARCHAR 最大允许32672字节。在CLP与CE中操作LONG VARCHAR 会有一些不期盼的事情发生,比如对于长度大于8192字节的LONG VARCHAR列使用以下语句,会导致截断,并且不给出任何warning。

SELECT longvarchar FROM table;

使用以下语句也是不安全的,因为一旦列长度超出VARCHAR 允许的最大长度32672,语句将会失败。

SELECT VARCHAR(longvarchar) FROM table;

安全的写法是使用表达式CAST

SELECT CAST(langvarchar AS VARCHAR(32672)) FROM table; 
以上内容适用于DB2 版本8以及版本9。 

Posted by Alex at 3:27 AM | Comments (0) | Edit | Taged: DB2 (15)

看贞观之治,与真实的历史

最近电视台正在播放一系列唐朝题材的电视连续剧,比如《贞观之治》、《贞观长歌》等,电视中的情节是很吸引人的,于是忍不住去查查资料,看看历史 究竟是怎么样发展过来的。在文件夹里找到了一本《上下五千年》,关于隋末唐初年这段时期,大概有七至八个章节的文字,不过感觉有些粗疏,因为属于普及读物而缺乏权威 性。于是又找了一本《剑桥中国史》的隋唐部分,这本书的重要观点均标明出处,具有一定的可查性。 剑桥中国史提出了另外一个观点,不同于旧《唐书》与《资治通鉴》,它引用了另一部唐早期史料《大唐创业起居注》,试图反驳广被大家接受的李家在建立王朝的过程中李世民起到巨大作用的这一观点。我们先看正史的观点: 按照新、旧《唐书》和司马光《资治通鉴》的传统 说法,李渊是一个碌碌无能之辈,而且暮气沉沉,胸无大志。相反地,他的 次子李世民(公元617 年时17 岁)倒被说成一位高超的军事领袖:有魄力, 有进取心,英明天聪。因此,后来成为唐代第二位皇帝(唐太宗)的李世民 在这些记载中就成了创建唐王朝的大功臣。 这是另外的观点: 《大唐创业起居注》的作者温大雅是太原府人,是唐王朝建立的目击者。 他的翔实记述着重指出,正是李渊本人策划了太原叛乱,也正是他的英明统 率使唐军在夺取隋都的战斗中取得了胜利。温大雅笔下的李渊不同于传统史...

最近电视台正在播放一系列唐朝题材的电视连续剧,比如《贞观之治》、《贞观长歌》等,电视中的情节是很吸引人的,于是忍不住去查查资料,看看历史 究竟是怎么样发展过来的。在文件夹里找到了一本《上下五千年》,关于隋末唐初年这段时期,大概有七至八个章节的文字,不过感觉有些粗疏,因为属于普及读物而缺乏权威 性。于是又找了一本《剑桥中国史》的隋唐部分,这本书的重要观点均标明出处,具有一定的可查性。

剑桥中国史提出了另外一个观点,不同于旧《唐书》与《资治通鉴》,它引用了另一部唐早期史料《大唐创业起居注》,试图反驳广被大家接受的李家在建立王朝的过程中李世民起到巨大作用的这一观点。我们先看正史的观点:

按照新、旧《唐书》和司马光《资治通鉴》的传统
说法,李渊是一个碌碌无能之辈,而且暮气沉沉,胸无大志。相反地,他的
次子李世民(公元617 年时17 岁)倒被说成一位高超的军事领袖:有魄力,
有进取心,英明天聪。因此,后来成为唐代第二位皇帝(唐太宗)的李世民
在这些记载中就成了创建唐王朝的大功臣。

这是另外的观点:

《大唐创业起居注》的作者温大雅是太原府人,是唐王朝建立的目击者。
他的翔实记述着重指出,正是李渊本人策划了太原叛乱,也正是他的英明统
率使唐军在夺取隋都的战斗中取得了胜利。温大雅笔下的李渊不同于传统史
书上的李渊;温大雅的李渊是一位勇敢的领袖、刚烈的对手和足智多谋的战
略家。根据《起居注》的说法,十几岁的李世民不仅在叛乱事件中只起到次
要作用,甚至他在王朝建立中的贡献也并不多于他的长兄,即后来成为太子
的李建成。

唐太宗李世民的确创造了一段有别以往的开明盛世,是为“贞观之治”,但我还是倾向于后一种观点,李渊历经两个朝代,封为唐国公,手握重兵,守敌一方,岂碌碌无能之辈所能至焉?剑桥中国史得出了下面的观点:

历史学家近年经过对正史中所记关于此事的材料重新加以研究后,得出
了新的结论:有些重要情况可能是在唐太宗统治时期因太宗本人的坚持而编
造出来的。根据其他材料,特别是根据从前被忽视的唐代初年的史料《大唐
创业起居注》,历史学家已经能够对唐朝创立史的传统说法中的某些偏见和
歪曲之处做出订正。①

不知道正史的记载成于哪一年,如果写得太离谱,可能还在世的高祖李渊及朝臣又如何能服呢?这些恐怕都很难解释。

电视剧更多的被看成一种娱乐资源,大多数人不会深究其真实性,即使对于这些历史题材。但同时也具有一种非常强大的隐形说教作用,它潜移默化的在大多数人头脑中形成了对某种事物的第一反应,即使这种知识映射来源于电视剧。电视剧在情结上的一定发挥,是可以理解的,不过还是应该尽可能的靠近史实,比如很基本的历史人物的年龄,恐怕很多时候是历史迁就于演员。

广泛的传播总是趋向于把好的变得更好,而把恶的变得更可恶,读史是为了省身明志,历史就是历史,如果是为了满足英雄崇拜情结,大可以去看电影。

Posted by Alex at 2:10 AM | Comments (0) | Edit | Taged: 历史 (1), 唐朝 (1)

UltraEdit 对UTF-8文件的自动处理

关于Unicode 编码,这里有篇文章 可以参考。Unicode是几种多字节编码格式的统称,其中使用广泛的有UTF-8与UTF-16,而通常人们说Unicode时,实际是在指UTF-16编码,UltraEdit 就是这样,为了避免混淆,下面都按照标准引用名字。  使用UltraEdit 打开一个UTF-8 编码的文件,然后按ctrl+h 进入16进制模式查看文件内码,你会发现文件已经被转换成UTF-16 编码,并添加了UTF-16 little endian 的BOM :FF  FE,UltraEdit 状态栏文件的尺寸也增加了不少。其实大可不必担心,可以回到正常模式继续编辑并保存,保存后的文件并没有改变编码格式,只是在编辑时使用UTF-16格式而已。...

关于Unicode 编码,这里有篇文章 可以参考。Unicode是几种多字节编码格式的统称,其中使用广泛的有UTF-8与UTF-16,而通常人们说Unicode时,实际是在指UTF-16编码,UltraEdit 就是这样,为了避免混淆,下面都按照标准引用名字。 

使用UltraEdit 打开一个UTF-8 编码的文件,然后按ctrl+h 进入16进制模式查看文件内码,你会发现文件已经被转换成UTF-16 编码,并添加了UTF-16 little endian 的BOM :FF  FE,UltraEdit 状态栏文件的尺寸也增加了不少。其实大可不必担心,可以回到正常模式继续编辑并保存,保存后的文件并没有改变编码格式,只是在编辑时使用UTF-16格式而已。

因此,如果通过UltraEdit打开文件查看BOM 来确定文件格式,并不是安全的。UltraEdit 下方状态栏则真实的显示了当前打开文件的实际编码格式,而不是当前编辑的编码格式。 对于一个普通Ascii 格式的文件,它显示为DOS 或者UNIX,对于一个包含有UTF-8编码字符的文件,它显示为U8-DOS 或者U8-UNIX,对于UTF-16编码的文件,它显示为U-DOS 或者U-UNIX。

我们知道,UTF-8 对于Ascii 字符的编码与原有的Ascii 编码一致,因此假如我们删除了一个UTF-8 DOS文件中所有Ascii 以外的字符,保存后再打开,UltraEdit 将显示为DOS(Ascii)。

如果我们不希望UltraEdit 在打开UTF-8 文件时自动转为UTF-16 格式编辑,我们可以修改配置。如下图,确保“自动检测 UTF-8文件”不被选中。

 UltraEdit configuration

需要注意的是,如果取消了这个选项,UltraEdit打开包含UTF-8编码的文件会产生乱码。

UltraEdit 在File-Convertions 菜单中提供了多种编码格式之间的转换,这将影响到保存的文件编码,转换后,在状态栏也能看到相应变化。在有些选项后标明有(Unicode Editing) 或者(ASCII Editing),这指定了编辑时显示用的编码,并不影响保存文件所用的编码,要区分开。

工具WinHex 可以用来查看文件16进制内码。

Posted by Alex at 1:02 AM | Comments (0) | Edit | Taged: UltraEdit (3), unicode (3), UTF-16 (1), utf-8 (3), 编码 (1)

在Perl 中如何按字节操作字符串

从版本5.6,Perl 内部开始支持Unicode编码,一些字符串操作函数,比如length、substr,默认基于字符操作,而不是bytes 操作。在Perl中,如果希望使substr() 函数基于bytes 操作怎么办, 在Oracle 8i数据库中有个对应的函数,叫做substrb(),在DB2 8.2中,字符串函数默认就是基于bytes 操作,并不识别字符编码。而对于perl,没有提供相应的函数,而是用了另一种方法,bytes 关键字,用法如下: use bytes; substr(); no bytes;...

从版本5.6,Perl 内部开始支持Unicode编码,一些字符串操作函数,比如length、substr,默认基于字符操作,而不是bytes 操作。在Perl中,如果希望使substr() 函数基于bytes 操作怎么办, 在Oracle 8i数据库中有个对应的函数,叫做substrb(),在DB2 8.2中,字符串函数默认就是基于bytes 操作,并不识别字符编码。而对于perl,没有提供相应的函数,而是用了另一种方法,bytes 关键字,用法如下:

use bytes;
substr();
no bytes;

更多信息,请参考Perl 文档。 

Posted by Alex at 6:31 PM | Comments (0) | Edit | Taged: perl (2), 字符 (1), 字节 (1)

Tag cloud 导致页面滚动迟缓

我一直使用Firefox 浏览器,IE的收藏夹里只有淘宝、北京移动以及网银几个不支持Firefox 的links。近日突然发现自己blog在IE中长页面的滚动非常迟缓(Firefox中正常),一跳一跳的,很不舒服,于是立刻想到了前阵子新加的功能:对于<pre>标签限制宽度和最大高度 ,为了兼容IE,在css中使用了ie hacks以及expression表达式,这可能会加重浏览器绘制工作量,从而导致页面滚动迟缓。经试验,并不是以上代码导致的,根源竟是页面底部的Tag cloud,如下图: 模板: <div id="tagcloud"><div class="inner"> <h3>Tags</h3> <MTTags> <a class="h<$MTTagRank$>" href="<$MTInclude...

我一直使用Firefox 浏览器,IE的收藏夹里只有淘宝、北京移动以及网银几个不支持Firefox 的links。近日突然发现自己blog在IE中长页面的滚动非常迟缓(Firefox中正常),一跳一跳的,很不舒服,于是立刻想到了前阵子新加的功能:对于<pre>标签限制宽度和最大高度 ,为了兼容IE,在css中使用了ie hacks以及expression表达式,这可能会加重浏览器绘制工作量,从而导致页面滚动迟缓。经试验,并不是以上代码导致的,根源竟是页面底部的Tag cloud,如下图:

Tag Could snapshot

模板:

  <div id="tagcloud"><div class="inner">
<h3>Tags</h3>
<MTTags>
<a class="h<$MTTagRank$>" href="<$MTInclude module="Tag URI"$>" title="<$MTTagCount$> entries"><$MTTagName$></a>  
</MTTags>
</div></div><!--tagcloud--> 
Style:
#tagcloud a {
text-decoration: none;
}
#tagcloud a.h1 {
font-size: 200%;
}
#tagcloud a.h2 {
font-size: 180%;
}
#tagcloud a.h3 {
font-size: 160%;
}
#tagcloud a.h4 {
font-size: 140%;
}
#tagcloud a.h5 {
font-size: 100%;
}
#tagcloud a.h6 {
font-size: 90%;
}
Tag 数量比较大,但对于产生此问题的原因还是不解,有人遇到吗?

Posted by Alex at 5:04 PM | Comments (0) | Edit | Taged: IE (3)

google 的热门搜索关键词

google 通过多种方式来提供热门搜索关键词 列表,除了提供当前热门关键词列表以外,还提供从2001年至今的归档 。可以按三种方式浏览,年度、按月、每周。其中年度与每周的列表仅提供英文关键词,而按月归档的列表则提供了不同国家区域的详细列表,其中包括中国。 这是中国2006年12月的热门关键词列表,对于每一个关键词还提供了一个简短的英文说明。 黄金甲 (a very hot movie) 武林外传 (a very hot TV...

google 通过多种方式来提供热门搜索关键词 列表,除了提供当前热门关键词列表以外,还提供从2001年至今的归档 。可以按三种方式浏览,年度、按月、每周。其中年度与每周的列表仅提供英文关键词,而按月归档的列表则提供了不同国家区域的详细列表,其中包括中国。

这是中国2006年12月的热门关键词列表,对于每一个关键词还提供了一个简短的英文说明。

  1. 黄金甲
    (a very hot movie)
  2. 武林外传
    (a very hot TV program)
  3. nba
    (NBA)
  4. 周笔畅
    (a very famous singer)
  5. 谁动了我的琴弦
    (a new song by a famous singer, Zhou Bichang)
  1. 卡巴斯基
    (anti-virus software)
  2. 跑跑卡丁车
    (on-line game)
  3. 狼爱上羊
    (a famous song)
  4. 招商银行
    (China Merchant Bank)
  5. 中国移动
    (China Mobile)
  1. 圣诞节
    (Christmas)
  2. 魔兽世界
    (on-line game)
  3. 基金
    (fund)
  4. 瑞星
    (anti-virus software or company)
  5. 火影忍者
    (cartoon)

关键词基金在11月份还未进入Top 10,可见年末这段时间基金在国内被追捧的程度,橘子就是在这股热潮中后知后觉的投资了基金,还记录了自己跌宕起伏的基金生活,我呢,还在观望中,现在指数太高,等待时机吧。 

 

Posted by Alex at 1:06 PM | Comments (1) | Edit | Taged: 关键词 (2)

google 的网站管理员工具

今天尝试了一下google的网站管理员工具 ,里面有不少有用的信息,包括google对你网站抓取过程中所遇到的错误,我就据此更改了我的robots.txt,并且设置了www.aiview.com 到aiview.com 的关联,今后google会把这两个域名视为同一个网页。我启用了增强型图片搜索,增强型图片搜索背后是google的又一个具有创意的工具Google Image Labeler 。google借助这个类似游戏的小应用让广大互联网用户来帮助他标记(label or tag) 索引的图片,进而提供更准确的图片搜索结果。...
今天尝试了一下google的网站管理员工具 ,里面有不少有用的信息,包括google对你网站抓取过程中所遇到的错误,我就据此更改了我的robots.txt,并且设置了www.aiview.com 到aiview.com 的关联,今后google会把这两个域名视为同一个网页。我启用了增强型图片搜索,增强型图片搜索背后是google的又一个具有创意的工具Google Image Labeler 。google借助这个类似游戏的小应用让广大互联网用户来帮助他标记(label or tag) 索引的图片,进而提供更准确的图片搜索结果。

Posted by Alex at 12:49 PM | Comments (0) | Edit

DreamHost 主机存在的安全隐患

Dreamhost 的空间已经用了个把月了(使用Fenng 的折扣代码购买 ),最欣赏的是它为用户提供登录Shell,在授权内可以运行绝大部分shell 命令,甚至允许添加cron job,让你在最大限度内保留自有主机的使用习惯。不过在带来灵活性的同时,如果使用不慎,风险也随之而来。下面是新建帐号系统默认建立的目录以及权限设置: [hostname]$ pwd /home/yourname [hostname]$ ls -l total 28 drwx--S---...

Dreamhost 的空间已经用了个把月了(使用Fenng折扣代码购买 ),最欣赏的是它为用户提供登录Shell,在授权内可以运行绝大部分shell 命令,甚至允许添加cron job,让你在最大限度内保留自有主机的使用习惯。不过在带来灵活性的同时,如果使用不慎,风险也随之而来。下面是新建帐号系统默认建立的目录以及权限设置:

[hostname]$ pwd
/home/yourname
[hostname]$ ls -l
total 28
drwx--S---   6 yourname groupname 4096 2006-12-27 04:29 Maildir
drwxr-x--x  33 yourname groupname 4096 2007-02-03 06:07 domain.com
drwxr-sr-x   3 root       root      4096 2006-12-26 15:50 logs

目录domain.com 是对应虚拟主机网站所属的根目录,当前的权限位是drwxr-x--x(751),网站如果希望被正常访问,所需的最小权限位是d--x--x--x(111)。而一般网站都有动态内容生成,比如使用cgi,那么作为运行此cgi 进程的用户则需要对相关目录和文件具有写权限,最小权限位是drwx--x--x(711)。

在深入讨论前,先回顾一下Unix 文件权限位的作用,如果你非常熟悉,请跳过。

每一个文件有10个标识位,第一位d代表目录,空(-)代表文件。其后9位分成三组,分别代表当前用户、同组用户、任何登录用户所对应的权限。r: 读权限,w: 写权限,x: 执行权限。这三种权限对于一个文件都很好理解,对于目录,如果拥有r读权限,可以列出目录下的文件,具有目录的w写权限和x执行权限,可以在目录中增加和删除文件。对于目录具有x执行权限,可以使用cd 命令进入此目录。

下面列出一些可能被误解的权限设置。 

例子一: 

drwx----wx /dir
-rwx------ /dir/1.txt

这种权限,虽然其他人无法列出目录dir 中的文件,也无法读取文件1.txt,但是如果已知文件名1.txt,依然可以删除文件,因为Unix 实际把目录也作为一个文件看待,目录实际保存了文件列表,对目录具有写权限就意味可以修改这个列表。

例子二:

drwx-----x /dir
drwx-----x /dir/dir2
-rwx---r-- /dir/dir2/1.txt

对于这种权限,其他人无法通过列目录方式获知文件路径/dir/dir2/1.txt ,但如果已知此路径,就可以读出文件内容。

安全漏洞 

默认的,Dreamhost 为你的home 目录设置如下权限:

[hostname]$ pwd
/home/yourname
[hostname]$ ls -ld .
drwxr-x--x  9 yourname groupname 4096 2007-02-03 06:00 .
 

这保证了任何本组以外的用户无法列出你的home 目录文件,但并不保证无法列出home 目录以下的子目录,这依赖于你的权限设置,而大多数用户都设置了一个非常宽松的权限。有关Dreamhost用户组的设置,下一个小节会讨论。

例子二就是本文讨论的目的,前面说过,对于网站所属的目录,为了保证正常浏览,对于所有目录都要求设置一个最小权限d--x--x--x(111),同时对于网站目录中的cgi 文件,我们通常设置为drwxr-xr-x(755),如果一个不怀好意者拥有一个与你相同主机上的shell 帐户,可以通过猜测或者其它途径获得你的敏感文件路径,然后使用以下命令轻松获得你的敏感信息,比如,人们通常把movable type 系统的数据连接信息保存在文件mt-config.cgi 中。

$ cat /home/yourname/yourdomain.com/mt/mt-config.cgi 

对于上面的安全问题,我有2种解决方法,一种是让人无法获知敏感文件的准确路径,但是这种方法非常具有局限性,即使实现,管理成本也很高。Dreamhost 已存在的一个安全漏洞使大部分未觉察的用户都暴露在此风险下。另一种方法是小心的配置敏感文件的权限,而对于非敏感文件则可以不作考虑。比如对于mt-config.cgi 文件,应该设置权限-rw-------(600),此文件虽然具有cgi 扩展名,不过仅仅是一个配置文件,只要保证以你的帐户身份运行的cgi 程序可以读取此文件即可。对于其它类似的敏感文件可根据情况进行类似权限设置。

更多的讨论

Dreamhost 允许用户建立多个shell 帐户,如果你打算同其他人share 你的host 空间,或者为你的朋友提供hosting,大概就需要为他们创建shell 登录帐户。默认的,这些新建的帐户将与你自己的帐户拥有相同的group,这个默认行为提供了一定的便利性,但也似乎无法改变,需要引起注意。应该根据情况,小心的为你自己的目录和文件设置组权限,并提醒与你share 主机的朋友做好自己的组权限设置(你们在同一个group 内),权限rwxrwx--- 黄底色的部分将影响到你们之间的关系。

如果确定了一个自己认为安全的权限位,并且适合大多数情况,则可以将此权限写入默认设置,使新建的目录和文件自动拥有此设置。这通过umask 命令 实现,并将其写入自己的profile 中。在Dreamhost 此文件位于 /home/yourname/.bash_profile, 并具有如下默认设定:

umask 002
此设置下,默认新建的目录具有权限drwxrwxr-x(775),文件具有权限-rw-rw-r--(664)。

Posted by Alex at 6:04 PM | Edit | Taged: Dreamhost (4), Shell (8), 安全 (1), 权限 (1)

无法覆盖css 中display: none 的问题

在客户端脚本中,我们经常使用对象的CSS 属性style.display 来控制对象在浏览器中的显示与隐藏,一般的习惯是这样写: document.getElementById("div").style.display = "none"; // Hide this div document.getElementById(”div").style.display = ""; // Show...

在客户端脚本中,我们经常使用对象的CSS 属性style.display 来控制对象在浏览器中的显示与隐藏,一般的习惯是这样写:

  document.getElementById("div").style.display = "none"; // Hide this div
document.getElementById(”div").style.display = ""; // Show the div again
不过我最近遇到一个问题,当已经在CSS文件中为这个对象静态设置了display: "none" 属性,那么上面第二行代码将不起作用,不会按我们的预想将对象显示出来。最后找到了一个解决方法,对于以上情况,以下代码可以实现预期的效果。
 document.getElementById(”div").style.display = "inline"; // Show the div again

display 属性 可以有以下取值,上面的inline 可以换成任何你需要的值。

  • block
  • none
  • inline (this is default)
  • inline-block
  • list-item
  • table-header-group
  • table-footer-group

题外参考:CSS属性Display与Visibility的不同, Ten CSS tricks you may not know

Posted by Alex at 2:06 PM | Comments (1) | Edit | Taged: css (3), Javascript (5)

Get rollable entry list in MT - postroll.js

Most of blogers have the recent entry list at the sidebar. Sometime it's difficult to...

Most of blogers have the recent entry list at the sidebar. Sometime it's difficult to balance spacing and convenience. People may want more entries in the list, but they may also want to see other feature area without rolling scrollbar too much. I wrote a Javascript postroll.js that make the entry list rollable as far as you expect.

How does it work? Download postroll.js to your web server path and include it in your web page that you need the feature. Then edit your tempate like below. The template code is a little thick but works.

<h2>最近更新|Recent Entries</h2>
<div id="recententry" class="module-content">
<ul id="recententry1">
<MTEntries lastn="5">
<li><$MTInclude module="Entry Link"$></li>
</MTEntries>
</ul>
<MTEntries offset="5" lastn="1">
<MTIfNonEmpty tag="EntryTitle"><$MTSetVar name="recententry2" value="1"$></MTIfNonEmpty>
</MTEntries>
<MTIf name="recententry2">
<ul id="recententry2">
<MTEntries offset="5" lastn="5">
<li><$MTInclude module="Entry Link"$></li>
</MTEntries>
</ul>
</MTIf>
<MTEntries offset="10" lastn="1">
<MTIfNonEmpty tag="EntryTitle"><$MTSetVar name="recententry3" value="1"$></MTIfNonEmpty>
</MTEntries>
<MTIf name="recententry3">
<ul id="recententry3">
<MTEntries offset="10" lastn="5">
<li><$MTInclude module="Entry Link"$></li>
</MTEntries>
</ul>
</MTIf>
<MTEntries offset="15" lastn="1">
<MTIfNonEmpty tag="EntryTitle"><$MTSetVar name="recententry4" value="1"$></MTIfNonEmpty>
</MTEntries>
<MTIf name="recententry4">
<ul id="recententry4">
<MTEntries offset="15" lastn="5">
<li><$MTInclude module="Entry Link"$></li>
</MTEntries>
</ul>
</MTIf>
<MTEntries offset="20" lastn="1">
<MTIfNonEmpty tag="EntryTitle"><$MTSetVar name="recententry5" value="1"$></MTIfNonEmpty>
</MTEntries>
<MTIf name="recententry5">
<ul id="recententry5">
<MTEntries offset="20" lastn="5">
<li><$MTInclude module="Entry Link"$></li>
</MTEntries>
</ul>
</MTIf>
<label id="recententrybar1"></label><label id="recententrybar2"></label>
<!--end #recententry-->
</div> 
 The emphasis must be followed in your code, otherwise need to configure yours in postroll.js.
// Configuration
Postroll = {
box: ["recententry"],
bar1: ["recententrybar1"],
bar2: ["recententrybar2"],
bar1_txt: "&nbsp;&nbsp;&laquo;&nbsp;&nbsp;&nbsp;&nbsp;",
bar2_txt: "&nbsp;&nbsp;&nbsp;&nbsp;&raquo;&nbsp;&nbsp;",
bar1_lnk_title: "Previous 5 entries",
bar2_lnk_title: "Next 5 entries"
};

Then have this style in the css. I don't use script to initial the style because this method is quicker for the page first loading. There won't be a long entry list at a moment then hided by the script. I use script to initial the text link for rolling entries and control the entry roll after all stuffs were loaded.

#recententry2,
#recententry3,
#recententry4,
#recententry5 {
display: none;
} 

There's more action you need to take if want it works perfect! Create a file name as ie_onload.js, and have below only line. About ie_onload.js here's an explanation.

 try{Postroll.run()}catch(e){} 

This script is able to serve multi-area in one page. That case you should have the configuration like below. It could be 3 groups or more.

 // Configuration
Postroll = {
box: ["recententry", "othertag"],
bar1: ["recententrybar1", "othertagbar1"],
bar2: ["recententrybar2", "othertagbar2"]
bar1_txt: "&nbsp;&nbsp;&laquo;&nbsp;&nbsp;&nbsp;&nbsp;",
bar2_txt: "&nbsp;&nbsp;&nbsp;&nbsp;&raquo;&nbsp;&nbsp;",
bar1_lnk_title: "Previous 5 entries",
bar2_lnk_title: "Next 5 entries"
};

Update 2007-02-14 

I found that there's one post missed on each 5 posts in the postroll list. The point is that I had  wrong offset value in MTEntries tag. I've updated the template code above from offset="6" to offset="5" and also for the value of 11, 16 and 21.

Posted by Alex at 1:44 AM | Comments (0) | Edit | Taged: Javascript (5), MT (25)

Alex's picture

my email address in picture

搜索|Search

订阅更新|Subscribe to Feed

按月归档|By Month

2009
07
2008
11
10
07
05
04
03
02
01
2007
12
10
07
06
05
04
03
02
01
2006
12
11
10
09
08
07
06
05
04
03
02
01
2005
11
10
09
08
07
04
03
2004
12
11
10
09
08
07
06
05
04
03
02
01
2003
12
10
09
08
06
2002
09
08
04
03
02
2001
12
09
07
06
05

我读|My Books

友情链接|links

我的链接|My Links

推荐站点|favorite sites

我的朋友|My Friends

Creative Commons License
This blog is licensed under a Creative Commons License.
Movable Type 4 Logo