Skip to content


li标签的间距问题


body{font-size:12px;margin:0}
ul{list-style:none;margin:0;padding:0;}
ul li{background:green;height:20px;width:120px;vertical-align: bottom;}
ul li a{color:#fff;padding:0 0 0 10px;}

1.解决li在IE5下产生空白行距的方法:如果li定义了宽度,那么需要在li里面再定义vertical-align: bottom;
2.宽度最好不要定义在UL,定义在LI或者UL外层的DIV里面
3. 书写LI的最佳方式,li里面要书写高度和宽度,以及vertical-align: bottom;(for ie5/win bug),或者在ul外面加上一层div,并定义宽度,那么在li里面不用定义宽度和vertical-align: bottom;,也显示正常(IE5下不会产生空白行距),不过高度还是要定义一下的。

Posted in HTML/XHTML/CSS, 技术.


lsof常用技巧

1) lsof abc.txt 显示开启文件abc.txt的进程
2) lsof -i :22 知道22端口现在运行什么程序
3) lsof -c nsd 显示nsd进程现在打开的文件
4) lsof -g gid 显示归属gid的进程情况
5) lsof +d /usr/local/ 显示/usr/local目录下被进程开启的文件
6) lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
7) lsof -d 4 显示使用fd为4的进程
8) lsof -i [i] 用以显示符合条件的进程情况
语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 –> IPv4 or IPv6
protocol –> TCP or UDP
hostname –> Internet host name
hostaddr –> IPv4位置
service –> /etc/service中的 service name (可以不只一个)
port –> 端口号 (可以不只一个)
例子: TCP:25 – TCP and port 25
@1.2.3.4 – Internet IPv4 host address 1.2.3.4
[email protected]:ftp – TCP protocol host:ohaha.ks.edu.tw service name:ftp
9) lsof -n 不将IP转换为hostname,缺省是不加上-n参数
例子: lsof -i [email protected]:ftp -n
10) lsof -p 12 看进程号为12的进程打开了哪些文件
11) lsof +|-r [t] 控制lsof不断重复执行,缺省是15s刷新
-r,lsof会永远不断的执行,直到收到中断信号
+r,lsof会一直执行,直到没有档案被显示
例子:不断查看目前ftp连接的情况:lsof -i [email protected]:ftp -r
12) lsof -s 列出打开文件的大小,如果没有大小,则留下空白
13) lsof -u username 以UID,列出打开的文件

Posted in Linux 命令, 技术.

Tagged with .


mysql5.0 上出现1054错误

Error : Unknown column ‘j.cid’ in ‘on clause’
Errno : 1054
select j.*,jf.jid,jf.pid,jf.man,m.cid as comid,m.company from wane_comjobs j,wane_comjobs_fields jf left join wane_member_comfields m on (j.cid=m.cid) where j.jid=jf.jid

语句在4.0上可以跑,看文档在5.1上也能跑,在5.0上跑时需将要连接的表放在右边。


SELECT j. * , jf.jid, jf.pid, jf.man, m.cid AS comid, m.company
FROM wane_comjobs j,wane_comjobs_fields jf
LEFT JOIN wane_member_comfields m ON ( j.cid = m.cid )
WHERE j.jid = jf.jid

Posted in Mysql, 技术.


[转]关于select … where 的小技巧

大家在写sql 语句的时候, 如果是 select .. where 类型的语句, 有注意到条件的前后顺序吗?我今天做个小实验。
比如查询地址里 包含“海口市”及“振兴路” 两个关键字的数据, 一般时候可能会用
select * from dm_addr where addr like ‘%海口市%’ and addr like ‘%振兴路%’ 的形式,但其实这种查询效率不高,原因在于条件的前后顺序。以下是测试结果

mysql> select count(1) from dm_addr where addr like ‘%振兴路%’ and addr like ‘%海口市%’;
+———-+
| count(1) |
+———-+
| 96 |
+———-+
1 row in set (0.82 sec)

mysql> select count(1) from dm_addr where addr like ‘%海口市%’ and addr like ‘%振兴路%’;
+———-+
| count(1) |
+———-+
| 96 |
+———-+
1 row in set (0.91 sec)

我做了很多次查询
where addr like ‘%海口市%’ and addr like ‘%振兴路%’ 总是比 where addr like ‘%振兴路%’ and addr like ‘%海口市%’
慢,原因是查询是先处理第一条件,然后在处理第二个条件,先查询出所有 包含“海口市”的记录,再在这些记录中查询包含”振兴路” 的记录。 对于地址情况, 包含“海口市”的记录可能大于”振兴路” 的记录,我做测试的表有2万条数据, 已经有大概0.1s的差别。如果碰到大数据,这个差别会更大。
按以上的分析结果, 我们写SQL语句的时候, 对于select …where … 类型的语句,应该把查询结果范围小的条件放在前面,查询范围大的条件放在后面,这样会提高效率。

对于OR的情况:
测试如下:

mysql> select count(1) from dm_addr where addr like ‘%海口市%’ or addr like ‘%振兴路%’;
+———-+
| count(1) |
+———-+
| 39168 |
+———-+
1 row in set (0.84 sec)
mysql> select count(1) from dm_addr where addr like ‘%振兴路%’ or addr like ‘%海口市%’;
+———-+
| count(1) |
+———-+
| 39168 |
+———-+
1 row in set (0.95 sec)

OR语句的处理过程是这样, 对于每一条地址, 逐个分析条件,如果符合第一个条件,就不做第二条件的判断,那么我们应该把容易做判断的条件放在前面, 比如查询地址里 包含“海口市”或“振兴路” 个关键字的数据,按地址一般排法,XX市应该在XX路前。所以如果用第一种方式,那就效率高,判断有海口市就可以确认这行地址有效了。 所以在写OR类型的条件时, 应该把容易判断的条件写在前面。

再做一个NOT … OR .. NOT … 测试,查询不包含 海口市 或者不包含 振兴路 的数据
mysql> select count(1) from dm_addr where addr not like ‘%海口市%’ or addr not like ‘%振兴路%’;
+———-+
| count(1) |
+———-+
| 38752 |
+———-+
1 row in set (0.92 sec)

mysql> select count(1) from dm_addr where addr not like ‘%振兴路%’ or addr not like ‘%海口市%’;
+———-+
| count(1) |
+———-+
| 38752 |
+———-+
1 row in set (0.86 sec)

因为每条数据都有海口市, 所以对于第一个查询,判断第一个条件都失败了, 都需要判断第二个。
对于第二个查询, 只要判断第一个条件为真就可以确定这个记录, 不需要判断第一个条件,
所以第二个查询效率高过第一个。

结论:对于select … where … 类型的语句。
对于OR条件, 需要把命中率高的条件放在前面。
对于AND条件,需要把条件限制范围小的条件放在前面。
希望这些实验能提高phper 的程序效率。以上测试是对于mysql 5.0 win 做的。好象记得ORACLE刚好相反, 是先判断最后的条件。

Posted in Mysql, 技术.


[转]在mysql 里实现查询汉字的拼音首字母

php 里查询汉字的拼音首字母已经有很多参考的代码了。
现在给出在mysql 里实现的, 测试环境是mysql-5.0.27-win32

1、建立拼音首字母资料表

DROP TABLE IF EXISTS `pyk`;
CREATE TABLE `pyk` (
`PY` varchar(1) ,
`HZ1` int ,
`HZ2` int
) ;

INSERT INTO `pyk` (`PY`,`HZ1`,`HZ2`) VALUES
(‘A’,-20319,-20284),
(‘B’,-20283,-19776),
(‘C’,-19775,-19219),
(‘D’,-19218,-18711),
(‘E’,-18710,-18527),
(‘F’,-18526,-18240),
(‘G’,-18239,-17923),
(‘I’,-17922,-17418),
(‘J’,-17417,-16475),
(‘K’,-16474,-16213),
(‘L’,-16212,-15641),
(‘M’,-15640,-15166),
(‘N’,-15165,-14923),
(‘O’,-14922,-14915),
(‘P’,-14914,-14631),
(‘Q’,-14630,-14150),
(‘R’,-14149,-14091),
(‘S’,-14090,-13319),
(‘V’,-13318,-12839),
(‘W’,-12838,-12557),
(‘X’,-12556,-11848),
(‘Y’,-11847,-11056),
(‘Z’,-11055,-10247);

2、建立mysql 函数

DROP FUNCTION IF EXISTS hzcode;

delimiter //

CREATE FUNCTION hzcode (s CHAR(255)) RETURNS char
BEGIN
DECLARE hz_code int;
DECLARE hz_py char;
SET hz_code = ord(substring(s,1,1))*256+ord(substring(s,2,1))-65536 ;
select py into hz_py from pyk where hz_code>=pyk.hz1 and hz_code<=pyk .hz2; RETURN hz_py; END // delimiter ;

3、先测试一下
mysql> select hzcode(‘南海龙王’);
+——————–+
| hzcode(‘南海龙王’) |
+——————–+
| N |
+——————–+
1 row in set (0.00 sec)

4、建立个测试表

DROP TABLE IF EXISTS `f1`;
create table f1 (
name varchar(30),
pykey varchar(1)
);

insert into f1(name) values
(‘张三’),
(‘李四’),
(‘王五’),
(‘赵六’),
(‘钱七’);

5、测试

mysql> select * from f1;
+——+——-+
| name | pykey |
+——+——-+
| 张三 | NULL |
| 李四 | NULL |
| 王五 | NULL |
| 赵六 | NULL |
| 钱七 | NULL |
+——+——-+
5 rows in set (0.00 sec)

mysql> update f1 set pykey = hzcode(name);
Query OK, 5 rows affected (0.05 sec)
Rows matched: 5 Changed: 5 Warnings: 0

mysql> select * from f1;
+——+——-+
| name | pykey |
+——+——-+
| 张三 | Z |
| 李四 | L |
| 王五 | W |
| 赵六 | Z |
| 钱七 | Q |
+——+——-+
5 rows in set (0.00 sec)

这样就很方便地在MYSQL里查询汉字的首字母了。 类似地也可以直接在MYSQL得到汉字拼音。 不过需要拼音表,函数写法也不一样。

Posted in Mysql, 技术.


[转]关于web216安全色

web安全色,又叫做网页安全色或者网络安全色。其实色彩和安全本没有关系,但是如果网页设计师做出来的图形用户看不到最佳的效果,那么对设计师来说,工作就不太安全了。也许“安全”就是这个意思吧。

大家都直到的是,web安全色是历史遗留问题。在计算机刚刚开始设计生产的年代,不同厂商、国家生产的产品都有不通的规范和标准,因为没有网络,所以也就不涉及到兼容的问题。那时候的机型泛滥,不通的机型也必须搭配不同的系统软件。后来促使计算机生产标准统一的,大概又两个主要因素。一个是计算机的普及,硬件和软件的兼容流通;再一个是互联网的产生,计算机要联在一起,当然需要共同的协议和标准。在这样的背景下,一些计算机生产标准被淘汰,一些标准重新开发。不同的标准趋于接近甚至统一。到了今天,我们常见的计算机就是PC和MAC。前者是以英特尔和微软等软硬件厂商为代表,后者主要的产品供应商是苹果公司。目前也有其它的厂商小规模的生产其它标准的主机,如惠普和IBM等,产品大都以服务器为主,不属于互联网的终端。

我们把目光还是折回当年。不同的终端标准,作为主要输出设备的显示器,它的等级和种类是不同的,能够显示出的色彩也就不同。另外,不同的操作系统的色彩系统也不同。这样就导致用A终端做出来的网页色彩,用B终端就看不到。好在几乎所有的显示设备和操作系统都能够正确显示其中216种色彩,那么这些色彩就是网页上的安全色。

win和mac的色彩系统都是由256中色彩组成,如果再仔细研究,就能找到其中共同的216中色彩,就是web安全色了。

web216安全色并不是没有规律的巧合。无论是哪个厂家生产的系统和显示设备,都要遵循数字色彩的显示规律,这就是RGB数字色彩显示模式。自然界的色彩种类是无穷尽的,但是计算机的只能有限、离散的显示色彩。

关于RGB色彩模式这里就不展开说明了,只要知道,在该模式下的色彩,都由R(红)、G(绿)、B(蓝)三种基本色彩混合而成。每重基本色彩根据发光强弱而分成若干级别,称为色阶。色阶越多,RGB色彩空间所包含的色彩也就越多。我们常用的24位真彩色模式下,各个基本色彩的色阶为256(28),则R、G、B混合得到的色彩数目为256×256×256=16777216=224。这也是目前主流显示器能显示的最大色彩数目。

过去的终端也是用RGB的模式显示色彩,只是达不到24位的色彩数目,多数只能显示256种色彩(有写朋友对256色比较迷信,认为是固定的色彩,非也;也有人认为web安全色是256,原因就再这里)。那么是哪256种色彩呢?这就不一定了。因为256不是某个数值的3次方能够得到的,而是介于63(216)和73(343)之间,因此,在选择256种色彩的时候,就有两种办法:第一,RGB各分6个色阶,这样有216种色彩,再另外选择40种色彩凑成256色;第二,RGB各分7个色阶,这样有343种色彩,再去掉87种色彩。比较一下,可以看出,还是第一种方法更加简便直接。因此广为采用。256种色彩中余下的40种色彩不同的厂商采取了不同的选择方式。而216种色彩却是相同方式选择的。

很明显,这216色是24位色彩空间的子集。我们用三个数字连在一起表到24位RGB色彩,那么十进制是255,255,255的形式,十六进制就是FFFFFF的形式。前面说了216色每个基色是6个色阶,如果将256个色阶均分,就是0,51,102,153,204,255这六个数字,换算成十六进制即:00,33,66,99,CC,FF,因此216色就是将这六个数字进行任意排列组合的到的。

因此,web安全色并非偶然,这是由必然的规律做出的选择。

Posted in 其它, 网站建设.


一个table ui

下午参照lukew的ui做了个table
http://www.lukew.com/portfolio/web_applications/img/welligent_page.gif

本来想实现类似phpmyadmin的显示样式,可以当前行高亮并可以做标记,不过没找到很好的实现方法。
hover目前支持ie7和firefox

点击查看table ui





table ui





List
ID Name Date Operation
1 afffffsafdasdfasdasdgasdgasdg 2007-1-26 saffff
2 2007-1-26 link
3 c 2007-1-26 wqr
4 d 2007-1-26 wqr



Posted in JavaScript/DOM/XML, 技术.


如何看网站知道是运行在windows还是linux下

使用通过文件名index.php、INDEX.php来区分,windows是不区分大小写的。

Posted in 其它, 文档理论.


cvs 关键字列表

来自http://man.chinaunix.net/develop/cvsdoc_zh/

这是关键字列表:

$Author$
检入该版本的用户登录名。

$CVSHeader$
标准的头部(类似去掉 CVS 根的 $Header$)。包括 rcs 文件的全路径、版本号、日期(UTC)、作者、状态、加锁人(如果有锁)。在使用 cvs 中文件通常不用加锁。
注意,该关键字是新加到 cvs 的,假如旧的文件中有 $CVSHeader$ 并有其他意义,会带来一些问题。可以在 CVSROOT/config 中用 KeywordExpand=eCVSHeader 来排除此关键字。参阅 Configuring keyword expansion。

$Date$
该版本被检入的日期与时间(UTC)。

$Header$
标准的 header 包括 rcs 文件的全路径、版本号、日期(UTC)、作者、状态、加锁人(如果有锁)。 在使用 cvs 中文件通常不用加锁。

$Id$
除了 rcs 文件不包括路径,其余和 $Header$ 相同。

$Name$
检出此文件所用的标签名。该关键字只在检出时显式加上标签时扩展。比如,运行 cvs co -r first 命令时,关键字扩展为 `Name: first’。

$Locker$
锁定版本的用户登录名(如果没有加锁此项为空,一般就如此,除非使用 cvs admin -l 加锁)。

$Log$
日志信息在提交时提供,前面是一个 header 包括 rcs 文件名、版本号、作者、日期(UTC)。已有的日志信息不会被替换。相反,新日志信息将插在 $Log:…$之后。默认,每一新行前面使用同样的 $Log$ 关键字前的字符串, 除非在 CVSROOT/config 里面设置 MaxCommentLeaderLength。
例如,文件文件包含:

/* Here is what people have been up to:
*
* $Log: frob.c,v $
* Revision 1.1 1997/01/03 14:23:51 joe
* Add the superfrobnicate option
*
*/

新增的行扩展 $Log$ 关键字后前面也会带有 ` * ‘ 字符。与以前版本的 cvs 和 rcs不同,rcs 文件中的不再使用 comment leader。 $Log$ 关键字将会在源文件中累积日志纪录。有些原因可能会造成问题。

如果 $Log$ 关键字的前缀超出 MaxCommentLeaderLength 长度, CVS 将跳过关键字扩展,除非在 CVSROOT/config 中设置 UseArchiveCommentLeader,并且有 `comment leader’ 设置在 RCS archive 文件,使得 comment leader 替代使用。为了了解更多关于 RCS archive 中设置 comment leader,参阅 admin. 了解更多默认的 $Log$ 替换配置,参阅 config.

参阅 Log keyword.

$RCSfile$
不带路径的 RCS 文件名。

$Revision$
该文件的修订版本号。

$Source$
RCS 文件的完整路径。

$State$
赋予版本的状态。可以通过使用 cvs admin -s 命令设置状态—参阅 admin options。

Local keyword
CVSROOT/config 文件中的 LocalKeyword 选项可以被用作其他关键字的别名: $Id$, $Header$, or $CVSHeader$。例如,在 CVSROOT/config 中包含 LocalKeyword=MYBSD=CVSHeader 这样一行,带有 $MYBSD$ 的文件会像 $CVSHeader$ 一样被扩展。如果 src/frob.c 文件包含这个关键字,像下面这样:
/*
* $MYBSD: src/frob.c,v 1.1 2003/05/04 09:27:45 john Exp $
*/

许多仓库使用 “local keyword” 这类特性。 cvs 的一个旧补丁提供 LocalKeyword 特性,它们使用称为“custom tag”或“local tag”特性的 tag= 选项。它被用于它们称为 tagexpand= 选项。在 cvs 中另一个选项为 KeywordExpand。参阅 Configuring keyword expansion。

知名的项目中有这些例子: $FreeBSD$, $NetBSD$, $OpenBSD$, $XFree86$, $Xorg$.

使用它的优点在于可以使用自己的版本信息而不破坏上面版本(它们可能使用不同的 local keyword 或标准关键字)。使得 bug 报告可以更恰当地识别第三方的错误源,以及减少导入新版本时产生的冲突数。

除 local keyword 之外所有的关键字都可以在 CVSROOT/config 文件中用 KeywordExpand 选项停用—参阅 Configuring keyword expansion 获得详细信息。

Posted in Others, 技术.


table 的dom结构

一般而言,DOM结构准确地反映了HTML文档所包含的内容,也就是说,每个HTML标记表现为一个标记节点(tag node),每个文本项内容表现为一个文本项节点(text node)。这种表现形式一般称为WYSIWYG,即所见即所得。但是,

标记是一个例外情况。当有
标记时,我们可以设想它另外包含一对标记。来看看下面的一段代码:


  
  
  
  
This is row 1, cell 1This is row 1, cell 2
This is row 2, cell 1This is row 2, cell 2
This is row 3, cell 1This is row 3, cell 2

  在分析它的DOM结构前,我们要为这段代码添加上一对标记:

  


  
        中间代码略
  
  


dom

Posted in Ajax, JavaScript/DOM/XML, 技术.