<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[昭苏博客]]></title>
<link>http://www.3exware.com/home/</link>
<description><![CDATA[蛰伏者终昭苏]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[kmandzs@gmail.com(kmzs)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>昭苏博客</title>
	<url>http://www.3exware.com/home/images/logos.gif</url>
	<link>http://www.3exware.com/home/</link>
	<description>昭苏博客</description>
</image>

			<item>
			<link>http://www.3exware.com/home/article/articles/81.html</link>
			<title><![CDATA[我是热烈的]]></title>
			<author>kmandzs@gmail.com(kmzs)</author>
			<category><![CDATA[文章感悟]]></category>
			<pubDate>Wed,01 Sep 2010 18:48:53 +0800</pubDate>
			<guid>http://www.3exware.com/home/default.asp?id=81</guid>
		<description><![CDATA[<p><span style="font-size: 14px;">我是热烈的<br />
是炎炎烈日下<br />
炽热无垠沙海中<br />
熊熊燃烧的火<br />
<br />
脚下沙粒间<br />
源源渗出的天然石油啊<br />
请继续滋养我<br />
让我燃得更猛<br />
<br />
后羿哥<br />
撇下你的弓 抛掉你的箭<br />
让所有的太阳一同炙烤我的背<br />
让十倍高温的热风全力助长我的焰<br />
<br />
天边那娇美的凤凰啊<br />
快舞动着你的姿扑向我<br />
我将耗尽所有的能<br />
用千万度的热情<br />
把您化为灰烬<br />
与您共赴新生<br />
<br />
（昭苏于2010年8月22日凌晨半醒时刻）<br />
</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.3exware.com/home/article/technique/80.html</link>
			<title><![CDATA[[REAL Studio]保存文件位置信息]]></title>
			<author>kmandzs@gmail.com(kmzs)</author>
			<category><![CDATA[开发技术]]></category>
			<pubDate>Sun,15 Aug 2010 17:18:54 +0800</pubDate>
			<guid>http://www.3exware.com/home/default.asp?id=80</guid>
		<description><![CDATA[<span style="font-size:11pt;line-height:100%;">有时候我们需要保存文件的位置信息以便在程序下次运行时找到这个文件，比如文件菜单中的“最近打开的文件”之类。如果这个文件需要让各种程序都能找到，那么只能保存文件的绝对路径。如果只要被REAL Studio程序使用，那么应该保存SaveInfo。<br/><br/>SaveInfo需要通过FolderItem类的GetSaveInfo方法来获取，这个方法有两个参数，第一个是相对路径（也是一个FolderItem实例），后一个是个可选的模式参数。<br/><br/>举例如下（假设有个全局字符串变量s）：<br/><br/>&nbsp;&nbsp;Dim f,d as FolderItem<br/>&nbsp;&nbsp;f=Volume(0).Child(&#34;Doc&#34;).Child(&#34;abc.txt&#34;)<br/>&nbsp;&nbsp;d=Volume(0).Child(&#34;Doc&#34;)<br/>&nbsp;&nbsp;s=f.GetSaveInfo(d)<br/>&nbsp;&nbsp;<br/>在Windows上，f是C:\Doc\abc.txt，d是其所在的文件夹，但其实d可以是任何一个文件或文件夹。上述代码执行后，s中就保存了文件f的SaveInfo，可以将其写入程序设置文件、某个数据库、注册表或defaults中，以便于以后读取。<br/><br/>要从SaveInfo中解析出文件，只要这样：<br/><br/>&nbsp;&nbsp;Dim f As New FolderItem<br/>&nbsp;&nbsp;f=f.GetRelative(s)<br/><br/>那么使用SaveInfo有什么好处呢？主要有两点：<br/><br/>1）用于通过相对路径找到文件。比如某个文件夹A中有文件b，在调用GetSaveInfo时，将A传入，即s=b.GetSaveInfo(A)；随后如果你整体移动了文件夹A（b仍在A内），在试图解析出b时，通过b=A.GetRelative(s)，仍然可以找到b，当然这里的A必须是指向移动后的文件夹。<br/><br/>2）即便不需要上面这个好处，也应该使用GetSaveInfo，它不光保存了相对、绝对路径，还保存了其他信息，使得更名或移动过的文件（主要在Unix系统上）仍能被找到。比如在Mac上，使用s=f.GetSaveInfo(Volume(0))并将s的值保存起来，以后即使文件f被改名或移动（严格的说是在当前磁盘分区，或者说卷内移动，当然在Mac上跨磁盘移动不容易，要Command+Shift+拖曳文件），仍然能通过所保存的SaveInfo解析到更名或移动后的文件。对这种用法，向GetSaveInfo中传入什么都没问题，此处传入Volume(0)，是因为Volume(0)是系统盘根目录，只要不是无盘工作站之类，这个FolderItem都不会为Nil，而且它的“位置”通常极少可能会改变。<br/><br/>因此在REAL Studio中首选应该保存SaveInfo而不是AbsolutePath。这样至少在Mac上，不会由于文件移动或更名而找不到。大部分Mac软件的Open Recent子菜单都不会由于文件被移动而无效，但一些只追求跨平台而忽视native特性的公司的产品或许会这样，比如Adobe的一些软件。</span>]]></description>
		</item>
		
			<item>
			<link>http://www.3exware.com/home/article/articles/79.html</link>
			<title><![CDATA[[确定且复杂的世界]十二条概要]]></title>
			<author>kmandzs@gmail.com(kmzs)</author>
			<category><![CDATA[文章感悟]]></category>
			<pubDate>Wed,11 Aug 2010 17:43:44 +0800</pubDate>
			<guid>http://www.3exware.com/home/default.asp?id=79</guid>
		<description><![CDATA[<p><span style="font-size: 15px;">&nbsp;&nbsp;&nbsp; 人类每每在物理或人文的世界里向前踏出一步后，在获得新的知识以归纳或解释以往看到的现象的同时，我们总是很疑惑地发现，新的理论要么是一种只在更大范围内有效的，可能在未来会被推翻的，不甚完备的假说，要么是观察分析所得到的更深一步的现象，而导致这些现象的进一步原因，或者说这些现象所对应的本质还在更深处。<br />
<br />
&nbsp;&nbsp;&nbsp; 因此《确定且复杂的世界》一文，虽然是本人对自己当下的世界观的一个总结，但也不过是从某个角度，在某个层次上进行思考的所感所得。这些思考肯定是有失片面的，而且在一些地方混用了略有差异的词汇，或选择了不太恰当的术语，但是或许仍然多少有些启发作用。<br />
<br />
&nbsp;&nbsp;&nbsp; 原文冗长而带有较多细节上地推导或阐述（还有一小半仍是草稿或提纲），提取一些核心内容进行梳理是有必要的。在此对其中大部分主要观点简要概述如下：<br />
<br />
1、世界的未来存在确定的结果，人类一定无法准确预测到世界在未来某时刻的精准的状态，但不能由此认为世界有多种结果或可能有或然的结果。<br />
<br />
2、人所生活的世界，是一个极为复杂的世界，那些看似无关主旨的因素所带来的影响与误差往往不可以被完全忽略。它们的累积，会使世界在表象上看起来是极具偶然性和随机性的。但是，由于任何具有偶然性的事物都有几乎无限多的使其不得不发生的诱因，而任何具有随机性的事物不过是相关影响因素过多而使人无法事先预测到其最终的结果。这些诱因或因素中的哪个都不会无理由的出现或不出现，因此世界在未来的状态是确定的，但又是处于世界之中的人类而无法准确预测的。<br />
<br />
3、将所发生的任何一个事件作为结果，向上逆推都会得到一个庞大无垠的因果树，这些&ldquo;树&rdquo;上的每个枝丫和叶子都是一个导致结果的直接或间接的必要条件。真正的或者说绝对意义上的充分条件是不存在的。可以说，所有事件的结果都是由多个条件引致的，这些条件甚至都不是有限可列的，因此能用语言描述的严格的规律是不存在的。世界为逆蕴含关系所充满，随处可见的都是些被称为规律的不完全的&ldquo;真全称命题&rdquo;。这也导致许多人只愿意用&ldquo;趋势&rdquo;之类模糊的词汇来称呼一些事件中含有的规律性。<br />
<br />
4、内因并非是完全内生的因素，它们只是在特定时点静态地观察和分析某物体而得到的。从历史角度动态地来看，内因是历史上各种外生性原因在集聚、融合和抵充、消解后的所得的产物，或者说是历史上种种外因的综合与凝结，而不像听上去的那样是由内部自行产生的，更不是外因的严格对立面。<br />
<br />
5、对于某个事件或物体（包括个人或组织等复杂物体），当某个外部事物出现时，它需要先通过由此前的外因所综合凝结成内部状态的过滤和筛选。一些外物会被完全排斥，剩余的会对内部状态进行一定程度的增加、强化，或破坏、抵消，最终以复杂的形式构成了此后内部状态，即后续问题的内因。随后的外物（对人来说比如外部物质和信息的摄入）会不会对物体起作用，会起什么样的作用，以及会其多大的作用，则在很大程度上由内因──历史上的外因的综合凝结体──来决定。以此循环往复，从而决定了这个物体的现在并影响到它的未来。总之，从历史的角度看，每个内因都是由一些历史上的外因和当时的各种内因交互影响而成的，并非字面看上去那样像是完全内生的。<br />
<br />
6、文化是一个民族或地区在历史上的外因的综合凝结和内化，并随着历史的发展逐渐形成和演变。经济因素亦是要通过一种内化的外因而起作用的，这种内化的外因就是作为生物体的人的个体，在孕生和成长过程中形成的对物的欲望。文化与经济因素之间也会彼此的影响，这是一种复杂的相互作用。从马克思的视角来看，这是生产关系和生产力之间的作用与反作用，但应该不仅限于此。<br />
<br />
7、任何物体都经历了从无到有的形成过程，这并不是说从虚无中会诞生物质，而是说任何物体都是由本不属于它的外来因子，以或简单或复杂的形式物组合或结合而成的。<br />
<br />
8、从无到有的过程，准确地说是个从非到是的过程。非与是之间的分水岭往往不甚明确，这一般而言也是量变与质变之间的分水岭。在这个分水岭前的许多因素，对其后的状况仍有不可忽视的影响。因此，或许可以得到这样一个假说：越早出现的外部因素对物体通常有越本质性的、决定性的作用。如果最初的基因决定将诞生的是一只猴子的话，即使在怀胎时和诞生后摄入的物质对大脑、神经系统和内分泌系统等的改善作用再大，即使进行再好的胎教和出生后的教育，这个东西也不可能具有人的智慧。<br />
<br />
9、作为个体的人也经历了从无到有，从非到是的形成阶段，并继续发展。构成人体的每个分子、每个基因都不不是人体中内生的，它们来源于外界，前者还会通过新陈代谢而与外界交换。影响人的思想的形成的每条信息也都来自于外部，且会互相影响，互相增强，或者互相抵消。各种物体的性质和人的思想，在形成和发展过程中都主要受外物的影响，这些外部事物在为人所遇见前（事）或要进入人体前（物）是外因，在影响发生后则由综合凝结而内化，转换为了内因。<br />
<br />
10、与其说人的精神世界（心理、性格、思想、意识等）是被基因和环境所决定的，不如说是被体质和信息所决定的。由于体质的决定因素可以归结为基因和摄入物两者。因此可以说人的精神世界是由基因、摄入物和所接触到的信息这三类外物的相互作用所决定的。<br />
<br />
1）来自父母的基因，几乎是最早出现的外因，对大脑和身体状况有显著的决定性影响。其中，对大脑组织结构的决定性影响，很大程度上决定了人的大脑、神经系统等功能和人智力水平。而大脑功能（比如大脑的各个部分分泌的各种激素和脑髓液的能力等）及受大脑功能决定的智力水平等都可以直接影响到人的心理、性格和思维方式。而基因对身体其他系统的体质的决定性作用，则会逐渐地间接地对人的心理、性格等产生影响。<br />
<br />
2）在出生前从母体摄入的各种物质（严格地说，还应该包含配子本身提供的少量物质），和出生后从外界摄入的各种物质，不但对身体发育产生影响，对大脑、神经和内分泌系统的功能有重要的影响，因而会对来自基因的决定性因素予以增强或抵消，从而影响人的精神世界。<br />
<br />
3）人在未出生之前就会先产生意识并通过尚未发育完全的器官获取一些信息。随后，人的每时每刻（可能除了少数深度休克状态之外）都在获取信息，这些信息（外部因素）依照其被人所感知的先后顺序进行内化，与当时人的思想意识相互增强、融合、抵消或被排斥，最终或大或小的对人的精神世界施予了影响。<br />
<br />
总之，精神世界从产生之初就受物质世界（基因、构成身体的各种物质──当然都源于外部）的影响和控制，在形成发展过程中，还要不停地受外部信息的强化或扰动。<br />
<br />
11、要改变一个人的某种行为，就要施予足够强烈的外部刺激，以抗衡或在一定程度上转变由以往的外因逐渐综合凝结而成的精神世界。因此，改变一个人的某个行为的成本可能非常高。这需要耗费大量的资源和时间去思考和寻找对其有效的刺激，并予以施行。如果这种成本超出可接受的阀值，人又无法改变自己去适应和接受对方，那么人们可能会放弃改变他人，而采取更激进的策略：对于自己的合作者（比如同事、情侣、配偶等），将设法予以弃离或更换；对于对手和敌人，则甚至会设法干脆将其消灭。<br />
<br />
12、人作为一种高级而复杂的生命体，存在主观能动性是毋容置疑的。但从上述各点可知，所谓的人的主观状况并非是一种纯粹的内生的主观，而是受历史上的外部因素决定的主观，即受从两个配子结合开始至今经历或摄入的各种事物决定的主观。因而作为个人，其主观能动性是受限的。也正是由于这种有限性，如何认识自我和突破自我才是一个永恒的命题。</span></p>
<p>&nbsp;</p>
<p style="text-align: right;"><span style="font-size: 13px;">（此概要着笔于2010年3月中旬，初定于2010年8月11日）</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.3exware.com/home/article/technique/77.html</link>
			<title><![CDATA[通过编程访问Google账户和服务]]></title>
			<author>kmandzs@gmail.com(kmzs)</author>
			<category><![CDATA[开发技术]]></category>
			<pubDate>Sat,31 Jul 2010 21:38:24 +0800</pubDate>
			<guid>http://www.3exware.com/home/default.asp?id=77</guid>
		<description><![CDATA[<span style="font-size:10pt;line-height:100%;">本文介绍通过桌面程序访问Google账户和Google服务的方法。以Google Calendar服务为例，使用Google Calendar API 2.0版。<br/><br/>1、Google账户登录<br/>通过程序登录Google账户的方法有很多，最简单的方法是使用ClientLogin这个API，在桌面程序中一般可以使用这种方式。为了测试，可以直接在浏览器中调用这个API来看结果，URL类似这样：<br/><br/><a href="https://www.google.com/accounts/ClientLogin?accountType=HOSTED_OR_GOOGLE" target="_blank" rel="external">https://www.google.com/accounts/ClientLogin?accountType=HOSTED_OR_GOOGLE</a>&amp;Email=YourAccount@gmail.com&amp;Passwd=PASSWORD&amp;service=xapi&amp;source=YourCompany-YourApp-Version<br/><br/>其中Email=YourAccount@gmail.com是你的Google账户Email地址，Passwd=PASSWORD是账户的密码。service是要访问的服务名，对于Google Calendar服务，要传递cl。source是登录来源，也就是你的程序的名称之类。注意上面的关键字是区分大小写的，比如“Email=”中的“E”一定要大写。<br/><br/>以REALbasic语言为例，来看看怎么用程序来处理。在这里我们使用同步模式的HTTPSecureSocket来发送请求。<br/>Dim https As New HTTPSecureSocket<br/>https.Yield=True // 同意让渡CPU时间，以防在发送请求过程中界面长时间停止响应<br/>Const PostURL=&#34;<a href="https://www.google.com/accounts/ClientLogin" target="_blank" rel="external">https://www.google.com/accounts/ClientLogin</a>&#34;<br/>Dim form As New Dictionary // 使用字典组装表单，这比用“+”运算符连接字符串来组装URL要方便<br/>form.Value(&#34;accountType&#34;)=&#34;HOSTED_OR_GOOGLE&#34;<br/>form.Value(&#34;Email&#34;)=“YourAccount@gmail.com&#34;<br/>form.Value(&#34;Passwd&#34;)=&#34;PASSWORD&#34;<br/>form.Value(&#34;service&#34;)=&#34;cl&#34; // 指定访问Google Calendar服务<br/>form.Value(&#34;source&#34;)=&#34;REALSoftware-REALStudio-&#34;+RBVersionString<br/>https.SetFormData(form) // 将表单指派给https，会对特殊字符编码，比如空格会被转为“%20”。<br/>Dim ResultValue As String<br/>ResultValue=https.Post(PostURL,20) // POST表单到指定地址，20秒无返回则自动超时<br/><br/>如果成功（https.HTTPStatusCode=200），ResultValue中将得到类似这样的3行返回结果（失败的话https.HTTPStatusCode=403并会返回错误信息）：<br/>SID=DQAAAH4AAADifYYKy7p9Lg7KdT4BW3zb7RvFmKJm7iJgQ2hjpTG6CLhVnQPFybD8t_odSpU5ZgODxcXnGi50cc-Ky8u-O0KaQiCEydE9RurCkoLEywY7a6trnN6mQW5SmcgjiNCwqiIzhAvQcu-0RFrvKQNJX78GQE4fFE_fs4uX2GTYleQGQg<br/>LSID=DQAAAIAAAABWZhQlKvg2elXVWVttR23V2AWMu57XXvOiJJbGrHlUZW-96nsaokBwCzxs8_edWSDZOU3lU71R14u8QntrODC7WAFlBMkG04GZzIND7WPqX73t--dUAkYVlDoyfwP4N7bTNrg5VsOeeYervrxs_ADg8MBpqlnw-bbjIcyIub8org<br/>Auth=DQAAAIAAAABWZhQlKvg2elXVWVttR23V2AWMu57XXvOiJJbGrHlUZW-96nsaokBwCzxs8_edWSC5iZ0YUERmdfIogOo05uk-YFGm0na7lYS_yT-_BNOLSBZeDcwtOOp9osxbv_7oUdGHbfhOoDza6G-ISUZM4dYgkDNmWyOqjTUwwbWAbbjU4w<br/><br/>这里我们只需要使用最后一行“Auth=”后面的内容（称为验证令牌）。将它解析出来保存到字符串变量AuthToken中（解析过程略），然后要设置一下后续的Google账户访问时需要发送的HTTP报头：<br/>https.SetRequestHeader(&#34;Authorization&#34;,&#34;GoogleLogin auth=&#34;+AuthToken) // 将验证令牌放入Authorization请求头中<br/>https.SetRequestHeader(&#34;GData-Version&#34;,&#34;2&#34;) // 如本文开头所说，我们要使用2.0版的API，所以设置GData-Version头<br/><br/>2、调用Google Calendar API<br/>下面这个API用于获取已登录的用户的所有日历：<br/><a href="https://www.google.com/calendar/feeds/default/allcalendars/full" target="_blank" rel="external">https://www.google.com/calendar/feeds/default/allcalendars/full</a><br/>要使用这个API，只要继续用上面那个设置好验证令牌的HTTPSecureSocket实例向这个地址发送GET命令即可。<br/>Const AllCalendarURL=&#34;<a href="https://www.google.com/calendar/feeds/default/allcalendars/full" target="_blank" rel="external">https://www.google.com/calendar/feeds/default/allcalendars/full</a>&#34;<br/>dim v As String=https.Get(AllCalendarURL,20) // 这次用GET（不要用POST），超时仍然选20秒<br/><br/>但得到的返回值v中的多半不是XML格式的日历列表，而是像这样一个HTML页面：<br/>- &lt;HTML&gt;<br/>- &lt;HEAD&gt;<br/>- &lt;TITLE&gt;Moved Temporarily&lt;/TITLE&gt;<br/>- &lt;/HEAD&gt;<br/>- &lt;BODY BGCOLOR=&#34;#FFFFFF&#34; TEXT=&#34;#000000&#34;&gt;<br/>- &lt;H1&gt;Moved Temporarily&lt;/H1&gt;<br/>The document has moved &lt;A HREF=&#34;<a href="https://www.google.com/calendar/feeds/default/allcalendars/full" target="_blank" rel="external">https://www.google.com/calendar/feeds/default/allcalendars/full</a>?gsessionid=gC7NAlsQASjnE_wXPF1kxQ&#34;&gt;here&lt;/A&gt;.<br/>- &lt;/BODY&gt;<br/>- &lt;/HTML&gt;<br/><br/>此时，如果检查https的HTTPStatusCode属性，会发现它的值是302，而不是200（OK，正常）。 302在HTTP协议里是Redirect（重定向）的意思，重定向到了上面那个HTML中显示的地址。我们不需要从HTML里解析它，一则这样太麻烦，二则Google可以自己决定对于302这个状态应该返回什么样的正文文本，如果Google做了些改动，我们解析方法可能就失效了。那怎么办呢？应该想到HTTP协议返回的内容不光只有页面正文，还有页面报头。我的经验是，进行通过HTTP访问某个网站开放的API一类的开发，经常检查一下返回的页面的报头是个好习惯。可以通过HTTPSecureSocket的PageHeaders方法，或在调试器中看_pageHeaders属性来查看报头，对于上面的GET操作，我们会看到这样一组报头：<br/>Expires: Sat, 31 Jul 2010 12:43:48 GMT<br/>Date: Sat, 31 Jul 2010 12:43:48 GMT<br/>Set-Cookie: S=calendar=gC7NAlsQASjnE_wXPF1kxQ;Expires=Sun, 31-Jul-2011 12:43:48 GMT;Secure<br/>Location: <a href="https://www.google.com/calendar/feeds/default/allcalendars/full?gsessionid=gC7NAlsQASjnE_wXPF1kxQ" target="_blank" rel="external">https://www.google.com/calendar/feeds/default/allcalendars/full?gsessionid=gC7NAlsQASjnE_wXPF1kxQ</a><br/>Content-Type: text/html; charset=UTF-8<br/>Cache-Control: private, max-age=0<br/>X-Content-Type-Options: nosniff<br/>X-Frame-Options: SAMEORIGIN<br/>X-XSS-Protection: 1; mode=block<br/>Server: GSE<br/><br/>可以看到Location头的值正是跳转目标的URL，和HTML中显示的URL一致。<br/>那么我们也进行“重定向”，向新地址发送GET命令：<br/>Dim headers As InternetHeaders=https.PageHeaders // 读出所有InternetHeaders<br/>Dim Result As String<br/>If headers&lt;&gt;Nil Then<br/>&nbsp;&nbsp;Dim RedirectTo As String=headers.Value(&#34;Location&#34;) // 读取Location头，以得到重定向地址<br/>&nbsp;&nbsp;If RedirectTo&lt;&gt;&#34;&#34; Then Result=https.Get(RedirectTo,20) // 继续GET，向新地址请求数据<br/>End If<br/><br/>但是结果很可惜，我们得到了又一个类似上面那样的HTML和一个新的302，如果继续下去你会得到永无止境的大体相同的HTML和302状态。为什么会这样呢？比较一下各次得到的正文内容或Location头，你会发现差异在URL里的gsessionid=xxxxxxxx一段。这段内容给出了会话ID（或者叫会话种子，Seed），这意味着我们必须使用这个会话才能继续执行后续的API。<br/><br/>要注意，HTTP协议是一种无连接协议，客户端发送请求时建立连接，服务器响应请求返回了数据后，连接立即断开。对于Google API，为了避免每执行一个API函数就进行一次登陆验证，服务器端会以会话ID为索引保存一个上下文。相应地，在客户端向服务器发送请求时也必须同时发送这个会话ID，以使服务器知道它所保存的哪个上下文和这个客户端对应。因此客户端也要保存这个会话ID和一些信息，以便在发送请求时使用，客户端所保存的东西被称为Cookie。<br/><br/>在REALbasic语言的HTTPSecureSocket类中怎么使用这些“曲奇饼干”呢？回过头来再看上面的那组报头，发现有一个名为Set-Cookie报头，可以看到其中也包含gsessionid的内容。这就是我们要保存并在后续访问中使用的Cookie了。所谓的“在后续访问中使用”，意思就是在后续的请求中作为报头发送给服务器。因此可以不必使用额外的变量，只要像上面保存验证令牌和GData版本号那样将Cookie缓存到https对象的RequestHeader里面就行了。现在修改上面的代码如下：<br/>Dim headers As InternetHeaders=https.PageHeaders // 读出所有InternetHeaders<br/>Dim Result As String<br/>If headers&lt;&gt;Nil Then<br/>&nbsp;&nbsp;Dim Cookie As String=headers.Value(&#34;Set-Cookie&#34;) // 从Set-Cookie头读出Google要求我们使用的Cookie<br/>&nbsp;&nbsp;Dim RedirectTo As String=headers.Value(&#34;Location&#34;) // 从Location读出重定向地址<br/>&nbsp;&nbsp;If RedirectTo&lt;&gt;&#34;&#34; Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;If Cookie&lt;&gt;&#34;&#34; Then https.SetRequestHeader(&#34;Cookie&#34;,Cookie) // 将Cookie写入请求报头中<br/>&nbsp;&nbsp;&nbsp;&nbsp;Result=https.Get(RedirectTo,20) // 向新地址请求数据<br/>&nbsp;&nbsp;End If<br/>End If<br/><br/>这回Result中将收到含有日历列表的一个XML格式的字符串（实际上是Google Data格式的，也可以是RSS或Atom格式）。接下来只要用XMLDocument和相关的类进行解析，就能获取我们想要的数据了。</span><br/><br/>（转载请注明来源：<a href="http://www.3exware.com/home/default.asp?id=77" target="_blank" rel="external">http://www.3exware.com/home/default.asp?id=77</a>）]]></description>
		</item>
		
			<item>
			<link>http://www.3exware.com/home/article/articles/76.html</link>
			<title><![CDATA[[枕上文]堂兄妹与表兄妹数量差不多？]]></title>
			<author>kmandzs@gmail.com(kmzs)</author>
			<category><![CDATA[文章感悟]]></category>
			<pubDate>Sun,25 Jul 2010 23:39:47 +0800</pubDate>
			<guid>http://www.3exware.com/home/default.asp?id=76</guid>
		<description><![CDATA[<span style="font-size:12pt;line-height:100%;">估计是由于独生子女和城市小家庭的原因，绝大多数80后似乎都下意识地认为自己的堂兄妹与表兄妹的数量差不多。并且觉得如果两者数量差距较大的话，那么原因在于祖父母的子女和外祖父母的子女数量本身差别很大。但实际上并非如此。总体而言，一个人的表兄弟姐妹肯定比堂兄弟姐妹在数量要多上许多。以三代以内旁亲为限。可以看到，堂兄弟姐妹都是你祖父或其兄弟的孙子、孙女（与你同姓）。<br/>但同辈的表亲则要复杂多了，劳动了一下脑细胞，发现可以分为以下十一类：<br/>1、外祖父及其兄弟的孙子、孙女（舅表，与母亲同姓）<br/>2、外祖父的姐妹的孙子、孙女（舅表，姓氏不定）<br/>3、外祖父及其兄弟姐妹的外孙、外孙女（舅表，姓氏不定，自己不算哦）<br/>4、外祖母的兄弟的孙子、孙女（舅表，与外祖母同姓）<br/>5、外祖母的姐妹的孙子、孙女（舅表，姓氏不定）<br/>6、外祖母的兄弟姐妹的外孙、外孙女（舅表，姓氏不定）<br/>7、祖父的姐妹的孙子、孙女（姑表，姓氏不定）<br/>8、祖母的兄弟的孙子、孙女（姑表，与祖母同姓）<br/>9、祖母的姐妹的孙子、孙女（姑表，姓氏不定）<br/>10、祖父及其兄弟姐妹的外孙、外孙女，其中包括父亲的姐妹（姑姑）所生的儿女（姑表，姓氏不定）<br/>11、祖母及其兄弟姐妹的外孙、外孙女（姑表，姓氏不定）<br/>总之，我把仨爷爷家的所有同辈堂亲加载一起也不会超过10个，但表兄弟姐妹却多得……十有八九能编成一个团。</span>]]></description>
		</item>
		
			<item>
			<link>http://www.3exware.com/home/article/articles/74.html</link>
			<title><![CDATA[艳遇]]></title>
			<author>kmandzs@gmail.com(kmzs)</author>
			<category><![CDATA[文章感悟]]></category>
			<pubDate>Wed,23 Jun 2010 15:38:39 +0800</pubDate>
			<guid>http://www.3exware.com/home/default.asp?id=74</guid>
		<description><![CDATA[<p><span style="font-size: 14px;">入夏以来，由于门窗敞开，我的八平米的斗室已经被许多六条腿的小精灵们造访过了。<br />
<br />
其中少不了蚊子若干，苍蝇一对。对这一类的不速之客，一经发现，我一向是不顾念什么生态平衡或生物伦理直接送他们往生极乐的。这也免不了大义灭亲地扑杀了几只跟我血脉相连体内流着我的血的小蚊──我可不指望他们给我养老送终哦。<br />
<br />
在目送了一只误入的蜜蜂乖乖飞去，以及撵走了一羽对鄙人的陋室颇为留恋的蛾子之后。前天晚上又被一花里胡哨的小瓢虫光顾了。问题是咱没有饲养这种小不点儿的经验，思来想去，最后还是隔着一小片餐巾纸轻轻捏住它，将它送回了苍茫的夜空。<br />
<br />
然后我决定把窗关小，傍晚开灯后不光拉好窗帘，还将两头压住。本以为这下可以大幅减少这类没有物权观念的小东西对私人领地的随意入侵了，哪知道昨天晚上竟然出现了一头牛蹲坐在我的凉席上。乍看上去还以为是只小强，随手抄起本书欲拍，才发现这个同样伸着两只长长的触角的家伙，身体黝黑而狭长，慢条斯理懒洋洋的也不像小强那么机谨，原来是只墨天牛。要是早上十几年，它估计就被我圈养起来了，慢慢玩弄了。要是早上二十来年，它肯定会被我好好的欺负一下，搞不好还会惨死于吾之魔爪。不过现在我对这些飞禽走兽们却心怀厌恶，略感恶心──尤其是当她们一登门造访就急于跟你同床共枕的时候。无奈之下，我只好作了一回放牛娃，将这头天上来的仙牛赶回它的天然牧场。在它不甚情愿的被驱离的一霎那，我下意识地忽然想，竟然没请人家吃上一顿便饭就将人送走了，好像不是待客之道哩&hellip;&hellip;<br />
<br />
法布尔老爷子泉下有知一定会羡慕我的种种艳遇，不过我看来是没耐性消受这种艳福的。唉，我是不是该想办法给这两扇该死的窗户装上个纱窗啊，否则难保哪天家里就变成第二座荒石园了！<br />
</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.3exware.com/home/article/articles/73.html</link>
			<title><![CDATA[[断章碎语]男为悦己者穷]]></title>
			<author>kmandzs@gmail.com(kmzs)</author>
			<category><![CDATA[文章感悟]]></category>
			<pubDate>Fri,18 Jun 2010 17:35:11 +0800</pubDate>
			<guid>http://www.3exware.com/home/default.asp?id=73</guid>
		<description><![CDATA[<span style="font-size:13pt;line-height:100%;">最近听到句怪话叫“士为知己者死，男为悦己者穷”，那遇到异性知己非得死穷死穷的不可。不过，《孙子兵法·九地》篇中有云：投之亡地而后存，陷之死地然后生。《易经·系辞》中又讲：穷则变，变则通，通则久。死而后生，穷以致久，虽人生如是，岂为恶事哉？！</span>]]></description>
		</item>
		
			<item>
			<link>http://www.3exware.com/home/article/articles/75.html</link>
			<title><![CDATA[分班制的背后是对“差生”的歧视]]></title>
			<author>kmandzs@gmail.com(kmzs)</author>
			<category><![CDATA[文章感悟]]></category>
			<pubDate>Thu,03 Jun 2010 17:14:19 +0800</pubDate>
			<guid>http://www.3exware.com/home/default.asp?id=75</guid>
		<description><![CDATA[<span style="font-size:13pt;line-height:100%;"><strong>观点概述：高级中学通常会以成绩对学生进行分班，并将教学水平最高的教师集中于最好的几个班级中，这是一种有悖公平的歧视性做法，是现行招考体制所带来的一种副作用。</strong><br/><br/>中学，尤其是高级中学里，按成绩分快慢班的状况非常普遍。每个年级通常会有一到两个快班，又称好班、重点班或直升班，剩下的均为普通班，其中重点班的人数一般占年级学生人数的20%左右。表面上看这是一种惯例，但实际上是一种不合理的歧视性做法。<br/><br/>分班制为成绩好的学生提供了更好的学习环境和一定的竞争压力，但它的的目的并不仅在与此，而主要在于将更好的教师资源提供给重点班，让普通班那些在成绩上缺乏优势的学生配着教学水平不够突出的老师去一起自生自灭。这是一种性质恶劣的公开化的歧视行为，完全有悖于公平原则。从社会学角度看，这是一种人身不公——对每个人给与不同的待遇。从经济学角度看，这又是一种市场不公——对支付相同费用的人给与不同质量的服务。<br/><br/>前一阵子发生了这样一件事，上海某实验性示范性高中一个高三重点班的学生和家长们，竟然为了某一个学科的老师的教学水平相比同样教这个班的其他学科的老师来有所不足，而与校方争执不休。那位老师已经连续带过几届高三普通班，并未有学生反映其教学能力或方法有什么严重问题，只是由于同学科组的一位资深的老教师退休，他才开始改带重点班。随高考临近，争吵逐渐升级，家长们竟然扬言要考后集体上访控告学校。难道“好班必须要配最好的老师”被写入什么法律了？最终，校方让步，取消了那名教师本学期剩余的教学工作，令其回家临时“待业”，并更换了另一位老师来负责这个班级考前最后几周的复习课程。由此可见，大家对这种歧视性的做法不但习以为常，而且还广泛认可，将其作为理所应当的行径。<br/><br/>那么这种歧视性做法是由于什么而产生的呢？可能有人会觉得采用这种按成绩分班并将教学资源向快班倾斜的方案，其目的在于提高升学率。我觉得这最多不过是个次要的间接原因。广义的升学率中通常包括两个比拼指标。其一是升入高一级的普通学校的学生比例，这里的“普通学校是”指专科和职业技术类以外的学校，这个比例即狭义的升学率。其二是升入高一级的重点学校的比率，即重点率，对高中而言，这个比例也被称为一本率。此外还有一个叫做一本达线率的指标，是一本率的毛值。对于本地区最优秀的几所学校，它们可能还要互相比较另一个指标──升入公认的最顶级的几所高一级学校的学生的比例。但是在许多学校中，统计入上述任意一个指标范围的学生的总数都大于甚至远大于重点班的学生人数。上海考生的一本录取率显然也远高于20%。因而这种歧视性做法与升学率或许具有一定的正相关性，但并无必然的因果联系。<br/><br/>不可否认还有其他一些诱导因素，但笔者认为这种现象实际上是双向选择的招生制度的一种负外部性，或者说副作用，因此其直接原因是学生所具有的择校权利。这种双向选择制度通过升学考填报志愿，免试保送或自主推荐等充分体现出来。双向选择意味着成绩优秀的学生有一定的择校权，那么许多高级中学为了升学率、名声之类的绩效必然需要为这些学生提供“优待”，以吸引他们选择本校而不是更好一些的学校。比如，对一些前来参加学校自主推荐测试的优秀学生，给予如果在中考时填报并考入该校，保证能进入重点班的承诺。而直升班这个别称也就是由于它是保送生的云集之地而得名的。一旦有学校采用这种歧视性的分班制，其他学校就受到了这种从道德上看是不正当的生源方面的竞争，而不得不去仿效。道德上的不正当，只要不上升为政策乃至法律的不正当，就可以为之，以至于大行其道，“风靡”全国，现在则习惯成自然了。这也解释了为什么上海的初级中学并没有都采取这种“差生”歧视的分班制度，即便有分班也不完全是按成绩来分的，而主要是在普通班之外设立了科技、艺术或体育方面的特色班。这是因为从1997年开始，上海的初中生便以就近入学为主，大幅降低了学生择校的余地。<br/><br/>在九年义务教育阶段之外，采用双向选择的招生制度是无可厚非的，其本身也经受了时间的检验，总体上是公平有效的。但正像市场经济制度具有负的外部性，或称市场失灵（比如为了经济利益而浪费资源、污染环境、偷工减料、以次充好等）一样，教育制度也同样不可避免的存在一些负外部性。依成绩分班来因材施教本来不是坏事，但是以分班结果为接口，故意将最优秀的师资力量集中在少数几个班级，这是有悖于“有教无类”的基本原则的。由于智力和家庭环境等因素，要保证教育的起点公平无法做到，但至少要尽可能地确保过程公平，而这种歧视性的教师分配方案，显然对促进过程公平不利。<br/><br/>要解决这一问题并不需要取消学生的择校权，而且总体看来这种择校权是利大于弊的。避免市场失灵需要依靠政府监管，应对招生制度的外部性也一样。教育主管部门必须要注意到现行招生制度带来的副作用，采用一些手段抑制学校的错误做法。这既可以使学生在选择学校时，能真正以学校的办学理念、师资水平、评价口碑和设备设施等软硬件的情况为依据，而不是以能否进入好班为一个重要的考量，又可以避免类似的甚至更严重的事件再次发生，使校园更加和谐。</span>]]></description>
		</item>
		
			<item>
			<link>http://www.3exware.com/home/article/articles/72.html</link>
			<title><![CDATA[[非典型游记]春风十里扬州路]]></title>
			<author>kmandzs@gmail.com(kmzs)</author>
			<category><![CDATA[文章感悟]]></category>
			<pubDate>Wed,02 Jun 2010 22:00:32 +0800</pubDate>
			<guid>http://www.3exware.com/home/default.asp?id=72</guid>
		<description><![CDATA[<div class="text-article" id="blogContent">
<p><span style="font-size: 14px;">4月23日晨，或许是由于在想一些有关理解论的问题而没睡好，也可能只是因为没睡好所以才胡思乱想，6点多就起来了。匆匆地在我所见过的最简陋的餐厅吃了些点心喝了碗粥，撇下有马拉松任务在身的和还在睡梦中的诸人就一个人上</span><span style="font-size: 14px;">了</span><span style="font-size: 14px;">路。<br />
<br />
这家由某个体育俱乐部帮忙订的寒酸的宾馆，在扬州市中心偏南的南通西路上，紧邻汶河南路。宾馆对面就有公交车站。漫无目的乘了一站车，还是决定下来自己走。这一走就不停地走了5个来钟头。<br />
<br />
前半段大体是沿着古运河前行的。在南通西路上向东直行至南通东路，路过何园，不过太早了，还没开门。继续向前，在看到康山文化园的时候顺着它左转沿泰州路一路向北。先后路过天主教圣心堂、吴道台府、第一人民医院、一座清真寺（在河对面）、朱自清故居、东关古渡等便到达了便益门大桥。稍作停留后决定再次左转沿古城河西行，走盐阜东路，途径工艺美术博物馆、玉器厂、准提寺（民俗博物馆）。然后在个园里小憩，出园后，沿盐阜西路继续西行，路遇史公祠（史公指史可法）、佛教文化博物馆、御码头、冶春花园等，至瘦西湖为止。行程累计约有十余公里。<br />
<br />
一路所见，无论新宅旧邸风格大体统一，可惜金属水泥等部件、空调灯泡等电器突兀其中，产生了不小的落差，有些煞风景。想世博园中，建筑大多新潮古怪，整体上却显得协调。而扬州城里，建筑式样大体一致，却显得不太自然。新式建筑是现代化施舍配古典外观，老式建筑则是古典外观配现代化设置，隐隐让人觉得不爽。不过，不爽的或许只是心情罢了。怎奈这一路 上，心中所吟不是&ldquo;故人西辞黄鹤楼，烟花三月下扬州&rdquo;，而是&ldquo;春风十里扬州路，卷上珠帘总不如&rdquo;，暗念至此，不禁潸然。</span></p>
<p><span style="font-size: 14px;">&nbsp;</span></p>
<p style="text-align: right;"><span style="font-size: 14px;">2010年6月2日补录</span></p>
</div>
<p><span style="font-size: 14px;"><br />
</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.3exware.com/home/article/articles/71.html</link>
			<title><![CDATA[[随感]引入思想比引入方法更重要]]></title>
			<author>kmandzs@gmail.com(kmzs)</author>
			<category><![CDATA[文章感悟]]></category>
			<pubDate>Mon,31 May 2010 23:02:36 +0800</pubDate>
			<guid>http://www.3exware.com/home/default.asp?id=71</guid>
		<description><![CDATA[<p><span style="font-size: 14px;">&nbsp;&nbsp;&nbsp; 马克思早年曾提出，&ldquo;哲学家们只是用不同的方式解释世界；而问题在于改变世界&rdquo;（出自《关于费尔巴哈的提纲》）。这句话体现了现代主义的以人为本、强调人的能动性的特点，但这句话也将解释世界和改变世界作为了一组矛盾对立的行为。我觉得对于&ldquo;哲学家&rdquo;这个主体来讲，这两者不但不对立，而且是相辅相成的。<br />
<br />
&nbsp;&nbsp;&nbsp; &ldquo;改变世界&rdquo;这四个字可以从两种角度理解。一种是指亲身实践参与社会工作，但哲学家──这里的哲学虽然应该做广义理解──毕竟不是社会活动家或政治家，因而极少有人会直接领导经济、政治活动或社会运动。另一种是指进行规范研究，告诉人们世界（主要是指社会而不是自然界）应该朝什么方向发展，甚至根据现状得出一套具体实施方案。哲学家们大多都会自然而然的得出一些规范性的结论，但具体如何落实，其主要责任不在哲学家头上，而更多在社会学家、政治学家、经济学家和法学家等的头上。<br />
<br />
&nbsp;&nbsp;&nbsp; 哲学家的工作无非就是思考并提出新的理论或改造完善现有理论，并将其结果公之于众。前者就是解释世界的活动，而后者实际上就是改造世界的活动。不解释社会现状及其原因，而寄希望于直接提出可以用来改变世界的理论，这是不现实的，也是不可能的。哲学家所给出的实证性或规范性的结论实际上代表了新的世界观和价值观。而具体的实施方案实际上是方法论，直接参与社会工作则是对方法论的细化和落实。由此可见哲学家的解释世界（提出新观念）的工作绝不比改变世界（即提出和落实相应的方法论）的工作次要。<br />
<br />
&nbsp;&nbsp;&nbsp; 实际上每个著名的思想家，不论其是否致力于改变世界，都为改变世界起了重要而无法替代的作用。宣传新思想，增加支持者，使的新的更进步的思想像鼓掌──从一小撮人开始直到带动整个会场──一样传播开来，这些才是最重要的改变世界的活动。<br />
<br />
&nbsp;&nbsp;&nbsp; 只有相应的观念足够普及，相应的理念基本深入人心，好的方法论才有用武之地。因此宣扬新思想应该是任何应用这种思想为的方法论中非常重要的一条。比如大多数国人都分不清&ldquo;民主&rdquo;与&ldquo;共和&rdquo;这两个词的差异。本质上说，民主是一种思想，是一种价值观。而共和是一种国家体制，是对三权分立之类的政治体制的应用且需要对应的社会制度支持，所以共和是一系列方法论。许多中国人（政界、学人士，甚至普通百姓）一方面希望引入国外好的方法（比如更民主的选举制度，更自由的市场经济制度），但另一方面忽略或故意忽视了对这些方法论背后的观念的研究、分析、理解和宣传（至少力度不足）。因此这些缺乏思想基础的制度在中国很容易就会走了味儿，要么唱得荒腔走板，要么旧酒瓶帖个新标签，挂羊头照旧卖狗肉。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 不得不承认有些舶来的观念本身与中国传统文化不相容，很难让大多数国民接受，那么需要对之进行些符合中国国情的修正，或者连同相应的方法一起舍弃。但是，对这些观念的研究和宣传不足的主要原因不在这儿，而在于功利主义和拿来主义，当然也在于新思想被接受和认可的难度──摇滚歌手所在的舞台之下如果是一群只对古典乐感兴趣，完全无法接受摇滚乐的观众，那么即便有几个人鼓掌了，也带动不了全场。我并不反对借鉴国外先进经验进行渐进式改革，并在容易的地方先推进。但是与此同时，必须对所参考的方法或工具背后的支持性理念进行宣传，以深入民心。然后改革才会容易深入，而不是到了困难一些的地方就卡住。<br />
<br />
&nbsp;&nbsp;&nbsp; 例如，当代中国的自上而下经济改革缺乏相应的价值观（包括对应的经济观念、政治观念和道德观念等）的普遍支持，法治和民主就很难真正贯彻。可以说，社会主义和市场经济的真正含义和观念都未能深入人心，大部分人（包括大部分级别稍低些的政府官员和关联机构的负责人）看到的只有名词本身，根本不理解背后的思想，因此社会主义市场经济越发展越带有权贵资本主义的商品经济倾向是不足为奇的。<br />
<br />
&nbsp;&nbsp;&nbsp; 整天进行等级分明的专制式教育，怎么能培养出真正理解民主的下一代？所能得到的只有听话的奴才、表面上接受现状的犬儒主义者，以及玩世不恭的愤青（或者说现代意义上的犬儒主义者）组成的大杂烩。这是东亚和东南亚大部分国家所普遍面临的问题，被主要的西方国家普遍承认的&ldquo;民主&rdquo;国家──日本和韩国──也不例外。这又是一例。<br />
<br />
&nbsp;&nbsp;&nbsp; 有走什么样的道路的想法，有可借鉴的经验和范例，而不知到这条路到底是什么，到底意味着什么，那必然会越走越崎岖。就我所见，中国的政治改革，要想真正的做到国务院提了多少年的政企分开和转变政府职能，除了要做激励制度的调整，政府结构本身的调整等等之外，更要做思想意识上的改变。否则任何的改革即便不是徒劳无功，流于形式，也是事半功倍外，无法彻底。<br />
<br />
&nbsp;&nbsp;&nbsp; 让人接受新的思想新的理念何其困难，以&ldquo;破四旧，立四新&rdquo;那种抱着急于求成的心态采用的直截了当却过于粗暴的方法是行不通的。这绝对是个需要&ldquo;润物细无声&rdquo;的精细活。当然，这些是题外话了。</span></p>]]></description>
		</item>
		
</channel>
</rss>
