开源,自由,平等,共享,包容,沟通

2008年9月19日星期五

标准的 XHTML 1.0 strict 网页代码模板(UTF-8)

 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title></title>
<link rel="stylesheet" type="text/css" href="" />
<script type="text/javascript" src=""></script>
</head><body>

</body></html>
 

2008年9月18日星期四

window.onload 同时触发多个函数

 
当页面加载完毕后会触发一个 onload 事件,假设此时想执行一个函数 aFunction,只需要将其绑定到这个事件上就可以了:

window.onload=aFunction;

但当要触发两个函数 aFunction 和 bFunction 时:

window.onload=aFunction;
window.onload=bFunction;

以上代码只能触发后者,前者会被后者取代。

解决这个问题时可以通过编写一个匿名函数来解决:

window.onload=function(){
aFunction();
bFunction();
}

这样,无论在页面加载时需要触发多少函数,都可以在其匿名函数里指定,并且可以安排触发顺序。
 

通过 FTP 协议的 URL 直接登录 FTP 服务器

 
拥有帐号和密码,我们通常使用 FTP 客户端软件(FlashFXP、CuteFTP 等)登录 FTP 服务器,以取得相关的资源。
或者直接在 Web 浏览器上输入 FTP 服务器地址,再输入帐号和密码登录。

当然,为了更简单,我们尝试使用 FTP 协议的 URL 直接登录服务器,格式如下:

ftp://用户名:密码@服务器:端口

例如:ftp://testuser:testpwd@127.0.0.1:21。
 

让 <a /> 标签的外部链接通过 W3C XHTML 1.0 Strict 标准验证

 
通常情况下,我们要打开一个外部链接(新开窗口),往往使用如下代码:

<a href="" target="_blank"></a>

然而把它放在 W3C XHTML 1.0 Strict 标准下却发现无法通过验证。

原来,在严格的 W3C DTD 下,<a /> 标签的 target 属性是不被官方所推荐的,使用 Strict 模式将视 target 属性无效,我们只有利用 JavaScript 来变通实现。
真不知道 W3C 专家们是怎么想的,或许“易用性、友好性”成为他们主张的关键,因为老外觉得不经过用户同意,没有明确提示就打开一个新窗口是不礼貌的。

我们姑且不管这样的概念是否真正合理,先看看解决办法:

  rel 属性:规定当前文档与目标 URL 之间的关系,即用来说明链接和包含此链接页面的关系,以及链接打开的目标。
  我们将使用 rel="external" 作为 <a /> 标签的特性,那么可以得到如下代码:

<a href="" rel="external"></a>

  这是符合 W3C XHTML 1.0 Strict 标准的方法,当然还需要以个 JavaScript 方法作配合:

function external(){
var anchors=document.getElementsByTagName("a");
for(var i=0;i<anchors.length;i++){
if(anchors[i].getAttribute("rel")=="external"){anchors[i].target="_blank";}
}
}

  在页面下载完成时自动加载:

window.onload=function(){
external();
};

可以把以上两段 JavaScript 代码存储在 external.js 文件里,然后通过外部链接方法调用:

<script type="text/javascript" src="external.js"></script>
 

让 <pre /> 标签中的内容自动换行并符合 W3C 标准(多浏览器支持)

 
默认情况下,<pre /> 标签中的内容若超出范围不会自动换行,这样无论在显示或打印都会出现麻烦。

下面提供符合 W3C 标准并支持多浏览器的 CSS 样式代码:

pre{
white-space:pre-wrap; /* css-3 */
white-space:-moz-pre-wrap; /* Mozilla, since 1999 */
white-space:-pre-wrap; /* Opera 4-6 */
white-space:-o-pre-wrap; /* Opera 7 */
word-wrap:break-word; /* Internet Explorer 5.5+ */
}


更多内容:http://www.w3.org/TR/css3-text/#white-space
 

给 <div /> 加上滚动条

 
给 <div /> 加上滚动条时,最好指定其高度和宽度,当内容超过其范围时,滚动条会自己出现。

<div style="weight:200px;height:200px;overflow:scroll"></div>
 

让表单元素通过 W3C 校验

 
对含有表单的网页进行 XHTML 1.0 校验时,发现无论如何也无法通过验证,网上检索了一下相关资料,发现有如下规则:

XHTML 1.0 Strict 中表单元素要放在<div></div>、<p></p>… 里面。

看下面的代码:

<form method="post" action="">
<p>
<label>帐号 <input name="account" type="text" /></label>
<label>密码 <input name="password" type="password" /></label>
<input type="submit" value="登录" />
</p>
</form>

另外,如果 form 中包含 fieldset 元素,它可不必包含在 div、p 等元素中,但未包含在 fieldset 元素中的表单元素,必须包含在 div、p 中。

<form method="post" action="">
<fieldset>
<legend>帐户</legend>
<label>帐号 <input name="account" type="text" /></label>
<label>密码 <input name="password" type="password" /></label>
</fieldset>
<p><input type="submit" value="登录" /></p>
</form>
 

盒模型 div 布局的垂直居中(W3C 推荐方法)

 
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title></title>
<style type="text/css">
body{margin:0;padding:0}
div{margin:-200px auto auto -275px;position:absolute;top:50%;left:50%;width:550px;height:400px;background:#ff6600;text-align:center;line-height:400px}
</style>
</head><body>
<div>盒模型 div 布局的垂直居中(W3C 推荐方法)</div>
</body></html>
 

符合 W3C 标准的细线表格

 
随着 W3C 标准的流行,表格标签对于我们来说已经不太常用,但 W3C 标准并没有抛弃它,这必然有它存在的合理性。

依我看来,表格最大的用途就在于数据内容的表现,确实省去了不少麻烦。

下面是表格标记的 XHTML 代码:

<table><tr><td></td></tr></table>

常用的修饰上述表格为细线表格的 CSS2 样式代码如下:

table{border:1px solid #000;border-width:1px 0 0 1px;margin:2px 0 2px 0;text-align:center;border-collapse:collapse}
td,th{border:1px solid #000;border-width:0 1px 1px 0;margin:2px 0 2px 0;text-align:left}
th{text-align:center;font-weight:600;font-size:12px;background-color:#F4F4F4}

后来发现有更简单的:

table,td,th{border:1px #000 solid;border-collapse:collapse}

注意:以上代码均通过了 W3C 验证(strict),符合标准。
 

IIS 下防止 .mdb 数据库爆库的方法

 
对于采用 Access 数据库的网站来说,爆库是绝对危险!

1. 对 Access 数据库文件名的设置

  在任何 Access 数据库文件名的前面加上一个 # 号,这样做在一定程度上避免数据库被下载。
  其原因是浏览器在解析 URL 的时候,遇见 # 会以为是锚,这样浏览器就会在页面中搜索锚点,而不是指向一个文件。
  不过有些下载工具还是会尝试去连接这个 .mdb 数据库文件,它会将 # 号使用 URL 编码变为 %23,这样依然可以下载 .mdb 文件。

2. 对 IIS 服务器进行设置

  此方法当然是要对你的网站服务器具有控制权了,如果租用的服务器就没法使用该办法了。
  使用该方法,就算是知道了 .mdb 数据库的路径也完全没有办法下载。

  首先,选中你的站点,右键打开“站点属性”对话框,选择“主目录”标签,点击“配置”开打“应用程序配置”对话框。
  然后,在“应用程序扩展”中添加一项,“可执行文件”为:C:\WINDOWS\system32\inetsrv\asp.dll,“动作”为“限制”,输入任意字符串(只要不是 get 或 post)都行,如输入 haha。
  最后,一路“确认”即可。
 

搜索引擎中的召回率(查全率)与精度(查准率)

 
召回率(Recall Rate)(查全率):是检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。
精 度(Precision)(查准率):是检索出的相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率。

对于一个检索系统来讲,召回率和精度不可能两全其美:召回率高时,精度低,精度高时,召回率低。
所以常常用 11 种召回率下 11 种精度的平均值来衡量一个检索系统的精度。
对于搜索引擎系统来讲,因为没有一个搜索引擎系统能够搜集到所有的 Web 网页,所以召回率很难计算。
目前的搜索引擎系统都非常关心精度。

影响一个搜索引擎系统的性能有很多因素,最主要的是信息检索模型,包括文档和查询的表示方法、评价文档和用户查询相关性的匹配策略、查询结果的排序方法和用户进行相关度反馈的机制。

从一个大规模数据集合中检索文档的时,可把文档分成四组:

  系统检索到的相关文档(A
  系统检索到的不相关文档(B
  相关但是系统没有检索到的文档(C
  不相关也没有被系统检索到的文档(D


相关不相关
检索到AB
未检索到CD

直观的说,一个好的检索系统检索到的相关文档越多越好,不相关文档越少越好。

召回率 R:用检索到相关文档数作为分子,所有相关文档总数作为分母,即 R=A/(A+C)。
精 度 P:用检索到相关文档数作为分子,所有检索到的文档总数作为分母,即 P=A/(A+B)。

举例:一个数据库有 500 个文档,其中有 50 个文档符合定义的问题;系统检索到 75 个文档,但其中只有 45 个文档符合定义。

  召回率:R=45/50=90%。
  精 度:P=45/75=60%。

上例中:系统检索是比较有效的,召回率为 90%;但是结果有很大的噪音,有近一半的检索结果是不相关。

研究表明:在不牺牲精度的情况下,获得一个高召回率是很困难的;召回率越高,精度下降的很快,而且这种趋势不是线性的。
 

框架、模型与模式

 
最近看了很多有关模型、架构等等之类的概念问题,这些术语在业界的限定和标准也不太明确,就最近的网上检索和查阅的情况,总结如下:

框架

  可以理解为流程或处理过程,是一个为解决某一问题而定义的处理流程。
  常见的 ASP.NET 框架、Rails 框架等也可以理解为这样的概念,它们解决的是如何搭建 Web 应用的问题,都规定了一系列的处理流程,从获得用户请求到把请求定向到适当的类,从如何调用自定义函数处理问题到把处理结果发送给用户等等。

模型

  可以理解为描述问题的方式或工具,它区别于“数学建模”、“软件建模”概念。
  匹配的如对象模型、关系模型等,它们是一些规定,定义了如何去描述一系列概念,同时也规定了若干操作,以及这些概念之间如何进行交互。
  模型是一种工具,是一种描述问题的方式,它帮助人们记录和分析问题,如 UML 模型等。

模式

  使用模型建模得到的东西就是模式,它是一个具体的实例,是一个固定下来的模型。
  常见的 Schema 就是模式,而 Pattern 是模型。Schema 是用来描述概念和概念之间关系的,而 Pattern 更多的用于描述概念与实例之间的关系。
  当然,还有些被称为模式,但实际上既不是 Schema 也不是 Pattern。
 

解决 IIS 6.0 中 .rmvb 格式文件无法在线播放和下载的方法

 
问题原因

  IIS 早期版本包含通配符 MIME 映射,允许 IIS 处理任何文件而无需考虑扩展名。
  IIS 6.0 不包含该通配符 MIME 映射,不能处理在 IIS 元数据库中的 MimeMap 节点以外定义的任何类型的扩展名。

解决方案

  警告:如果不正确地编辑元数据库,可能会导致严重问题,您可能需要重新安装使用元数据库的所有产品。
  Microsoft 不能保证能够解决由于您错误地编辑元数据库而导致的问题,编辑元数据库需要您自担风险。

  注意:每次编辑元数据库前都要进行备份。

  要为特定扩展名定义 MIME 类型,请执行下列步骤:
  01. 在管理工具窗口中双击 Internet 信息服务(IIS)管理器,打开 IIS 管理控制台(MMC),右键单击本地计算机名称,然后单击属性。
  02. 单击 MIME 类型,单击新建。
  03. 在扩展名框中,键入所需的文件扩展名(例如:.rmvb)。
  04. 在 MIME 类型框中,键入“application/octet-stream”。
  05. 应用新设置。现在,IIS 可以处理带有所添加的扩展名的文件。在此示例中,IIS 现在可以处理带有 .rmvb 扩展名的文件。
  06. 重启 IIS WEB 服务,设置既可生效。
 

2008年9月17日星期三

演绎作品

 
演绎作品,是指经改编、翻译、注释、整理的作品是作者在已有作品的基础上经过创造性的劳动而派生出来的作品,其著作权归改编、翻译、注释、整理人所有。

《中华人民共和国著作权法》第十二条规定:“改编、翻译、注释、整理已有作品而产生的作品,其著作权由改编、翻译、注释、整理人享有,但行使著作权时不得侵犯原作品的著作权。”

该条明确了演绎作品的作者,对原作品进行再创作时,应事先征得原作者的同意,并依照规定支付报酬,同时原作者仍享有署名权,再创作人不得对原作品进行歪曲、篡改等,如果演绎作品的创作人是对已超过保护期的作品进行再创作,可以不征得原作者的同意,同时可以不支付报酬,但原作者的署名权不得侵犯,作品的不受歪曲、篡改权不得侵犯。

演绎作品的作者,在进行作品的改编、翻译、注释、整理时,其他人也可以对该作品进行改编、翻译、注释、整理,各演绎作品的作者对自己创作的演绎作品分别享有著作权。

演绎作品是以另一作品为基础创作的作品,但不是精确的逐字的复制。

如何准确而全面地理解演绎作品,长期以来一直是很多法律刊物的文章以及很多争论的主题。

总的来说,一部翻译作品从一种语言到另外一种或者一部书的一个电影版本就是演绎作品的例子。
 

2008年9月15日星期一

Windows 的批处理实现同目录下补丁程序自动完全安装

 
在计算机群管理的实际应用中,我们通常会下载所有的升级补丁,然后在计算机上逐个安装,这样免去了无法上网或在线升级耗时的问题。

不过一旦计算机数量很多,逐个升级将是十分繁琐和可怕的事情。

Windows 的批处理功能将使得任务更加简单,操作步骤如下:

 01. 找一个大容量的 U 盘(如 2GB),格式化后建立 WinXP\、Win2K\、Win2003\ 三个目录。
 02. 将不同类型的升级补丁程序分别存放在这三个目录下。
 03. 将“附件”里的程序代码拷贝到文本文件中,以 ASCII 码或不带文件头的 UTF-8 编码(没有 BOM)进行存储,文件名为“Update.cmd”。
 04. 分别在这三个目录下建立批处理程序 Update.cmd 文件的拷贝。
 05. 升级时,只需要插上 U 盘,根据不同系统运行相关目录下的 Update.cmd 程序即可。
 06. 批处理会自动逐个安装升级程序,直至全部完成。

当然,也可以按需要刻成光盘,同时升级多个计算机。

需要注意的是,该批处理程序只会自动安装与它在同一目录下的 Windows 升级补丁程序,而其它的程序则不会起作用。

附件:(把以下内容保存为 Update.cmd 文件)

@echo off
setlocal ENABLEDELAYEDEXPANSION
set /a n=0
set /a all=0
for %%i in (*.exe) do (
set /a all=!all!+1
)
for %%i in (*.exe) do (
set /a n=!n!+1
@echo+ !n!/!all!、%%i
%%i /passive /norestart
)
VER|find "5.0">NUL
IF NOT ERRORLEVEL 1 @echo Win2K
:: win2K's auto restart not tested
VER|find "5.1">NUL
IF NOT ERRORLEVEL 1 shutdown -r -t 0
VER|find "5.2">NUL
IF NOT ERRORLEVEL 1 shutdown /r /t 0
pause
 

2008年9月3日星期三

Apache HTTP 服务器的禁止列目录和设置主页功能

 
Apache 服务器被成功安装后,默认情况下,它会以 index.html 文件为站点或目录的首页文件,并且若是以目录形式访问却没有找到该首页文件,它将会以类似于 FTP 文件列表的方式列出访问目录下的全部文件资源。

因此,系统自动列目录和设置首页文件是我们在安装与配置站点时首先要解决的问题,可以找到 Apache 安装根目录下的 conf\httpd.conf 配置文件并作修改。

  在 conf\httpd.conf 文件中找到“Options Indexes FollowSymLinks”,去掉中间的“Indexes”,变为“Options FollowSymLinks”,这样可以禁止 Apache 服务器列目录。



  在 conf\httpd.conf 文件中找到“DirectoryIndex index.html”,修改为“DirectoryIndex index.php”,这样以目录形式访问站点时,Apache 服务器会寻找 index.php 来执行和显示。



  当然,也可以在“Directory”后面加任意个首页文件(以空格分隔),Apache 服务器会依次寻找第一个存在的首页文件并执行或显示。

最后,保存 Apache 配置文件 conf\httpd.conf,重新启动 Apache 服务即可。