<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[多海@1983N.com]]></title>
  <subtitle type="html"><![CDATA[飞舞的小场子。]]></subtitle>
  <id>http://www.1983n.com.cn/</id> 
  <link rel="alternate" type="text/html" href="http://www.1983n.com.cn/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.1983n.com.cn/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.4.1022">PJBlog2</generator> 
  <updated>2008-03-19T15:41:14+08:00</updated> 

  <entry>
	  <title type="html"><![CDATA[CSS制作VISTA风格工具条]]></title>
	  <author>
		 <name>DuoHai</name>
		 <uri>http://www.1983n.com.cn/</uri>
		 <email>DuoHai@126.Com</email>
	  </author>
	  <category term="" scheme="http://www.1983n.com.cn/default.asp?cateID=6" label="技术交流" /> 
	  <updated>2008-03-19T15:41:14+08:00</updated>
	  <published>2008-03-19T15:41:14+08:00</published>
		  <summary type="html"><![CDATA[<img src="http://www.1983n.com.cn/attachments/month_0803/m2008319154033.gif" border="0" alt=""/><br/>预览地址：<a target="_blank" href="http://www.1983n.com.cn/Code/13/">http://www.1983n.com.cn/Code/13/</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1983n.com.cn/default.asp?id=64" /> 
	  <id>http://www.1983n.com.cn/default.asp?id=64</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[精妙SQL语句，基础，提升，技巧]]></title>
	  <author>
		 <name>DuoHai</name>
		 <uri>http://www.1983n.com.cn/</uri>
		 <email>DuoHai@126.Com</email>
	  </author>
	  <category term="" scheme="http://www.1983n.com.cn/default.asp?cateID=6" label="技术交流" /> 
	  <updated>2008-03-14T17:10:18+08:00</updated>
	  <published>2008-03-14T17:10:18+08:00</published>
		  <summary type="html"><![CDATA[一、基础<br/><br/>1、说明：创建数据库<br/>Cr&#101;ate DATABASE database-name<br/>2、说明：删除数据库<br/>dro&#112; database dbname<br/>3、说明：备份sql server<br/>--- 创建 备份数据的 device<br/>USE master<br/>EXEC sp_addumpdevice &#39;disk&#39;, &#39;testBack&#39;, &#39;c:\mssql7backup\MyNwind_1.dat&#39;<br/>--- 开始 备份<br/>BACKUP DATABASE pubs TO testBack<br/>4、说明：创建新表<br/>cr&#101;ate table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)<br/>根据已有的表创建新表：<br/>A：cr&#101;ate table tab_new like tab_old (使用旧表创建新表)<br/>B：cr&#101;ate table tab_new as sel&#101;ct col1,col2… from tab_old definition only<br/>5、说明：删除新表<br/>dro&#112; table tabname<br/>6、说明：增加一个列<br/>Alt&#101;r table tabname add column col type<br/>注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。<br/>7、说明：添加主键： Alt&#101;r table tabname add primary key(col)<br/>说明：删除主键： Alt&#101;r table tabname dro&#112; primary key(col)<br/>8、说明：创建索引：cr&#101;ate [unique] index idxname on tabname(col….)<br/>删除索引：dro&#112; index idxname<br/>注：索引是不可更改的，想更改必须删除重新建。<br/>9、说明：创建视图：cr&#101;ate view viewname as sel&#101;ct statement<br/>删除视图：dro&#112; view viewname<br/>10、说明：几个简单的基本的sql语句<br/>选择：sel&#101;ct * from table1 wh&#101;re 范围<br/>插入：ins&#101;rt into table1(field1,field2) values(value1,value2)<br/>删除：del&#101;te from table1 wh&#101;re 范围<br/>更新：up&#100;ate table1 set field1=value1 wh&#101;re 范围<br/>查找：sel&#101;ct * from table1 wh&#101;re field1 like ’%value1%’ ---like的语法很精妙，查资料!<br/>排序：sel&#101;ct * from table1 o&#114;der by field1,field2 [desc]<br/>总数：sel&#101;ct count as totalcount from table1<br/>求和：sel&#101;ct sum(field1) as sumvalue from table1<br/>平均：sel&#101;ct avg(field1) as avgvalue from table1<br/>最大：sel&#101;ct max(field1) as maxvalue from table1<br/>最小：sel&#101;ct min(field1) as minvalue from table1<br/>11、说明：几个高级查询运算词<br/>A： UNION 运算符<br/>UNION 运算符通过组合其他两个结果表（例如 TABLE1 和 TABLE2）并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时（即 UNION ALL），不消除重复行。两种情况下，派生表的每一行不是来自 TABLE1 就是来自 TABLE2。<br/>B： EXCEPT 运算符<br/>EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL)，不消除重复行。<br/>C： INTERSECT 运算符<br/>INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL)，不消除重复行。<br/>注：使用运算词的几个查询结果行必须是一致的。<br/>12、说明：使用外连接<br/>A、left outer join：<br/>左外连接（左连接）：结果集几包括连接表的匹配行，也包括左连接表的所有行。<br/>SQL: sel&#101;ct a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c<br/>B：right outer join:<br/>右外连接(右连接)：结果集既包括连接表的匹配连接行，也包括右连接表的所有行。<br/>C：full outer join：<br/>全外连接：不仅包括符号连接表的匹配行，还包括两个连接表中的所有记录。<br/><br/>二、提升<br/><br/>1、说明：复制表(只复制结构,源表名：a 新表名：b) (Access可用)<br/>法一：sel&#101;ct * into b from a wh&#101;re 1&lt;&gt;1<br/>法二：sel&#101;ct top 0 * into b from a<br/><br/>2、说明：拷贝表(拷贝数据,源表名：a 目标表名：b) (Access可用)<br/>ins&#101;rt into b(a, b, c) sel&#101;ct d,e,f from b;<br/><br/>3、说明：跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)<br/>ins&#101;rt into b(a, b, c) sel&#101;ct d,e,f from b in ‘具体数据库’ wh&#101;re 条件<br/>例子：..from b in &#39;&#34;&amp;Server.MapPath(&#34;.&#34;)&amp;&#34;\data.mdb&#34; &amp;&#34;&#39; wh&#101;re..<br/><br/>4、说明：子查询(表名1：a 表名2：b)<br/>sel&#101;ct a,b,c from a wh&#101;re a IN (sel&#101;ct d from b ) 或者: sel&#101;ct a,b,c from a wh&#101;re a IN (1,2,3)<br/><br/>5、说明：显示文章、提交人和最后回复时间<br/>sel&#101;ct a.title,a.username,b.adddate from table a,(sel&#101;ct max(adddate) adddate from table wh&#101;re table.title=a.title) b<br/><br/>6、说明：外连接查询(表名1：a 表名2：b)<br/>sel&#101;ct a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c<br/><br/>7、说明：在线视图查询(表名1：a )<br/>sel&#101;ct * from (Sel&#101;ct a,b,c FROM a) T wh&#101;re t.a &gt; 1;<br/><br/>8、说明：between的用法,between限制查询数据范围时包括了边界值,not between不包括<br/>sel&#101;ct * from table1 wh&#101;re time between time1 and time2<br/>sel&#101;ct a,b,c, from table1 wh&#101;re a not between 数值1 and 数值2<br/><br/>9、说明：in 的使用方法<br/>sel&#101;ct * from table1 wh&#101;re a [not] in (‘值1’,’值2’,’值4’,’值6’)<br/><br/>10、说明：两张关联表，删除主表中已经在副表中没有的信息<br/>del&#101;te from table1 wh&#101;re not exists ( sel&#101;ct * from table2 wh&#101;re table1.field1=table2.field1 )<br/><br/>11、说明：四表联查问题：<br/>sel&#101;ct * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d wh&#101;re .....<br/><br/>12、说明：日程安排提前五分钟提醒<br/>SQL: sel&#101;ct * from 日程安排 wh&#101;re datediff(&#39;minute&#39;,f开始时间,getdate())&gt;5<br/><br/>13、说明：一条sql 语句搞定数据库分页<br/>sel&#101;ct top 10 b.* from (sel&#101;ct top 20 主键字段,排序字段 from 表名 o&#114;der by 排序字段 desc) a,表名 b wh&#101;re b.主键字段 = a.主键字段 o&#114;der by a.排序字段<br/><br/>14、说明：前10条记录<br/>sel&#101;ct top 10 * form table1 wh&#101;re 范围<br/><br/>15、说明：选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)<br/>sel&#101;ct a,b,c from tablename ta wh&#101;re a=(sel&#101;ct max(a) from tablename tb wh&#101;re tb.b=ta.b)<br/><br/>16、说明：包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表<br/>(sel&#101;ct a from tableA ) except (sel&#101;ct a from tableB) except (sel&#101;ct a from tableC)<br/><br/>17、说明：随机取出10条数据<br/>sel&#101;ct top 10 * from tablename o&#114;der by newid()<br/><br/>18、说明：随机选择记录<br/>sel&#101;ct newid()<br/><br/>19、说明：删除重复记录<br/>Del&#101;te from tablename wh&#101;re id not in (sel&#101;ct max(id) from tablename group by col1,col2,...)<br/><br/>20、说明：列出数据库里所有的表名<br/>sel&#101;ct name from sysobjects wh&#101;re type=&#39;U&#39;<br/><br/>21、说明：列出表里的所有的<br/>sel&#101;ct name from syscolumns wh&#101;re id=object_id(&#39;TableName&#39;)<br/><br/>22、说明：列示type、vender、pcs字段，以type字段排列，case可以方便地实现多重选择，类似sel&#101;ct 中的case。<br/>sel&#101;ct type,sum(case vender when &#39;A&#39; then pcs else 0 end),sum(case vender when &#39;C&#39; then pcs else 0 end),sum(case vender when &#39;B&#39; then pcs else 0 end) FROM tablename group by type<br/>显示结果：<br/>type vender pcs<br/>电脑 A 1<br/>电脑 A 1<br/>光盘 B 2<br/>光盘 A 2<br/>手机 B 3<br/>手机 C 3<br/><br/>23、说明：初始化表table1<br/><br/>TRUNCATE TABLE table1<br/><br/>24、说明：选择从10到15的记录<br/>sel&#101;ct top 5 * from (sel&#101;ct top 15 * from table o&#114;der by id asc) table_别名 o&#114;der by id desc<br/><br/>三、技巧<br/><br/>1、1=1，1=2的使用，在SQL语句组合时用的较多<br/><br/>“wh&#101;re 1=1” 是表示选择全部 “wh&#101;re 1=2”全部不选，<br/>如：<br/>if @strWh&#101;re !=&#39;&#39;<br/>begin<br/>set @strSQL = &#39;sel&#101;ct count(*) as Total from [&#39; + @tblName + &#39;] wh&#101;re &#39; + @strWh&#101;re<br/>end<br/>else<br/>begin<br/>set @strSQL = &#39;sel&#101;ct count(*) as Total from [&#39; + @tblName + &#39;]&#39;<br/>end<br/><br/>我们可以直接写成<br/>set @strSQL = &#39;sel&#101;ct count(*) as Total from [&#39; + @tblName + &#39;] wh&#101;re 1=1 安定 &#39;+ @strWh&#101;re<br/><br/>2、收缩数据库<br/>--重建索引<br/>DBCC REINDEX<br/>DBCC INDEXDEFRAG<br/>--收缩数据和日志<br/>DBCC SHRINKDB<br/>DBCC SHRINKFILE<br/><br/>3、压缩数据库<br/>dbcc shrinkdatabase(dbname)<br/><br/>4、转移数据库给新用户以已存在用户权限<br/>exec sp_change_users_login &#39;up&#100;ate_one&#39;,&#39;newname&#39;,&#39;oldname&#39;<br/>go<br/><br/>5、检查备份集<br/>RESTORE VERIFYONLY from disk=&#39;E:\dvbbs.bak&#39;<br/><br/>6、修复数据库<br/>Alt&#101;r DATABASE [dvbbs] SET SINGLE_USER<br/>GO<br/>DBCC CHECKDB(&#39;dvbbs&#39;,repair_allow_data_loss) WITH TABLOCK<br/>GO<br/>Alt&#101;r DATABASE [dvbbs] SET MULTI_USER<br/>GO<br/><br/>7、日志清除<br/>SET NOCOUNT ON<br/>DECLARE @LogicalFileName sysname,<br/>@MaxMinutes INT,<br/>@NewSize INT<br/><br/><br/>USE tablename -- 要操作的数据库名<br/>Sel&#101;ct @LogicalFileName = &#39;tablename_log&#39;, -- 日志文件名<br/>@MaxMinutes = 10, <br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1983n.com.cn/default.asp?id=63" /> 
	  <id>http://www.1983n.com.cn/default.asp?id=63</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[ASP缓存类及其应用实例]]></title>
	  <author>
		 <name>DuoHai</name>
		 <uri>http://www.1983n.com.cn/</uri>
		 <email>DuoHai@126.Com</email>
	  </author>
	  <category term="" scheme="http://www.1983n.com.cn/default.asp?cateID=6" label="技术交流" /> 
	  <updated>2008-03-08T09:05:23+08:00</updated>
	  <published>2008-03-08T09:05:23+08:00</published>
		  <summary type="html"><![CDATA[一、何谓ASP缓存/为什么要缓存<br/>当你的web站点采用asp技术建立的初期，可能感觉到的是asp动态网页技术带来的便利性，以及随意修改性、自如的http控制。但是，随着访问量的增加，你一定会发现自己的站点访问速度越来越慢，IIS重新启动得越来越频繁。接下来，你一定想优化asp，诸如更换性能更优异的数据库、建立索引、编写存储过程等等。这些措施有些不需要增加成本压力，有些则成本压力很大（譬如丛access到SQL），而且效果还不一定。<br/>面对web访问压力，我认为最经济的办法是利用缓存优化技术来实现缓解web的服务压力。<br/>Web访问量增加通常意味着以下资源需求的快速增长：<br/>1、 网卡流量增加，需要消耗更多的CPU处理网络流量和网络I/O线程。<br/>2、 需要更频繁的打开/关闭数据库连结（如果使用数据库技术—通常asp都会采用数据库作为数据存储），严重消耗资源的事物数量、以及事务相互竞争资源引起的死锁、会增加网络I/O或者CPU消耗。<br/>3、 如果采用session的话，IIS为了维持状态，会消耗更多内存，而内存消耗可能会引发物理内存不够，引起物理内存同辅存间的频繁交换，从而引起代码执行的停顿，web响应阻滞。<br/>4、 由于访问的不到及时响应，会引起网页访问故障，导致用户刷新，从而加剧CPU、内存等资源需求。<br/>实际上，考虑通常的web应用程序，很多时候的动态代码执行是不必要的。<br/><br/><br/>二、asp缓存的分类<br/>擅自总结，asp的缓存可以分为两类：<br/>1、 文件缓存<br/>所谓文件缓存，就是根据逻辑判断，一段时间内某个asp的特定执行将不会有很大的变动，因而将内容以静态html的形式存放，然后以web的重定向技术让客户端访问静态文件，以达到减少CPU、数据库资源等的需求。这样的应用很多，譬如很多论坛就是在回复贴子的时候将整个贴子重新生成一个静态文件，然后进行重定向的，例如 donews.com的论坛。该成静态还有一个副作用（好处）--可以很容易被google等搜索引擎收录。一些所谓新闻发布系统的都采用了此技术。<br/>2、 文件片断缓存<br/>所谓文件缓存，也是基于逻辑判断，某部分数据（通常是需要消耗资源的大容量数据库查询取得）在一定时间内不会改变，所以我们可以将这些数据利用文件的形式进行存储，当需要时候，可以通过读取文件来获取数据，避免增加数据库的负担。例如，我们通常将一些数据以xml格式存储，然后利用xslt技术实现显示（xml处理通常需要大量CPU资源，所以通常是IE直接读取xml到客户端在客户的CPU上进行处理）。CSDN的论坛就是这样处理的。<br/>3、 主存缓存<br/>除此之外，还可以考虑在内存中处理缓存，将需要及时响应的内容存储在内存中，一旦访问需求，立即从快速的贮存中输送出去。如果极大量的访问需求集中在几个少量的页面或者主存足够多，我想采用主存缓存一定可以大幅度提高web访问性能。<br/><br/><br/>三、如何实现/使用缓存<br/>实现缓存需要考虑以下问题：<br/>1、 哪些页面会在短时间内不会改变？<br/>分析自己的站点，这样的页面很多。譬如一个站点通常都有新闻资讯类的栏目，这些栏目通常都是站点维护人员在一天的某个时间发布资料，之后很少改动页面。那么这些页面就适合于采用静态文件缓存。实际上，所谓新闻发布系统就是这么做的，那么那也可以参考这些系统的思想改造自己的原有动态asp页面。<br/><br/><br/>2、 那些页面针对全部访问者都采用同一个逻辑生成（也就是不区分访问者）。<br/>除了新闻资讯之类的栏目所有访问者都看一个界面外，论坛等消耗资源的应用一般也可以设计成统一逻辑生成（同一个贴子，张三李四看的都一样），针对这类应用页面我们也可以采用静态缓存来实现。也可以考虑将数据片断化，利用脚本技术在服务器处理能力之外也就是客户端浏览器进行处理。<br/><br/><br/>3、 采用缓存的代价和收获。<br/>主要就是“空间换（响应）时间”。利用缓存技术将之后频繁需要的内容进行预处理，使之提高web服务器响应能力，更重要赢得访问者的欢心。<br/>代价就是web空间需求增加，同时又可能影响到访问效果。<br/>但我认为适当的缓存，是利大于弊的。<br/><br/><br/>4、 那些地方不适宜采用缓存<br/>动态查询页面，每个人的查询内容不一样，所以显示结果不大一样，所以不大可能将查询结果生成缓存，所以采用缓存较为复杂且缓存利用率底下，造成管理成本上什（假设你缓存了1000个查询关键字，那么管理这些关键字同缓存的对应也是麻烦事）。<br/><br/><br/>四、实例分析<br/>假设一个建议论坛的原有布局如下：<br/>根目录下：<br/>default.asp 首页，一般是精华、推荐之类<br/>listBorad.asp 该文件列出全部分栏目的名称和介绍，如果携带参数MainBID就表示要列出板块下的栏目<br/>listThread.asp 该文件如果不携带任何参数表示列出全部的贴子，携带MainBID表示列出某块的全部贴子。如果携带subBID表示列出具体栏目的贴子。如果携带page参数表示分页列出主题。<br/>ViewThread.asp 列出某个贴子内容。我们假设贴子显示为一个发言，任意跟贴全部列在后面。ID参数为要显示的贴子。<br/>Reply.asp 回应某个贴子，携带参数Id回应某个贴子<br/>其它的暂不讨论。<br/>以上，我们可以看到，如果全部是采用原始的ASP/PHP来做，那几乎每一个asp文件的执行都需要数据库操作，频繁的查询，多表查询。要知道查询数据库最终会带来性能的下降，响应速度下降，带给访问者缓慢的浏览影响，不利于web的质量。更重要的是对于甲乙两个人来将，他们访问ViewThread.asp之类的如果ID一致，那么很多时候他们会看到同样的内容（他们的浏览器收到的HTML代码几乎一样），但是为了这“同样的内容”，服务器需要打开数据库连结、查询，读取纪录，显示，关闭纪录、数据库连结。。。。以下列的消耗服务器资源的操作，如果是更多的人来访问，最终的结果是这些人加剧消耗服务器资源。实际上，这些为了“同样的内容”所做的重复劳动是可以利用缓存技术进行优化避免的。譬如：<br/>在reply.asp提交内容后，我们立即调用生成静态的功能，将整个贴子内容存储为viewThread_xxxx.htm之类的静态html文件，再通常情况下访问viewThread.asp?ID=xxxx的时候，系统自动redirect到对应的静态文件viewThreadxxxx.htm去。这样，当一个贴子没有最新发布时候，他始终是静态内容提供给浏览者；一旦有了新的提交，将会更新到静态文件中去，这样，将会节省很多次数据库操作，大大提高响应速度。<br/>listBorad.asp也可以实施静态化。我们可以分析其可能携带的参数，将缓存文件名设定为listBoard_xx.htm，在增加新的栏目时候进行更新listBoard_xxx.htm。listThread.asp也类似，只不过由于其参数更多，所以缓存文件也会很多。击若要缓存listThread.asp? subBID=xxx&amp;page=2，那么对应的静态文件是listThread_xxx_p2.htm。default.asp也一样。<br/>那么如何判断什么时候更新？在什么时机更新？<br/>讨论listThread.asp? subBID=xxx&amp;page=2，我们在执行listThread.asp俄时候提取subID和page，然后探测listThread_xxx_p2.htm是否存在，如果不存在就调用静态生成功能进行生成该文件，最终重定向到此静态文件。注意，此处的不存在就意味着出现了新的内容需要我们进行更新。<br/>那如何造成文件不存在呢？删除。我们在发表一个新的贴子、删除贴子、移动贴子的时候我们可以将类似listThread_xxx_p2.htm之类的静态文件全部删除。这样就通知了何时要进行缓存。<br/>现在还剩下一个问题，如何生成静态文件？<br/>我们注意到，之前我们提到的“同样的内容”。我们可以将改造前的default.asp、listThread.asp等拷贝一个副本，取名为default_d.asp、listThread_2.asp，且在同一个目录中（理论上listThtrad.asp?subID=123同LISTtHREAD_D.ASP?SUBID=123的访问结果会是同样的内容），这样我们在需要生成静态文件的逻辑中，通过WEB访问请求的方式调用改造前的副本，得到html代码，并存储为静态文件。这个web请求实际上相当于在任何真实浏览者访问静态内容之前，由服务器自身现察看将会输出的html，然后返回这些代码，利用文件操作功能存储为静态文件。这样，缓存文件就在真正浏览者之前被创建。<br/>这样的方案几乎不触动原来的布局，几乎不会造成因为改造出现404之类的错误。其次，静态文件也会帮助你的站点容易被被google之类的搜索引擎收录。何乐而不为？<br/>最后，提醒，通过web访问，asp编程环境下，很多人采用xmlHTTP组件访问，这会造成很多问题。xmlhttp自身会cache请求的资源，导致我们通过此组件请求得到的内容不是最新的，造成逻辑上的混乱。所以，应当选择xml Server http对象或者winhttp组件来实现web请求资源。<br/>使用ASP中的缓存技术可以很大程度上提高你的网站性能，其实这些实现方法是非常的简单，它将说明如何在服务器上的缓存是如何工作以及你如何使用一种被称为断开连接的ADO连接技术。 <br/>　　在介绍这些技术之前先说明一下到底什么是ASP的缓存技术。 <br/>　　所谓缓存其实就是在内存中开辟一个用来保存数据的空间，使用缓存你就不用频繁的访问你保存在硬盘上的数据了，灵活的使用缓存你就免去了心疼的看着可怜的硬盘饱受读数据时的折磨了。当你一旦执行了一个查询动作，并且将查询结果放入缓存中后，你就可以很迅速的重复访问这些数据了。而如果你不把数据放入缓存的话，当你再次执行这个查询时，服务器会将进程耗费在从数据库中获取并排序上了。 <br/>　　当数据保存在缓存中时，再次查询时耗费的时间主要是在显示数据的时间上了。 <br/>也就是说，我们不应该把经常需要改变的数据放到服务端的缓存中，我们应该把改变少，但是又需要经常访问的数据放到缓存中。<br/><br/>　　现在我们先讨论ASP在服务端使用缓存的技术，过会再讨论ASP如何在客户端使用 <br/>缓存的技术。 <br/>　　当你有大量的数据（静态的，就是说变动比较少的）需要显示给客户端时，你就可以考虑使用服务端的缓存技术了。这种技术尤其适用于那些显示风格一致性比较强的网站（呵呵，对于非主流的网站可不好用的说。） <br/>　　其实实现方法特别的简单，大家只要看看下面这个简单的例子就明白了。 <br/>　　这是一个用来显示书籍分类的例子程序 <br/>DisplayBooks.ASP文件： <br/>&lt; %@ LANGUAGE=JavaScript % &gt; <br/>&lt; html &gt; <br/>&lt; body &gt; <br/>&lt; form method=post &gt; <br/>书籍分类； &lt; %= getBooksListBox() % &gt; <br/>&lt; p&gt; <br/>&lt; input type=submit &gt;<br/><br/>&lt; % <br/>function getBooksListBox() <br/>{ <br/>BooksListBox = Application(&#34;BooksListBox&#34;) <br/>if (BooksListBox != null) return BooksListBox; <br/>crlf = String.fromCharCode(13, 10) <br/>BooksListBox = &#34;&lt; sel&#101;ct name=Books&gt;&#34; + crlf; <br/>SQL = &#34;Sel&#101;ct * FROM Books o&#114;DER BY Name&#34;; <br/>cnnBooks = Server.Cr&#101;ateObject(&#34;ADODB.Connection&#34;); <br/>cnnBooks.Open(&#34;Books&#34;, &#34;Admin&#34;,&#34;&#34;); <br/>rstBooks = cnnBooks.Execute(SQL); <br/>fldBookName = rstBooks(&#34;BookName&#34;); <br/>while (!rstBooks.EOF){ <br/>BooksListBox = BooksListBox + &#34; &lt; option&gt;&#34; + <br/>fldBookName + &#34;&#34; + crlf; <br/>rstBooks.MoveNext(); <br/>} <br/>BooksListBox = BooksListBox + &#34;&#34; <br/>Application(&#34;BooksListBox&#34;) = BooksListBox <br/>return BooksListBox; <br/>} <br/>% &gt;<br/>　　很简单把，其实就是用了很简单的Application技术，而且就一句话的不同： <br/>　　Application(&#34;BooksListBox&#34;) = BooksListBox <br/>　　你可以验证一下你就会发现服务器上的请求数量会降低不少的。这种情况尤其适合与那些更新不是很频繁的网站内容，例如你一天（或则很长时间）只更新一次。<br/><br/>　　下面再讨论一种客户端的缓存技术这种技术也叫断开连接的ADO连接技术（翻译水平太次，听上去怎么这么别扭）。这种技术主要使用在用来保存用户个人信息，例如用户的密码，代号等等上面。它主要使用了ADO的一些属性。同时也回答了一些网友曾经提到过的能否在Applocation中使用ADO对象的问题。解释不清楚，下面让代码来发言： <br/>文件GLOBAL.ASA： <br/>&lt; !--METADATA TYPE=&#34;TypeLib&#34; FILE=&#34;C:\Program Files\Common <br/>Files\system\ado\msado15.dll&#34;-- &gt; <br/>&lt; SCRIPT LANGUAGE=VBScript RUNAT=&#34;Server&#34; &gt; <br/>Sub Application_OnStart <br/>SQL = &#34;Sel&#101;ct UserName, Password FROM UserInfo&#34; <br/>cnnUsers = &#34;DSN=User&#34; <br/>Set rsUsers = Server.Cr&#101;ateObject(&#34;ADODB.Recordset&#34;) <br/>&#39;注意下面这两句话，就是用来实现那个叫可用的断开连接的ADO技术 <br/>rsCustomers.CursorLocation = adUseClient <br/>rsCustomers.Open SQL, cnnAdvWorks, adOpenStatic, AdLockReadOnly <br/>&#39; 断开RecordSet的和数据库的连接 <br/>rsCustomers.ActiveConnection = Nothing <br/>Set Application(&#34;rsCustomers&#34;) = rsCustomers <br/>End Sub<br/><br/>文件Users.ASP <br/>&lt; % <br/>&#39;Clone方法使得每个用户拥有自己的一个RecordSet集合 <br/>Set yourUsers = Application(&#34;rsUsers&#34;).Clone <br/>Set UserName = yourUsers(&#34;UserName&#34;) <br/>Set Password = yourUsers(&#34;Password&#34;) <br/>Do Until yourUsers.EOF <br/>% &gt; <br/>用户姓名：&lt; %= UserName % &gt; 用户密码：&lt; %= Password % &gt; <br/>&lt; % <br/>yourUsers.MoveNext <br/>Loop <br/>% &gt;　<br/><br/>至于缓存的作用，我想我也不用再多说了，它的作用已经很明显，特别是对于信息量非常大或是全数据库页面的网站，他能很好地利用主机的内存资源，加速ASP的执行效率，减轻服务器的负担，而动网在这一方面做得是最突出的，像他现在的dvbbs7.1.0版，更是在缓存的利用上更上一层楼，前后台大多的操作都和缓存有关，而现在动网里用的也就是迷城浪子的缓存类，下面列出动网的三大高手 写的ASP缓存类<br/><br/>木鸟写的 <br/>&#39;********************************************** <br/>&#39; vbs Cache类 <br/>&#39; <br/>&#39; 属性valid，是否可用，取值前判断 <br/>&#39; 属性name，cache名，新建对象后赋值 <br/>&#39; 方法add(值,到期时间)，设置cache内容 <br/>&#39; 属性value，返回cache内容 <br/>&#39; 属性blempty，是否未设置值 <br/>&#39; 方法makeEmpty，释放内存，测试用 <br/>&#39; 方法equal(变量1)，判断cache值是否和变量1相同 <br/>&#39; 方法expires(time)，修改过期时间为time <br/>&#39; 木鸟 2002.12.24 <br/>&#39; <a href="http://www.aspsky.net/" target="_blank">http://www.aspsky.net/</a> <br/>&#39;********************************************** <br/>class Cache <br/>private obj &#39;cache内容 <br/>private expireTime &#39;过期时间 <br/>private expireTimeName &#39;过期时间application名 <br/>private cacheName &#39;cache内容application名 <br/>private path &#39;uri<br/><br/>private sub class_initialize() <br/>path=request.servervariables(&#34;url&#34;) <br/>path=left(path,instrRev(path,&#34;/&#34;)) <br/>end sub<br/><br/>private sub class_terminate() <br/>end sub<br/><br/>public property get blEmpty <br/>&#39;是否为空 <br/>if isempty(obj) then <br/>blEmpty=true <br/>else <br/>blEmpty=false <br/>end if <br/>end property<br/><br/>public property get valid <br/>&#39;是否可用(过期) <br/>if isempty(obj) o&#114; not isDate(expireTime) then <br/>valid=false <br/>elseif CDate(expireTime)&lt;now then <br/>valid=false <br/>else <br/>valid=true <br/>end if <br/>end property<br/><br/>public property let name(str) <br/>&#39;设置cache名 <br/>cacheName=str &amp; path <br/>obj=application(cacheName) <br/>expireTimeName=str &amp; &#34;expires&#34; &amp; path <br/>expireTime=application(expireTimeName) <br/>end property<br/><br/>public property let expires(tm) <br/>&#39;重设置过期时间 <br/>expireTime=tm <br/>application.lock <br/>application(expireTimeName)=expireTime <br/>application.unlock <br/>end property<br/><br/>public sub add(var,expire) <br/>&#39;赋值 <br/>if isempty(var) o&#114; not isDate(expire) then <br/>exit sub <br/>end if <br/>obj=var <br/>expireTime=expire <br/>application.lock <br/>application(cacheName)=obj <br/>application(expireTimeName)=expireTime <br/>application.unlock <br/>end sub<br/><br/>public property get value <br/>&#39;取值 <br/>if isempty(obj) o&#114; not isDate(expireTime) then <br/>value=null <br/>elseif CDate(expireTime)&lt;now then <br/>value=null <br/>else <br/>value=obj <br/>end if <br/>end property<br/><br/>public sub makeEmpty() <br/>&#39;释放application <br/>application.lock <br/>application(cacheName)=empty <br/>application(expireTimeName)=empty <br/>application.unlock <br/>obj=empty <br/>expireTime=empty <br/>end sub<br/><br/>public function equal(var2) <br/>&#39;比较 <br/>if typename(obj)&lt;&gt;typename(var2) then <br/>equal=false <br/>elseif typename(obj)=&#34;Object&#34; then <br/>if obj is var2 then <br/>equal=true <br/>else <br/>equal=false <br/>end if <br/>elseif typename(obj)=&#34;Variant()&#34; then <br/>if join(obj,&#34;^&#34;)=join(var2,&#34;^&#34;) then <br/>equal=true <br/>else <br/>equal=false <br/>end if <br/>else <br/>if obj=var2 then <br/>equal=true <br/>else <br/>equal=false <br/>end if <br/>end if <br/>end function <br/>end class<br/><br/>木鸟　类例子 vbs Cache类<br/><br/>&#39; <br/>&#39; 属性valid，是否可用，取值前判断 <br/>&#39; 属性name，cache名，新建对象后赋值 <br/>&#39; 方法add(值,到期时间)，设置cache内容 <br/>&#39; 属性value，返回cache内容 <br/>&#39; 属性blempty，是否未设置值 <br/>&#39; 方法makeEmpty，释放内存， <br/>&#39; 方法DelCahe ,删除内存 <br/>&#39; 方法equal(变量1)，判断cache值是否和变量1相同 <br/>&#39; 方法expires(time)，修改过期时间为time <br/>&#39; 用法<br/><br/>set myCache=New Cache <br/>myCache.name=&#34;BoardJumpList&#34; &#39;定义缓存名 <br/>if myCache.valid then　&#39;判断是否可用(包括过期，与是否为空值) <br/>response.write myCache.value　&#39;输出 <br/>else <br/>................ <br/>BoardJumpList=xxx <br/>myCache.add BoardJumpList,dateadd(&#34;n&#34;,60,now)　&#39;写入缓存 xxx.add 内容,过期时间 <br/>response.write BoardJumpList &#39;输出 <br/>end if <br/>myCache.makeEmpty() 释放内存 <br/>mycache.DelCahe()　删除缓存<br/><br/>迷城浪子写的 Class Cls_Cache<br/><br/>Rem ==================使用说明==================== <br/>Rem = 本类模块是动网先锋原创，作者：迷城浪子。如采用本类模块，请不要去掉这个说明。这段注释不会影响执行的速度。 <br/>Rem = 作用：缓存和缓存管理类 <br/>Rem = 公有变量：Reloadtime 过期时间（单位为分钟）缺省值为14400 <br/>Rem = MaxCount 缓存对象的最大值，超过则自动删除使用次数少的对象。缺省值为300 <br/>Rem = CacheName 缓存组的总名称，缺省值为&#34;Dvbbs&#34;,如果一个站点中有超过一个缓存组，则需要外部改变这个值。 <br/>Rem = 属性:Name 定义缓存对象名称，只写属性。 <br/>Rem = 属性:value 读取和写入缓存数据。 <br/>Rem = 函数：ObjIsEmpty()判断当前缓存是否过期。 <br/>Rem = 方法：DelCahe(MyCaheName)手工删除一个缓存对象，参数是缓存对象的名称。 <br/>Rem ======================== <br/>Public Reloadtime,MaxCount,CacheName <br/>Private LocalCacheName,CacheData,DelCount <br/>Private Sub Class_Initialize() <br/>Reloadtime=14400 <br/>CacheName=&#34;Dvbbs&#34; <br/>End Sub <br/>Private Sub SetCache(SetName,NewValue) <br/>Application.Lock <br/>Application(SetName) = NewValue <br/>Application.unLock <br/>End Sub <br/>Private Sub makeEmpty(SetName) <br/>Application.Lock <br/>Application(SetName) = Empty <br/>Application.unLock <br/>End Sub <br/>Public Property Let Name(ByVal vNewValue) <br/>LocalCacheName=LCase(vNewValue) <br/>End Property <br/>Public Property Let Value(ByVal vNewValue) <br/>If LocalCacheName&lt;&gt;&#34;&#34; Then <br/>CacheData=Application(CacheName&amp;&#34;_&#34;&amp;LocalCacheName) <br/>If IsArray(CacheData) Then <br/>CacheData(0)=vNewValue <br/>CacheData(1)=Now() <br/>Else <br/>ReDim CacheData(2) <br/>CacheData(0)=vNewValue <br/>CacheData(1)=Now() <br/>End If <br/>SetCache CacheName&amp;&#34;_&#34;&amp;LocalCacheName,CacheData <br/>Else <br/>Err.Raise vbObjectError + 1, &#34;DvbbsCacheServer&#34;, &#34; please change the CacheName.&#34; <br/>End If <br/>End Property <br/>Public Property Get Value() <br/>If LocalCacheName&lt;&gt;&#34;&#34; Then <br/>CacheData=Application(CacheName&amp;&#34;_&#34;&amp;LocalCacheName) <br/>If IsArray(CacheData) Then <br/>Value=CacheData(0) <br/>Else <br/>Err.Raise vbObjectError + 1, &#34;DvbbsCacheServer&#34;, &#34; The CacheData Is Empty.&#34; <br/>End If <br/>Else <br/>Err.Raise vbObjectError + 1, &#34;DvbbsCacheServer&#34;, &#34; please change the CacheName.&#34; <br/>End If <br/>End Property <br/>Public Function ObjIsEmpty() <br/>ObjIsEmpty=True <br/>CacheData=Application(CacheName&amp;&#34;_&#34;&amp;LocalCacheName) <br/>If Not IsArray(CacheData) Then Exit Function <br/>If Not IsDate(CacheData(1)) Then Exit Function <br/>If DateDiff(&#34;s&#34;,CDate(CacheData(1)),Now()) &lt; 60*Reloadtime Then <br/>ObjIsEmpty=False <br/>End If <br/>End Function <br/>Public Sub DelCahe(MyCaheName) <br/>makeEmpty(CacheName&amp;&#34;_&#34;&amp;MyCaheName) <br/>End Sub <br/>End Class<br/><br/>迷城浪子　类例子 <br/>Set WydCache=New Cls_Cache <br/>WydCache.Reloadtime=0.5 &#39;定义过期时间 (以分钟为单会) <br/>WydCache.CacheName=&#34;pages&#34;　&#39;定义缓存名 <br/>IF WydCache.ObjIsEmpty() Then &#39;&#39;判断是否可用(包括过期，与是否为空值) <br/>Response.write WydCache.Value <br/>Else <br/>.................. <br/>BoardJumpList=xxx <br/>WydCache.Value=BoardJumpList &#39;写入内容 <br/>Response.write BoardJumpList <br/>End if<br/><br/>mycache.DelCahe(&#34;缓存名&#34;)　删除缓存<br/><br/>slightboy 写的<br/><br/>&#39;======================== <br/>&#39;clsCache.asp <br/>&#39;======================== <br/>&#39;== begin : 2004-6-26 21:51:47 <br/>&#39;== copyright : slightboy (C)1998-2004 <br/>&#39;== email : slightboy@msn.com <br/>&#39;======================== <br/>&#39;======================== <br/>&#39; Dim Application(2) <br/>&#39; Application(0) Counter 计数器 <br/>&#39; Application(1) dateTime 放置时间 <br/>&#39; Application(2) Content 缓存内容<br/><br/>Public PREFIX <br/>Public PREFIX_LENGTH<br/><br/>Private Sub Class_Initialize() <br/>PREFIX = &#34;Cached:&#34; <br/>PREFIX_LENGTH = 7 <br/>End Sub <br/>Private Sub Class_Terminate <br/>End Sub <br/>&#39; 设置变量 <br/>Public Property Let Cache(ByRef Key, ByRef Content) <br/>Dim Item(2) <br/>Item(0) = 0 <br/>Item(1) = Now() <br/>IF (IsObject(Content)) Then <br/>Set Item(2) = Content <br/>Else <br/>Item(2) = Content <br/>End IF <br/>Application.Unlock <br/>Application(PREFIX &amp; Key) = Item <br/>Application.Lock <br/>End Property <br/>&#39; 取出变量 计数器++ <br/>Public Property Get Cache(ByRef Key) <br/>Dim Item <br/>Item = Application(PREFIX &amp; Key) <br/>IF (IsArray(Item)) Then <br/>IF (IsObject(Item)) Then <br/>Set Cache = Item(2) <br/>Else <br/>Cache = Item(2) <br/>End IF <br/>Application(PREFIX &amp; Key)(0) = Application(PREFIX &amp; Key)(0) + 1 <br/>Else <br/>Cache = Empty <br/>End IF <br/>End Property <br/>&#39; 检查缓存对象是否存在 <br/>Public Property Get Exists(ByRef Key) <br/>Dim Item <br/>Item = Application(PREFIX &amp; Key) <br/>IF (IsArray(Item)) Then <br/>Exists = True <br/>Else <br/>Exists = False <br/>End IF <br/>End Property <br/>&#39; 得到计数器数值 <br/>Public Property Get Counter(ByRef Key) <br/>Dim Item <br/>Item = Application(PREFIX &amp; Key) <br/>IF (IsArray(Item)) Then <br/>Counter = Item(0) <br/>End IF <br/>End Property<br/><br/>&#39; 设置计数器时间 <br/>Public Property Let dateTime(ByRef Key, ByRef SetdateTime) <br/>Dim Item <br/>Item = Application(PREFIX &amp; Key) <br/>IF (IsArray(Item)) Then <br/>Item(1) = SetdateTime <br/>End IF <br/>End Property <br/>&#39; 得到计数器时间 <br/>Public Property Get dateTime(ByRef Key) <br/>Dim Item <br/>Item = Application(PREFIX &amp; Key) <br/>IF (IsArray(Item)) Then <br/>dateTime = Item(1) <br/>End IF <br/>End Property<br/><br/>&#39; 重置计数器 <br/>Public Sub ResetCounter() <br/>Dim Key <br/>Dim Item <br/>Application.Unlock <br/>For Each Key in Application.Contents <br/>IF (Left(Key, PREFIX_LENGTH) = PREFIX) Then <br/>Item = Application(Key) <br/>Item(0) = 0 <br/>Application(Key) = Item <br/>End IF <br/>Next <br/>Application.Lock <br/>End Sub <br/>&#39; 删除某以缓存 <br/>Public Sub Clear(ByRef Key) <br/>Application.Contents.Remove(PREFIX &amp; Key) <br/>End Sub <br/>&#39; 清空没有使用的缓存 <br/>Public Sub ClearUnused() <br/>Dim Key, Keys, KeyLength, KeyIndex <br/>For Each Key in Application.Contents <br/>IF (Left(Key, PREFIX_LENGTH) = PREFIX) Then <br/>IF (Application(Key)(0) = 0) Then <br/>Keys = Keys &amp; VBNewLine &amp; Key <br/>End IF <br/>End IF <br/>Next <br/>Keys = Split(Keys, VBNewLine) <br/>KeyLength = UBound(Keys) <br/>Application.Unlock <br/>For KeyIndex = 1 To KeyLength <br/>Application.Contents.Remove(Keys(KeyIndex)) <br/>Next <br/>Application.Lock <br/>End Sub <br/>&#39; 清空所有缓存 <br/>Public Sub ClearAll() <br/>Dim Key, Keys, KeyLength, KeyIndex <br/>For Each Key in Application.Contents <br/>IF (Left(Key, PREFIX_LENGTH) = PREFIX) Then <br/>Keys = Keys &amp; VBNewLine &amp; Key <br/>End IF <br/>Next <br/>Keys = Split(Keys, VBNewLine) <br/>KeyLength = UBound(Keys) <br/>Application.Unlock <br/>For KeyIndex = 1 To KeyLength <br/>Application.Contents.Remove(Keys(KeyIndex)) <br/>Next <br/>Application.Lock <br/>End Sub<br/><br/>End Class<br/><br/>slightboyn 类例子<br/><br/>Set Wyd=New JayCache <br/>Wyd.dateTime(&#34;Page&#34;)=时 间 <br/>If Wyd.Exists(&#34;Page&#34;) Then <br/>Response.write Wyd.Cache(&#34;Page&#34;) &#39;输出 <br/>Else <br/>Wyd.Cache(&#34;Page&#34;)=xxx　写入 <br/>Responxe.write xxx <br/>End IF <br/>Wyd.Clear(&#34;page&#34;)&#39;删除缓存<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1983n.com.cn/default.asp?id=62" /> 
	  <id>http://www.1983n.com.cn/default.asp?id=62</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[一个设计总监的观点]]></title>
	  <author>
		 <name>DuoHai</name>
		 <uri>http://www.1983n.com.cn/</uri>
		 <email>DuoHai@126.Com</email>
	  </author>
	  <category term="" scheme="http://www.1983n.com.cn/default.asp?cateID=7" label="网文集萃" /> 
	  <updated>2008-03-07T17:50:29+08:00</updated>
	  <published>2008-03-07T17:50:29+08:00</published>
		  <summary type="html"><![CDATA[01，不要把自己当老板，要想剥削别人，就要先剥削自己。 <br/><br/>02，不要在名片上印总经理的字样，印设计总监或客户总监会让你的业务开展起来更有余地，客户也会觉得你公司规模看起来还可以。 <br/><br/>03，不要总和做设计的人搞在一起，除非你只想做个设计师而已。 <br/><br/>04，不要轻易找和自己很熟的哥们合作，除非你把钱看得比友情更重要。 <br/><br/>05，不要找陌生和或自己不太了解的人合作，除非你已经拥有驾御这种危险合作的经验与能力。 <br/><br/>06，不要指望自己能在5到10年的时间里摆脱电脑，除非不是一个有理想的设计师。对设计公司的创业者来说，你思维的枯竭就意味着你公司的枯竭。 <br/><br/>07，不要背弃理想，除非你觉得钱是你唯一觉得重要的东西，做一个有理想的人，自然也会成就一个有理想的公司。 <br/><br/>08，在现实与理想的面前，你要学会如何去平衡和忍让，要知道周星星也是经过十几年后才让人知道，原来他的功夫也是不错的。 <br/><br/>09，不要以为，从员工身上克扣银两是一种很精明的做法，毕竟*这点银子是发不了大财的。在创业的前期，每一个有能力的员工是公司赖以发展的根本。 <br/><br/>10，要博学，不要精，只要杂，要让你的每一个客户都觉得你是专家。 <br/><br/>11，少看连续剧，多看新闻和财经节目，培养自己观察和审视问题的能力。 <br/><br/>12，坚持读书，要永远走在你周围人的前面，追赶别人和被别人追赶会造就两种不同的气度。 <br/><br/>13，要重视学习商务礼仪，在创业过程中，这些素养会为你赢得客户的尊重。 <br/><br/>14，要清楚，设计公司与广告公司的根本区别在哪里，知道路在哪里，才能想得到怎样去走这条路。 <br/><br/>15，做远景规划与做回顾同样重要，不切实际的臆想和急功近利的做法都是致命的。 <br/><br/>16，不要依赖任何人，一个小公司的体质是*强压和拼命才能锻炼出来的，寄生和依赖只会让自己在风向有所变化的时候死的很惨。 <br/><br/>17，精通财务，要做到心中有数，但不可以成为守财奴，懂得投入，才会有产出，准确的投资与再投入是下一步发展的基石。 <br/><br/>18，不要在税务等方面动大脑筋，商业化与国际化进程的加深只会让你遇到更为严格的财务与经营审查，除非你永远只想徘徊在下游。 <br/><br/>19，尽早建立一套客观的，符合自己公司的管理制度，负责你会在同样的问题上浪费同样的时间，有时候甚至危及公司的性命。 <br/><br/>20，不要以为自己是机器，别人就一定也是机器，和谐的工作频率会造就和谐的工作环境，你公司的气质将由此诞生。 <br/><br/>21，要重视每一个小单子和小客户，不然所谓专业精神将荡然无存，你也就相应失去发展的机遇与品质。<br/><br/>22，永远不要对自己作品感到满足，比你强的人和公司就在周围，他们随时准备给予你狠狠一击。你能做的只有，不断提高自己，使生命力更加旺盛。 <br/><br/>23，设计公司是有品格的，十年做小，一朝做大的时候，你所有的努力毕将得到验证。 <br/><br/>24，永远记住，你是一个懂设计，爱设计的商人。用设计吃饭，你比别人更有资格。 <br/><br/>上面这些点滴，拾一漏万，并不适合所有人，只是我在工作中的一些体会，尤其不适合“天才”、“有背景和财力支持者”、“广告从业者”等等。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1983n.com.cn/default.asp?id=61" /> 
	  <id>http://www.1983n.com.cn/default.asp?id=61</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[模板与代码分离]]></title>
	  <author>
		 <name>DuoHai</name>
		 <uri>http://www.1983n.com.cn/</uri>
		 <email>DuoHai@126.Com</email>
	  </author>
	  <category term="" scheme="http://www.1983n.com.cn/default.asp?cateID=6" label="技术交流" /> 
	  <updated>2008-03-05T09:28:39+08:00</updated>
	  <published>2008-03-05T09:28:39+08:00</published>
		  <summary type="html"><![CDATA[此功能比较简单，更多功能可自已开发，当然，高手就不用看了，见笑了。把下面这两个文件放到同一个目录下即可：<br/><br/>h_index.htm文件：<br/><br/>&lt;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.01 Transitional//EN&#34;<br/>&#34;<a href="http://www.w3.org/TR/html4/loose.dtd" target="_blank">http://www.w3.org/TR/html4/loose.dtd</a>&#34;&gt;<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34;&gt;<br/>&lt;title&gt;无标题文档&lt;/title&gt;<br/>&lt;/head&gt;<br/><br/>&lt;body&gt;<br/>&lt;center&gt;<br/>&lt;table width=&#34;694&#34; border=&#34;0&#34; cellpadding=&#34;0&#34; cellspacing=&#34;0&#34;&gt;<br/> &lt;!--DWLayoutTable--&gt;<br/> &lt;tr&gt;<br/>&nbsp;&nbsp; &lt;td width=&#34;694&#34; height=&#34;57&#34; align=&#34;center&#34; valign=&#34;middle&#34;&gt;&lt;font color=&#34;#FF0000&#34;&gt;{newstitle}&lt;/font&gt;<br/><br/>{addtime}<br/>&lt;hr&gt;<br/>&lt;/td&gt;<br/> &lt;/tr&gt;<br/> &lt;tr&gt;<br/>&nbsp;&nbsp; &lt;td height=&#34;33&#34; align=&#34;left&#34; valign=&#34;top&#34;&gt;{content}&lt;/td&gt;<br/> &lt;/tr&gt;<br/>&lt;/table&gt;<br/>&lt;/center&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/><br/><br/><br/>index.asp文件：<br/><br/>&lt;%@LANGUAGE=&#34;VBSCRIPT&#34; CODEPAGE=&#34;936&#34;%&gt;<br/>&lt;%<br/>set fso=Cr&#101;ateObject(&#34;Scripting.FileSystemObject&#34;)<br/>set f=fso.OpenTextFile(server.mappath(&#34;h_index.htm&#34;))<br/>content=f.ReadAll<br/>f.close<br/>set f=nothing<br/>set fso=nothing<br/><br/>content=replace(content,&#34;{newstitle}&#34;,&#34;一个模板与代码分离的方法&#34;)<br/>content=replace(content,&#34;{addtime}&#34;,&#34;时间：2005-07-30&#34;)<br/>content=replace(content,&#34;{content}&#34;,&#34;新闻内容，试测中。。&#34;)<br/>response.write content<br/>response.end()<br/>%&gt;<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1983n.com.cn/default.asp?id=60" /> 
	  <id>http://www.1983n.com.cn/default.asp?id=60</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[图片相册JS效果，超酷]]></title>
	  <author>
		 <name>DuoHai</name>
		 <uri>http://www.1983n.com.cn/</uri>
		 <email>DuoHai@126.Com</email>
	  </author>
	  <category term="" scheme="http://www.1983n.com.cn/default.asp?cateID=6" label="技术交流" /> 
	  <updated>2008-03-04T09:21:48+08:00</updated>
	  <published>2008-03-04T09:21:48+08:00</published>
		  <summary type="html"><![CDATA[<div class="UBBPanel"><div class="UBBTitle"><img src="http://www.1983n.com.cn/images/html.gif" style="margin:0px 2px -3px 0px"> HTML代码</div><div class="UBBContent"><TEXTAREA rows="8" id="temp80839"><!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.01//EN&#34; &#34;<a href="http://www.w3.org/TR/html4/strict.dtd" target="_blank">http://www.w3.org/TR/html4/strict.dtd</a>&#34;>
<html>
<head>
<title></title>
<style type=&#34;text/css&#34;>
	html {
		overflow: hidden;
	}
	body {
		position: absolute;
		margin: 0px;
		padding: 0px;
		background: #111;
		width: 100%;
		height: 100%;
	}
	#screen {
		position: absolute;
		left: 10%;
		top: 10%;
		width: 80%;
		height: 80%;
		background: #000;
	}
	#screen img {
		position: absolute;
		cursor: pointer;
		visibility: hidden;
		width: 0px;
		height: 0px;
	}
	#screen .tvover {
		border: solid #876;
		opacity: 1;
		filter: alpha(opacity=100);
	}
	#screen .tvout {
		border: solid #fff;
		opacity: 0.7;
	}
	#bankImages {
		display: none;
	}
</style>
<script type=&#34;text/javascript&#34;>
var Library = {};
Library.ease = function () {
	this.target = 0;
	this.position = 0;
	this.move = function (target, speed)
	{
		this.position += (target - this.position) * speed;
	}
}
var tv = {
	O : [],
	screen : {},
	grid : {
		size       : 4,  
		borderSize : 6,  
		zoomed     : false
	},
	angle : {
		x : new Library.ease(),
		y : new Library.ease()
	},
	camera : {
		x    : new Library.ease(),
		y    : new Library.ease(),
		zoom : new Library.ease(),
		focalLength : 750 
	},
	init : function ()
	{
		this.screen.obj = document.getElementById('screen');
		var img = document.getElementById('bankImages').getElementsByTagName('img');
		this.screen.obj.onsel&#101;ctstart = function () { return false; }
		this.screen.obj.ondrag        = function () { return false; }
		var ni = 0;
		var n = (tv.grid.size / 2) - .5;
		for (var y = -n; y <= n; y++)
		{
			for (var x = -n; x <= n; x++)
			{
				var o = document.cr&#101;ateElement('img');
				var i = img[(ni++) % img.length];
				o.className = 'tvout';
				o.src = i.src;
				tv.screen.obj.appendChild(o);
				o.point3D = {
					x  : x,
					y  : y,
					z  : new Library.ease()
				};
				o.point2D = {};
				o.ratioImage = 1;
				tv.O.push(o);
				o.onmouseover = function ()
				{
					if (!tv.grid.zoomed)
					{
						if (tv.o)
						{
							tv.o.point3D.z.target = 0;
							tv.o.className = 'tvout';
						}
						this.className = 'tvover';
						this.point3D.z.target = -.5;
						tv.o = this;
					}
				}
				o.onclick = function ()
				{
					if (!tv.grid.zoomed)
					{
						tv.camera.x.target = this.point3D.x;
						tv.camera.y.target = this.point3D.y;
						tv.camera.zoom.target = tv.screen.w * 1.25;
						tv.grid.zoomed = this;
					} else {
						if (this == tv.grid.zoomed){
							tv.camera.x.target = 0;
							tv.camera.y.target = 0;
							tv.camera.zoom.target = tv.screen.w / (tv.grid.size + .1);
							tv.grid.zoomed = false;
						}
					}
				}
				o.calc = function ()
				{
					this.point3D.z.move(this.point3D.z.target, .5);
					var x = (this.point3D.x - tv.camera.x.position) * tv.camera.zoom.position;
					var y = (this.point3D.y - tv.camera.y.position) * tv.camera.zoom.position;
					var z = this.point3D.z.position * tv.camera.zoom.position;
					var xy = tv.angle.cx * y  - tv.angle.sx * z;
					var xz = tv.angle.sx * y  + tv.angle.cx * z;
					var yz = tv.angle.cy * xz - tv.angle.sy * x;
					var yx = tv.angle.sy * xz + tv.angle.cy * x;
					this.point2D.scale = tv.camera.focalLength / (tv.camera.focalLength + yz);
					this.point2D.x = yx * this.point2D.scale;
					this.point2D.y = xy * this.point2D.scale;
					this.point2D.w = Math.round(
					                   Math.max(
					                     0,
					                     this.point2D.scale * tv.camera.zoom.position * .8
					                   )
					                 );
					if (this.ratioImage > 1)
						this.point2D.h = Math.round(this.point2D.w / this.ratioImage);
					else
					{
						this.point2D.h = this.point2D.w;
						this.point2D.w = Math.round(this.point2D.h * this.ratioImage);
					}
				}
				o.draw = function ()
				{
					if (this.complete)
					{
						if (!this.loaded)
						{
							if (!this.img)
							{
								this.img = new Image();
								this.img.src = this.src;
							}
							if (this.img.complete)
							{
								this.style.visibility = 'visible';
								this.ratioImage = this.img.width / this.img.height;
								this.loaded = true;
								this.img = false;
							}
						}
						this.style.left = Math.round(
						                    this.point2D.x * this.point2D.scale +
						                    tv.screen.w - this.point2D.w * .5
						                  ) + 'px';
						this.style.top  = Math.round(
						                    this.point2D.y * this.point2D.scale +
						                    tv.screen.h - this.point2D.h * .5
						                  ) + 'px';
						this.style.width  = this.point2D.w + 'px';
						this.style.height = this.point2D.h + 'px';
						this.style.borderWidth = Math.round(
						                           Math.max(
						                             this.point2D.w,
						                             this.point2D.h
						                           ) * tv.grid.borderSize * .01
						                         ) + 'px';
						this.style.zIndex = Math.floor(this.point2D.scale * 100);
					}
				}
			}
		}
		tv.resize();
		mouse.y = tv.screen.y + tv.screen.h;
		mouse.x = tv.screen.x + tv.screen.w;
		tv.run();
	},
	resize : function ()
	{
		var o = tv.screen.obj;
		tv.screen.w = o.offsetWidth / 2;
		tv.screen.h = o.offsetHeight / 2;
		tv.camera.zoom.target = tv.screen.w / (tv.grid.size + .1);
		for (tv.screen.x = 0, tv.screen.y = 0; o != null; o = o.offsetParent)
		{
			tv.screen.x += o.offsetLeft;
			tv.screen.y += o.offsetTop;
		}
	},
	run : function ()
	{
		tv.angle.x.move(-(mouse.y - tv.screen.h - tv.screen.y) * .0025, .1);
		tv.angle.y.move( (mouse.x - tv.screen.w - tv.screen.x) * .0025, .1);
		tv.camera.x.move(tv.camera.x.target, tv.grid.zoomed ? .25 : .025);
		tv.camera.y.move(tv.camera.y.target, tv.grid.zoomed ? .25 : .025);
		tv.camera.zoom.move(tv.camera.zoom.target, .05);
		tv.angle.cx = Math.cos(tv.angle.x.position);
		tv.angle.sx = Math.sin(tv.angle.x.position);
		tv.angle.cy = Math.cos(tv.angle.y.position);
		tv.angle.sy = Math.sin(tv.angle.y.position);
		for (var i = 0, o; o = tv.O[i]; i++)
		{
			o.calc();
			o.draw();
		}
		setTimeout(tv.run, 32);
	}
}
var mouse = {
	x : 0,
	y : 0
}
document.onmousemove = function(e)
{
	if (window.event) e = window.event;
	mouse.x = e.clientX;
	mouse.y = e.clientY;
	return false;
}
</script>
</head>
<body>
<div id=&#34;screen&#34;></div>
<div id=&#34;bankImages&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200741181035801.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200741181035801.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200741183375921.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200741183375921.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200741184993505.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200741184993505.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200741185038473.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200741185038473.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200741185117345.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200741185117345.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200741185166937.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200741185166937.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200741185221625.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200741185221625.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200741185296017.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200741185296017.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200741185481737.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200741185481737.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200741185777873.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200741185777873.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg</a>&#34;>
	<img alt=&#34;&#34; src=&#34;<a href="http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg" target="_blank">http://www.sg803.com/UploadFile/pic/picbig/200742961603953.jpg</a>&#34;>
</div>
<script type=&#34;text/javascript&#34;>
	onresize = tv.resize;
	tv.init();
</script>
</body>
</html></TEXTAREA><br/><INPUT onclick="runEx('temp80839')"  type="button" value="运行此代码"/> <INPUT onclick="doCopy('temp80839')"  type="button" value="复制此代码"/><br/> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1983n.com.cn/default.asp?id=59" /> 
	  <id>http://www.1983n.com.cn/default.asp?id=59</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[与不同的人交往,讲究的是交际之道]]></title>
	  <author>
		 <name>DuoHai</name>
		 <uri>http://www.1983n.com.cn/</uri>
		 <email>DuoHai@126.Com</email>
	  </author>
	  <category term="" scheme="http://www.1983n.com.cn/default.asp?cateID=4" label="幸福生活" /> 
	  <updated>2008-01-31T16:16:51+08:00</updated>
	  <published>2008-01-31T16:16:51+08:00</published>
		  <summary type="html"><![CDATA[“到什么山上唱什么歌。”和不同形态的人物交往，要用不同的交际之道。<br/><br/>　　一、对内方外方的人要老实委婉<br/><br/>　　日常交往中，有些人直来直去，有棱有角，从而不太讨人喜欢。他们往往性太直，情太真，血太热，气太傲。他们往往处世认真，不留余地;做事投入，过于突出;活力四射，难免张扬;才华过人，忘记平衡。他们坚持是我的错，我就承认，决不东推西挡;是你的错，就是你的错，想赖也赖不掉。这种形态的人，便是内方外方的人。表里如一、秉公立世，是对这些人的漂亮评价。“不为五斗米折腰”，是这类人创下的可歌典故。忠心耿耿的屈原、刚直无私的包拯，是这类人物的典型代表。假如社会上缺乏这种人，那是不堪设想的，因为他们是空气的去污剂，丑行的绊脚石。<br/><br/>　　同这种形态的人物交往，一要老实。内方外方的人不会口蜜腹剑，不会阳奉阴违，是个值得信赖、值得尊重的人物，所以要待之以诚，关心爱护。假如对他们虚伪猜忌，往往会使他们产生强烈反感情绪，并且他们还会把这种不满表现在脸上，使你们之间的心理距离扩大。二要委婉。内方外方的人做事不灵活，言辞不变通，往往会使一些人陷入难堪境地，所以和他们交往，要注重婉转。当看到内方外方的人口无遮拦时，尖锐抨击时，要采用一个合适的方式转移主题，或者幽上一默，赞扬一句，巧妙地加以引导。内方外方的人是心地纯正、刚直无私的人，不应该因为他们曾经“刺伤”过你，就对他们计较，就对他们发火。<br/><br/>　　有位内方外方的大作家在如日中天的时候，接到一位青年的来信。这位青年说，要同他合写一部小说。大作家看后，心中有点生气，他在信中毫无保留地写道：“先生：你怎么如此胆大包天呢?竟然想把一匹高贵的马和一头卑贱的驴子套在同一辆车上。”这位青年灵机一动，在回信的开头写道：“尊敬的阁下：您怎么这样抬举我呢，竟然把我比作马?”在信的后半部分，这位青年将自己的写作特长、潜力，合作的必要性、可行性以及对青年成长的影响等等一五一十地写出来。大作家接到信后，哈哈大笑起来，立即回信道：“我的朋友：您很有趣，请把文稿寄过来吧，我很乐意接受您的建议。”在这个事例中，青年曲解原意，幽默风趣，言辞诚恳，出奇制胜，说服了大作家。<br/><br/>　　二、对内方外圆的人要有礼有节<br/><br/>　　当直来直去会伤害别人自尊心的情况下，当有棱有角会使自己陷入难堪境地的情况下，当方方正正不能达到满足效果的情况下，有些人会采用圆滑变通的策略。明明是正确的，应该义无反顾地坚持，但因为坚持的阻力太大，就违心地装聋作哑了;明明是错误的，应该理直气壮地驳斥，但为了一己私利，就压抑着默不作声了。这些人宁可雌伏苟且，亦不雄扬招妒;凡事权衡利害，决不感情用事。这些人，就是内方外圆的人。他们洁身自好，处世练达，唯唯诺诺，谨小慎微，既有原则性，又有灵活性。因为聪明强干，而又锋芒不露，喜怒不形于色，所以四平八稳，八面玲珑，在复杂的人际、利益关系中，亦往往游刃有余。在大厦将倾之际，内方外圆的人会和内方外方的人共同构成支撑濒危建筑的梁柱。洞明世事的诸葛亮、谦虚自律的曾国藩，是这类人物的典型代表。<br/><br/>　　同这种形态的人物交往，一要有礼有理。内方外圆的人虽然表面随和，但内心却是厌恶粗鲁，仇视邪恶，无礼无理的人是不能和这类人结为至交的。假如想缩短同这类人的心理距离，就必须表现出你的积极、健康、向上的交往心态。耻于见人、低三下四的言行举止，尽量在这些人面前少出现，如此，才能得到这类人物的认同。二要有节有度。内方外圆的人，即使对他人相当反感，也不会把不满情绪表现在脸上，他表面上对你很友好，但他的内心究竟如何却使你捉摸不透。因此，同他们交往，要讲究分寸，把握适度，不要因为他的脸上挂着微笑，就得寸进尺，忘乎所以。<br/><br/>　　一位富有的华侨雷先生，想到贫穷落后的故乡考察办厂。接待他的王乡长非常热情，先是请他到酒店小聚，雷先生抹不过面子，只好“入乡随俗”了。但雷先生不擅饮酒，几杯下去，就面红脖组，摇头拒饮了。可是王乡长为表达自己的“地主之谊”，哪难不让其喝足呢?于是说尽好词，劝其“再进”、“再进”一杯酒。雷先生不忘自己的谦谦君子风范，就勉强地多喝了几杯。酒后，王乡长为表达自己的“好客之情”，力邀雷先生“OK”一番，本来雷先生不喜欢唱歌，但为了不伤及王乡长的自尊心，便陪着他折腾了一个晚上。第二天，雷先生留下了1000元钱，用以支付昨天的招待费，便离开了这块尚是贫瘠的家园。王乡长非常纳闷，雷先生一直兴致勃勃，为什么会忽然离开呢?唉!王乡长不明白雷先生的特点：内心方正，看不惯王乡长的强人所难，看不惯王乡长的浪费时间;对外却又圆通，不去当面指责，不丢自己风度。假如王乡长在接待雷先生一事上有礼有节，恰到好处，那结果又会怎样呢?<br/><br/>　　三、对内圆外圆的人要有板有眼<br/><br/>　　生活中，有些人长于研究“人事”，偏重于个人私利，该低的头就低，该烧的香就烧，该拉的关系就拉，该糊涂的事就糊涂，该下手时就下手。不但为人处世圆滑老到，而且内心对自己并无什么约束、什么戒律，很少去追问人生真正的意义。他们碰到好事、露脸的事、有利的事，就去抢;碰到坏事、无名的事、无利的事，就去推。这种形态的人物，便是内圆外圆的人。与内方外圆的人不同点是，他们一般不会同情弱者，救济穷人，甚至为了私利，还会算计人，歪曲人。这种人的代表，当属一些市井无赖，街头小人。由于他们缺少顶天立地的气概，所以一般不会成为大器。<br/><br/>　　同这种形态的人交往，要有板有眼。由于他们内心深处，并无什么必须遵守的做人规则，所以，可能干出表面华丽亮堂、实则损人利己的伎俩。对他们的不当做法，应该明确指正，不要因为太爱面子，便不好意思将实情说出口，使自己受委屈。另外，与内圆外圆的人合作，要有所保留，有所提防，不要过于相信他们。内圆外圆的人非常清楚自己的缺点，所以也害怕别人不讲义气，不守诺言，因此，和这样的人打交道，要清楚地示意他们：假如你讲信用，那么我就守诺言。在这种做法引导下，能够使他们在正确交际规道上行驶。<br/><br/>　　某公司的王二，是个典型的内圆外圆的人。有一件事就很能够说明这个问题。某同事到外地出差，王二笑嘻嘻地请其给他捎带某某商品。等到同事把买来的商品送到他手上后，王二却恰到好处地忘记给钱。过了十天半月，王二非常严厉地、跟没事人似地问道：“我给你钱了吧?你可别不好意思?”谁能为百八十块的钱儿跟他认真呢?这样，王二就白白赚了同事一个小便宜，他为自己略施小技获得成功兴奋不已。在这个事例中，王二抓住了人们的弱点，去获取个人的私利。对此，王二的同事不应该不把实情说出口，他应该明确指出王二确实没有给钱。如此的话，既不会使自己受到损失，也不会得罪王二这个人。<br/><br/>　　四、对内圆外方的人要灵活变通<br/><br/>　　有些人张口是人民利益，闭口是党纪国法，但肚子里却装的是男盗女娼、个人私利。他们在台上慷慨激昂，伊然一副正人君子模样，台下却干些乌七八糟、见不得人的丑事。这种人在领导眼前、群众面前浑身都是一派正气，但自己心里却非常清楚自己是一个什么样的人物。这样形态的人，便是内圆外方的人。因为搞言行两张皮，玩弄两面术，所以极具欺惑性。生活大舞台上，他们是出色的演员。罩着金色光环的贪官，披着华丽外衣的恶人，就是这种形态人物的典型代表。他们很会包装自己，假如剥开这层包装，就会原形毕露。“金玉其外，败絮其中”，是对他们的恰如其分的评价。<br/><br/>　　同这种形态的人物交往，要灵活变通。由于他们嘴上一套，心里一套，所以和他们打交道，既不能不听他们说的，又不能完全相信他们说的。如何交往，运用什么策略，采用什么方式，说出什么内容，要根据当时情况灵活变通，切不可被他们的“出色论述”迷住了双眼，进入了死胡同。与这类人交往，首要的任务是根据各个方面的信息，分析出他的真实内心，然后再对症下药，巧妙引导。如此的话，就能够把他们带到正确的交往轨道上来。<br/><br/>　　小宋想在出国留学之前，和恋人小薛办理结婚登记手续，可是接待他们的民政局婚姻登记处严主任说：“小宋啊，你离登记年龄还差两个月呀!法律有规定，别说差两个月，就是差两个小时都不行。”没办法，两个人一脸惆怅地回到家里，闻听此事的他家邻居、在公安局上班的迟科长说：“身份证上也没有精确到出生时辰呀，怎么会差两个小时都不行呢?这个严主任定是个口是心非的人。按照我们地方规定，像你们这种情况，是应该予以照顾的。这样吧，明天你们再去一趟，就说你的叔叔、民政局李局长的同学、公安局迟科长说严主任神通广大，体恤民情，会积极争取领导支持，给一个照顾指标的。”第二天，这种说法果然发生了效力。严主任沉思了半天，对他俩说：“昨天下午，我们才接到上级文件，情况非凡的青年男女应该予以照顾。<br/><br/>　　这样吧，你们填一下登记表格吧。”事情就这样顺利办好了。这位马主任是个典型的内圆外方形态人物，他表面上把自己装扮成一个道貌岸然、不循私情的人物，肚子里却装满了大鬼小鬼，为树“形象”，假话连篇。小宋俩人根据迟科长的提示，作了一下变通，从而使问题得到解决。我们社会要想健康发展，就应该果断不用严主任这样的人物担当重任。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1983n.com.cn/default.asp?id=57" /> 
	  <id>http://www.1983n.com.cn/default.asp?id=57</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[超强，用粉笔将大街变成3D立体瀑布]]></title>
	  <author>
		 <name>DuoHai</name>
		 <uri>http://www.1983n.com.cn/</uri>
		 <email>DuoHai@126.Com</email>
	  </author>
	  <category term="" scheme="http://www.1983n.com.cn/default.asp?cateID=5" label="杂七杂八" /> 
	  <updated>2008-01-17T11:26:32+08:00</updated>
	  <published>2008-01-17T11:26:32+08:00</published>
		  <summary type="html"><![CDATA[<img src="http://www.1983n.com.cn/attachments/month_0801/w2008117112537.jpg" border="0" alt=""/><br/><img src="http://www.1983n.com.cn/attachments/month_0801/d2008117112546.jpg" border="0" alt=""/><br/><img src="http://www.1983n.com.cn/attachments/month_0801/w2008117112558.jpg" border="0" alt=""/><br/><img src="http://www.1983n.com.cn/attachments/month_0801/g200811711269.jpg" border="0" alt=""/><br/><img src="http://www.1983n.com.cn/attachments/month_0801/h2008117112616.jpg" border="0" alt=""/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1983n.com.cn/default.asp?id=56" /> 
	  <id>http://www.1983n.com.cn/default.asp?id=56</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[美食厨房--水煮鱼]]></title>
	  <author>
		 <name>DuoHai</name>
		 <uri>http://www.1983n.com.cn/</uri>
		 <email>DuoHai@126.Com</email>
	  </author>
	  <category term="" scheme="http://www.1983n.com.cn/default.asp?cateID=4" label="幸福生活" /> 
	  <updated>2008-01-10T11:54:28+08:00</updated>
	  <published>2008-01-10T11:54:28+08:00</published>
		  <summary type="html"><![CDATA[<img src="http://www.1983n.com.cn/attachments/month_0801/v2008110115358.jpg" border="0" alt=""/><br/>原料：鲈鱼、罗非鱼、鲶鱼为佳<br/>配料：豆芽，或自己喜欢的蔬菜<br/>调料：姜(一大块、拍松切片)、蒜(一头，略拍即可，不必切)、葱适量、豆瓣(或剁椒)、花椒、干红辣椒、辣椒粉、盐、味精、胡椒粉、料酒、酱油、醋少许、食用油。<br/>另需：生粉、料酒、盐少许，蛋白一个。<br/><br/><br/>做法：　 <br/><br/>　　1、将鱼杀好洗净，剁下头尾，片成鱼片，并把剩下的鱼排剁成几块。将鱼片用少许盐、料酒、生粉和一个蛋白抓匀，腌15分钟。头尾及鱼排另装盘，用同样的方法腌制) <br/><br/>　　2、烧开一小锅水，将豆芽洗净后，放入开水中烫一下，捞入大盆中，按个人口味撒一点盐，备用。 <br/><br/>　　3、在干净的炒锅中加平常炒菜三倍的油，油热后，放入三大匙豆瓣(或剁炒)爆香，加姜、蒜、葱、花椒粒、辣椒粉及干红辣椒中小火煸炒。出味后加入头尾及鱼排，转大火，翻匀，加料酒和酱油、胡椒粉、白糖适量，继续翻炒片刻后，加一些热水，同时放盐和味精调味(要尝一下咸淡)。待水开，保持大火，一片片将鱼片放入，用筷子拨散，3~5分钟即可关火。把煮好的鱼及全部汤汁倒入刚才盛豆芽的大盆中。 <br/><br/>　　4、另取一干净锅，倒入半斤油(具体油量要看准备的容器大小，以倒入大盆中时，把鱼和豆芽全部淹没为准，可以目测一下)。待油热后，关火先晾一下。然后加入多多花椒及干辣椒(看个人的嗜麻辣程度)，用小火慢慢炒出花椒和辣椒的香味。注重火不可太大，以免炒糊。 <br/><br/>　　5、辣椒颜色快变时，立即关火，把锅中的油及花椒辣椒一起倒入盛鱼的大盆中。这样香喷喷的水煮鱼就好了。<br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1983n.com.cn/default.asp?id=53" /> 
	  <id>http://www.1983n.com.cn/default.asp?id=53</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[美食厨房--水煮肉片]]></title>
	  <author>
		 <name>DuoHai</name>
		 <uri>http://www.1983n.com.cn/</uri>
		 <email>DuoHai@126.Com</email>
	  </author>
	  <category term="" scheme="http://www.1983n.com.cn/default.asp?cateID=4" label="幸福生活" /> 
	  <updated>2008-01-10T11:48:04+08:00</updated>
	  <published>2008-01-10T11:48:04+08:00</published>
		  <summary type="html"><![CDATA[<img src="http://www.1983n.com.cn/attachments/month_0801/02008110114742.jpg" border="0" alt=""/><br/>&nbsp;&nbsp; 原料： <br/>&nbsp;&nbsp;&nbsp;&nbsp;猪通脊肉250克，芹菜、莴笋叶、青蒜、姜、葱、蒜、豆瓣辣酱、酱油、淀粉、盐、鸡精、花椒粒、干红辣椒各适量。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;制作方法：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;①猪通脊肉切成片后用少许酱油和水淀粉浆一下；<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;②芹菜洗净切成段，青蒜拍松斜切成小段，莴笋叶洗净切成段；<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;③葱、姜、蒜切丝，豆瓣辣酱用刀剁碎；<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;④坐锅，放少量油，油烧热后放入豆瓣辣酱，炒出红油后放入葱、姜、蒜翻炒几下，放少量水，开锅放入少许盐、鸡精，放入青菜，断生后捞出装入碗内，将浆好的肉一片一片滑入锅内，待肉变色熟透后连汤一起装入碗内；<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;⑤将锅洗净烧热，将花椒粒、干红辣椒倒入锅内翻炒焙脆后，倒在案板上碾碎，撒在煮好的肉片上；<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;⑥坐锅，倒入少量油，烧热后淋在肉片上即可。<br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1983n.com.cn/default.asp?id=52" /> 
	  <id>http://www.1983n.com.cn/default.asp?id=52</id> 
  </entry>	
		
</feed>