cisco交换机与H3C交换机生成树互通问题

No comments August 16th, 2010

1. H3C交换机不开生成树情况

cisco交换机配置相应VLAN并用TRUNK级联H3C交换机,级连接口配置:

spanning-tree bpdufilter disable

2. H3C交换机开生成树情况

cisco交换机配置相应VLAN并用TRUNK级联H3C交换机,H3C交换机配置如下:

全局配置

stp instance 0 root primary
 stp instance 1 root primary
 stp instance 2 root primary
 stp pathcost-standard dot1t
 stp enable
stp region-configuration
 region-name mstp
 revision-level 10
 instance 1 vlan 11
 instance 2 vlan 12
 active region-configuration
 stp config-digest-snooping

接口配置

stp config-digest-snooping

中华卫士防火墙加载配置

No comments August 16th, 2010

中华卫士防火墙如果配置中更改了当前登录接口的IP地址,需要在加载配置后再用新IP地址登录,再次加载配置。否则下次设置重启配置将不会生效。

误删cisco路由器用户

No comments July 29th, 2010

cisco路由器出厂默认配置的用户名、口令都是“cisco”,由于嫌每次都要输入用户、口令麻烦就随手用“no username cisco”给删除了,这下麻烦来了,console连接路由器还是提示要输入用户名、密码,因为根本没有用户了,所以输入什么都错误。刚好vty还没配置,telnet也没戏。web就更别想了。

想想只有一条路可以走,就是进rommon模式更改配置寄存器的值,以忽略nvrom空配置启动。具体做法如下:

  1.    开机时按<Ctrl+Break>使进入ROM监控状态

2.     按o 命令读取配置寄存器的原始值

> o         一般值为0×2102

3.     作如下设置,使忽略NVRAM引导

>o/r0x**4*                                 Cisco2500系列命令

rommon 1 >confreg 0x**4*               Cisco2600、1600系列命令

一般正常值为0×2102,*为任何数字如ox2142,可别直接用*呀

4.     重新启动路由器

>I                               Cisco2500系列命令

rommon 2 >reset                Cisco2600、1600系列命令

这儿不能直接关电重启!切记!!

5.     在“Setup”模式,对所有问题回答No

6.     进入特权模式

Router>enable

7.    恢复原始配置寄存器值

Router#configure terminal

Router(config)#config-register 0×2102

8.想做什么就做什么吧,完了别忘记保存。

另:“configure memory”等效于“copy startup-config running-config”

         “era nvram”用于清除已保存配置,做完第七步直接“write memory”与之等效。

        “enable secret 5 xxxx”不能直接配置,会报错。要用“enable secret 0 xxxx”系统会自动转换成“secret 5”

最后,是哪条命令使路由器必须要输入用户名才能登录呢?认真看几遍原始配置也没找到,但把原始配置清空就没有了。有知道的请指教!

 

CSS Hack

No comments June 30th, 2010

各浏览器CSS hack兼容表:

IE6 IE7 IE8 Firefox Chrome Safari
!important Y Y
_ Y
* Y Y
*+ Y
\9 Y Y Y
\0 Y
nth-of-type(1) Y Y

代码示例:

#test{
color:red; /* 所有浏览器都支持 */
color:red !important;/* Firefox、IE7支持 */
_color:red; /* IE6支持 */
*color:red; /* IE6、IE7支持 */
*+color:red; /* IE7支持 */
color:red\9; /* IE6、IE7、IE8支持 */
color:red\0; /* IE8支持 */
}

body:nth-of-type(1) p{color:red;} /* Chrome、Safari支持 */

整体测试代码示例:

.test{
color:#000000;
color:#0000FF\0;
[color:#00FF00;
*color:#FFFF00;
_color:#FF0000;
}

其他说明:

1、如果你的页面对IE7兼容没有问题,又不想大量修改现有代码,同时又能在IE8中正常使用,微软声称,开发商仅需要在目前兼容IE7的网站上添 加一行代码即可解决问题,此代码如下:
<meta http-equiv=”x-ua-compatible” content=”ie=7″ />

2、body:nth-of-type(1) 如果这样写,表示全局查找body,将会对应第一个<body>。

3、还有其他写法,比如:
*html #test{}或者 *+html #test{}

4、*+html 对IE7的hack 必须保证HTML顶部有如下声明:

http://www.w3.org/TR/html4/loose.dtd

5、顺序:Firefox、IE8、IE7、IE6依次排列。

小知识:什么是CSS hack?

由于不同的浏览器,比如IE6、IE7、IE8、Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到我们所 需要的页面效果。

这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。

这个针对不同的浏览器写不同的CSS code的过程,就叫CSS hack。

CSS浏览器兼容(IE6.0、IE7.0 与 FireFox)的一些总结

No comments June 30th, 2010

浏览器的不兼容,大家肯定都是深恶痛绝的,往往我们只是去做修补,却忘了更重要的事情,那就是追溯根源,避免类似的不兼容再次出现。

1.文字本身的大小不兼容。同样是font-size:14px的宋体文字,在不同浏览器下占的空间是不一样的,ie下实际占高16px,下留白3px,ff下实际占高17px,上留白1px,下留白3px,opera下就更不一样了。解决方案:给文字设定 line-height 。确保所有文字都有默认的 line-height 值。这点很重要,在高度上我们不能容忍1px 的差异。

2.ff下容器高度限定,即容器定义了height之后,容器边框的外形就确定了,不会被内容撑大,而ie下是会被内容撑大,高度限定失效。所以不要轻易给容器定义height。

3.还讨论内容撑破容器问题,横向上的。如果float 容器未定义宽度,ff下内容会尽可能撑开容器宽度,ie下则会优先考虑内容折行。故,内容可能撑破的浮动容器需要定义width。

小实验:有兴趣大家可以看看这段实验。在不同浏览器下分别测试以下各项代码。

a.<div style=”border:1px solid red;height:10px”></div> b.<div style=”border:1px solid red;width:10px”></div>

c.<div style=”border:1px solid red;float:left”></div> d.<div style=”border:1px solid red;overflow:hidden”></div>

上面的代码在不同浏览器中是不一样的,实验起源于对小height 值div 的运用,<div style=”height:10px;overflow:hidden”></div>,小height 值要配合overflow:hidden一起使用。实验好玩而已,想说明的是,浏览器对容器的边界解释是大不相同的,容器内容的影响结果各不相同。

4.浮动的清除,ff下不清除浮动是不行的。

纠正大家一个误区,遇到不兼容就说ff烂是不对的,其实更多时候是ie的奇怪表现让我们无所适从。以下列出ie6的种种劣迹。

5.最被痛恨的,double-margin bug。ie6下给浮动容器定义margin-left 或者margin-right 实际效果是数值的2倍。解决方案,给浮动容器定义display:inline。

6.mirrormargin bug,当外层元素内有float元素时,外层元素如定义margin-top:14px,将自动生成margin-bottom:14px。padding也会出现类似问题,都是ie6下的特产,该类bug 出现的情况较为复杂,远不只这一种出现条件,还没系统整理。解决方案:外层元素设定border 或 设定float。

引申:ff 和ie 下对容器的margin-bottom,padding-bottom的解释有时不一致,似乎与之相关。

7.吞吃现象,限于篇幅,我就不展开了。还是ie6,上下两个div,上面的div设置背景,却发现下面没有设置背景的div 也有了背景,这就是吞吃现象。对应上面的背景吞吃现象,还有滚动下边框缺失的现象。解决方案:使用zoom:1。这个zoom好象是专门为解决ie6 bug而生的。

8.注释也能产生bug~~~“多出来的一只猪。”这是前人总结这个bug使用的文案,ie6的这个bug 下,大家会在页面看到猪字出现两遍,重复的内容量因注释的多少而变。解决方案:用“<!–[if !IE]> picRotate start <![endif]–>”方法写注释。

9.<li/>里加 float <div/>,这是一个典型的,棘手的兼容问题,希望引起大家正视 ,给li 不同的属性会有不同的解释效果,ff下的解释稍可理解,ie6下的解释会让你摸不着头脑,由于问题的复杂性,将另起一文专门讨论该问题。在《ul使用心得》一文里有相关成果,却没给出问题解决的过程。

10.使用了“float:left;display:inline”的ul的奇怪表现。可以看出这句css是针对ie6下的double margin bug 而加上的display:inline,这也是我的css体系里的重要一环,在《ul使用心得》一文中有相关阐述。而这句css用在ul上会让你痛苦不堪。点到为止,这里不能多说哈。

11.img下的留白,大家看这段代码有啥问题:

<div>
<img src=”” mce_src=”” />
</div>

把div的border打开,你发现图片底部不是紧贴着容器底部的,是img后面的空白字符造成,要消除必须这样写

<div>
<img src=”” mce_src=”” /></div>

后面两个标签要紧挨着。ie7下这个bug 依然存在。解决方案:给img设定 display:block。

12.失去line-height。<div style=”line-height:20px”><img />文字</div>,很遗憾,在ie6下单行文字 line-height 效果消失了。。。,原因是<img />这个inline-block元素和inline元素写在一起了。解决方案:让img 和文字都 float起来。

引申:大家知道img 的align 有 text-top,middle,absmiddle啊什么的,你可以尝试去调整img 和文字让他们在ie和ff下能一致,你会发现怎么调都不会让你满意。索性让img 和文字都 float起来,用margin 调整。

13.链接的hover状态。a:hover img{width:300px} 我们想让鼠标hover时,链接里包含的图片宽度变化,可惜在ie6下无效,ie7、ff下有效。

14.非链接的hover状态。div:hover{} 这样的样式ie6是不认的,在ie7、ff下才有效果。

15.block化的a链接,其内套absolute层,absolute层内放置img,ie下,鼠标点击img不会有链接效果,ff、op下正常。

想不出来了,以后想到再加吧。上面的诸多问题如果你掌握了其中奥妙,90%的不兼容问题不需要另起css hack的。

16.无法彻底清除的float。如果让ul下的li具有了float属性,如何clear浮动的li呢?<ul><li class=”c”>< ></ul> 或者 <ul><li><div>class=”c”></div>< ></ul> 或者 <ul><li>< ><div>class=”c”></div></ul> 或者 <ul><li>< ></ul><div>class=”c”></div> 或者上述的组合?这个问题,我无法给出解答。下面有个例子与此相关

<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>

<style type=text/css>
.c{clear:both;overflow:hidden;+overflow:visible}
.bd{border:1px solid red}

ul.ex{list-style:none;}
ul.ex li{float:left;border:1px solid green;}
</style>
<ul>
<li>sfsdfsfdf< >
<li>sfsdfsfdf< >
</ul>
<div></div>
<div style=margin-top:19px>sfsdfsfdf</div>

请在ie下 测试,仅仅将 margin-top:19px 改为margin-top:20px 你发现什么了?要素:doctype必须有,ie6、ie7下margin-top:19px还好好的,margin-top:20px 就出问题了,无法解释。。。大家还可以将 clear 层换不同的位置测试。

解决方案:给ul 属性zoom:1 (给li 加zoom:1 没用)

引申:clear层应该单独使用。也许你为了节省代码把clear属性直接放到下面的一个内容层,这样有问题,不仅仅是ff和op下失去margin效果,ie下某些margin值也会失效
<div style=”background:red;float:left;”>dd</div>
<div style=”clear:both;margin-top:18px;background:green”>ff</div>

17.ie下overflow:hidden对其下的绝对层position:absolute或者相对层position:relative无效。解决方案:给overflow:hidden加position:relative或者position:absolute。另,ie6支持overflow-x或者overflow-y的特性,ie7、ff不支持。

18.ie6下严重的bug,float元素如没定义宽度,内部如有div定义了height或zoom:1,这个div就会占满一整行,即使你给了宽度。float元素如果作为布局用或复杂的容器,都要给个宽度的。

19.ie6下的bug,绝对定位的div下包含相对定位的div,如果给内层相对定位的div高度height具体值,内层相对层将具有100%的width值,外层绝对层将被撑大。解决方案给内层相对层float属性。

20.ie6下的bug,<head></head>内有<base target=”_blank”/>的情况下,position:relative层下的float层内文字无法选中。这个bug迫使我修公用样式库。

21.终于来了个ff的缺点。width:100%这个东西在ie里用很方便,会向上逐层搜索width值,忽视浮动层的影响,ff下搜索至浮动层结束,如此,只能给中间的所有浮动层加width:100%才行,累啊。opera这点倒学乖了跟了ie。

用JavaScript的eval获取Ajax返回的JavaScript代码

No comments June 18th, 2010

一直都用拆分字符串的方法来处理AJAX返回的数据,今天baidu了以下发现原来可以用eval()这个小东西。
比如:eval(http_request.responseText);

eval()函数

JavaScript有许多小窍门来使编程更加容易。
其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。
举个小例子:
//执行表达式
var the_unevaled_answer = “2 + 3″;
var the_evaled_answer = eval(“2 + 3″);
alert(“the un-evaled answer is ” + the_unevaled_answer + ” and the evaled answer is ” + the_evaled_answer);

如果你运行这段eval程序, 你将会看到在JavaScript里字符串”2 + 3″实际上被执行了。
所以当你把the_evaled_answer的值设成 eval(“2 + 3″)时, JavaScript将会明白并把2和3的和返回给the_evaled_answer。
这个看起来似乎有点傻,其实可以做出很有趣的事。比如使用eval你可以根据用户的输入直接创建函数。
这可以使程序根据时间或用户输入的不同而使程序本身发生变化,通过举一反三,你可以获得惊人的效果。
在实际中,eval很少被用到,但也许你见过有人使用eval来获取难以索引的对象。

文档对象模型(DOM)的问题之一是:有时你要获取你要求的对象简直就是痛苦。
例如,这里有一个函数询问用户要变换哪个图象:变换哪个图象你可以用下面这个函数:

function swapOne() {
var the_image = prompt(“change parrot or cheese”,”");
var the_image_object;

if (the_image == “parrot”) {
the_image_object = window.document.parrot;
} else {
the_image_object = window.document.cheese;
}

the_image_object.src = “ant.gif”;
}

连同这些image标记:

[img src="http://a.com/a.gif" name="parrot"]
[img src="http://b.com/b.gif" name="cheese"]
[code]
请注意象这样的几行语句:
[code]
the_image_object = window.document.parrot;

它把一个图象对象敷给了一个变量。虽然看起来有点儿奇怪,它在语法上却毫无问题。
但当你有100个而不是两个图象时怎么办?你只好写上一大堆的 if-then-else语句,要是能象这样就好了:

function swapTwo() {
var the_image = prompt("change parrot or cheese","");
window.document.the_image.src = "ant.gif";
}

不幸的是, JavaScript将会寻找名字叫 the_image而不是你所希望的"cheese"或者"parrot"的图象,
于是你得到了错误信息:”没听说过一个名为the_image的对象”。

还好,eval能够帮你得到你想要的对象。

function simpleSwap() {
var the_image = prompt("change parrot or cheese","");
var the_image_name = "window.document." + the_image;
var the_image_object = eval(the_image_name);
the_image_object.src = "ant.gif";
}

如果用户在提示框里填入"parrot",在第二行里创建了一个字符串即window.document.parrot. 然后包含了eval的第三
行意思是: "给我对象window.document.parrot" - 也就是你要的那个图象对象。一旦你获取了这个图象对象,你可以把
它的src属性设为ant.gif. 有点害怕?用不着。其实这相当有用,人们也经常使用它。
我们常常在Javascript中间到Eval这个函数,
有些人觉得这个函数很奇怪,可以把一些字符串变的功能很强大
在我们需要将普通的字符串转变成具体的对象的时候,就会用到这个函数

eval 函数对作为数字表达式的一个字符串进行求值,其语法为:

eval(expr)

此处 expr 是一个被求值的字符串参数。如果该字符串是一个表达式,eval 求该表达式的值;如果该参数代表一个或多个 JavaScript 语句,那么 eval 执行这些语句。eval 函数可以用来把一个日期从一种格式(总是字符串)转换为数值表达式或数字

Linux常用命令

2 comments June 10th, 2010

locate 查找文件
ps aux 查看进程
pwd 查看当前路径
grep $1 * -R -i | grep -v svn 在目录下查找$1这个字符串,排除svn文件

VI命令:
:w 保存而不退出
:u 恢复
dd 删除当前行
d12345 删除后面所有的内容
:set nu 显示行号
VI配置
vi ~/.vimrc

实现以root登陆Fedora12

1 comment May 19th, 2010

最近装了Fedora12,结果默认是不允许root账号进行GUI登陆的,这样以来很多根目录下的文件时不允许操作的,百度了一下,下面是解决方式。
首先以用户账号进入终端,允许root账号登陆:
$ su
$ vi /etc/pam.d/gdm
删除其中的一行 auth required pam_succeed_if.souser != root quiet
:wq保存并退出。
$ vi /etc/pam.d/gdm-passwaord
删除其中的一行 auth required pam_succeed_if.souser != root quiet
:wq保存并退出。
这样就可以使用root进行GUI登陆了。

还可以修改/etc/gdm/contom.conf文件,增加下面几行,启用root自动登陆
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=user_name

Fedora 12的网络服务不能自动启动,同样需要修改
chkconfig –level 35 network on
如果使用GUI界面去修改网络配置,貌似那个修改程序有BUG,子网掩码改完了再打开就变成了192.168.1.1
同样,可以在文件中直接修改。
文件位置:/etc/sysconfig/network-scripts/ifcfg-eth0
还可以:
开机以root身份登陆系统,登陆模式是图形界面,提示无法验证用户,很纳闷,密码也没错啊,输入了几次依然提示“无法验证用户”。只好用一个普通用户登陆了。
打开终端 输入 su ,再输入 root 密码,成功转到 root用户。设置开机启动模式为文本模式,重新启动到文本模式下,输入 root和密码,登陆成功,看来在文本模式下是可以用root登陆的。
不能以root身份登陆到图形模式,可能是出于安全考虑。虽然只能用普通用户登陆到图形界面,但是在图形界面模式下可以更改root的密码。选择系统–>管理–>根口令,弹出对更改root密码的对话框。

顺便说说输入法,系统默认是装了拼音输入法的,选择中文进入可以用ctrl+space切换出来,可英文环境却不能,需要在System->Preferences->Input Method里钩选Enable input method feature,这样就可以了。如果系统默认没装拼音输入法,可以用下面的命令安装:
yum install scim
yum install scim-pinyin

Linux (Fedro12) 下的FireFox忽然打不开了(Could not find compatible GRE between version 1.9.1.4 and 1.9.1.4.)

No comments May 19th, 2010

刚用上Linux(Fedro12),问题一堆,今天系统还自动更新了好多东西,可能就是因为这个,弄个什么东西之后重启一下机器,FireFox打不开了,告诉我“正在启动 FireFox Web”,一会儿就没了,到终端执行/usr/lib/firefox-3.5.4/firefox,给我这么个提示:Could not find compatible GRE between version 1.9.1.4 and 1.9.1.4.

这下好,上网搜搜终于从redhat.com上找到解决方法:

This error can be resolved using steps provided below.

1. Find your Gecko Runtime Environment (GRE) version number by running this command:
# /usr/bin/xulrunner --gre-version
1.9.1.9

2. Edit your Firefox /usr/lib/firefox/application.ini file as follows:
# gedit /usr/lib/firefox-3.5.4/application.ini

3. Find this block:
Gecko
MinVersion=1.9.1.4
MaxVersion=1.9.1.4

4. Change the above text to the following (using the version GRE number from the xulrunner command executed above):
Gecko
MinVersion=1.9.1.9
MaxVersion=1.9.1.9

// 就是把这里的版本号改成你第一步查到的版本号

5. Save the file and restart Firefox
Firefox will be able to detect the correct Gecko Runtime Environment (GRE) after this .

原来是这个笨蛋xulrunner自己升级了,却不管改一下FireFox的配置文件。难道就是为了标榜自己比较那什么?

PS: XULRunner是一个单独的GRE安装包,可用于启动多种如同Firefox和Thunderbird一样丰富的XUL+XPCOM应用程序。它提供了安装、升级和反安装这些应用程序的机制。XULRunner还将提供libxul,这个解决方案允许把Mozilla技术嵌入到其它项目和产品中。

MySQL之join, left join

No comments May 14th, 2010

join: 左右两个表都必须有数据匹配到。

left join: 以左边表为准,只要左边的表有数据匹配到就行,右边表没数据以null补充。

这两天遇到一个问题就是因为没想到右边那个表的数据可能为空造成的,一开始用的是join,查出来的结果有时会少几条,一检查少的数据,发现是因为join后面的表里没有相应的记录。这时候才想到left join,换了之后结果是我想要的了。