<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[nn&#39;s WebNote]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[先历困苦，后得幸福，霜雪梅花，春来怒放。]]></description>
<link>http://hi.baidu.com/mayig</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[扫盲加扯淡 我说云计算]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/860b773e8ce54c3a71cf6c74.html]]></link>
        <description><![CDATA[
		
		<p>转自：<a href="http://www.cnbeta.com/articles/62987.htm">http://www.cnbeta.com/articles/62987.htm</a></p>
<p>注：这位老兄更高，画的图也蛮可爱的嘛。解释还挺透彻的。是不是扯谈，看看也有好处呢。</p>
<p>正文：</p>
<p><strong>感谢<a href="http://www.im286.com/" target="_blank">286er</a>的投递</strong><br>
我是一个经常逛cnBeta的人，有时也投递一些消息，不过今天在落伍者论坛看到网友自创的漫画，也许就是随笔画画吧， 且不说这位网友是否真的理解云计算（老实说，我也不清楚云计算是什么。），但确实是这位网友还是很有才的，能把自己的看法用这种形式表达出来，已经很难为可贵了。</p>
<p>扫盲加扯淡 我说云计算</p>
<div class="t_msgfont" ><a href="http://www.im286.com/thread-2841368-1-1.html">http://www.im286.com/thread-2841368-1-1.html</a><br>
<br>
&ldquo;我看了N多的相关介绍也找不到一个好的解释，应该说是我看不懂吧。<br>
谁给个简单通俗点的解释啊<br>
我看了大概就像是网络硬盘吧可以上传电脑备份和文件的还可以在线编辑本人啥的，没啥特别的啊不是已经实现了，只觉的现在大头就是想把他们规划下罢了，<br>
没啥特别的怎么那么多公司参与呢&rdquo;<br>
<br>
网络硬盘不是云计算。<br>
&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;<br>
什么是云计算呢？<br>
<br>
最开始，人们使用算盘。<br>
<img src="http://i3.6.cn/cvbnm/c9/81/de/f27ad26ae45c1106031dc417c07c690e.jpg"> <br>
<br>
后来，人们用电脑。<br>
<img src="http://i3.6.cn/cvbnm/97/ac/0f/1f3e65fb0cbf61329ee3576e6d253df9.jpg"> <br>
<br>
再后来，人们有了网络。<br>
<img src="http://i3.6.cn/cvbnm/d4/f3/e4/bfbe6a22ccf423579acaeb518d6ed7d4.jpg"> <br>
<br>
再后来，中国人口大爆炸，男女比例男的比女的多3700万，这三千多万人没事干，都去上网。于是服务器吃不消了。<br>
<img src="http://i3.6.cn/cvbnm/f4/a2/8f/c7d4fdd01aebe36f32fa1a42874defab.jpg"> <br>
<br>
于是人们就发明了牛逼的技术，用更好更多的服务器。<br>
<img src="http://i3.6.cn/cvbnm/cf/14/aa/4d623fbb64b769b011ce9f5ab7307aec.jpg"> <br>
<br>
再后来，人更多了，于是服务器也更多了。<br>
<img src="http://i3.6.cn/cvbnm/ee/38/e7/ed09c91b7c44d053f6b70ecc60952ad5.jpg"> <br>
<br>
但事实上这样的效果并不好，过度繁重的结构加大了网站设计和构架的难度，而且越是复杂的系统越是不稳定。有可能一个出问题，这样一个完整的系统就彻底挂 掉。如果考虑到系统的崩溃情况，那势必要引入一个更复杂的方案来保证不同的服务器可以做不同的支援。 这是一个无解的循环，大量的计算资源被浪费在无限制的互相纠结中，很快到了瓶颈。<br>
<img src="http://i3.6.cn/cvbnm/d3/ea/df/620ee8d8a4caa3e65e938450c540ec9d.jpg"> <br>
<br>
人们想，那我不用这么乱七八糟复杂的系统，我上个极其牛逼的服务器不就好了？可是，太贵了……而且最牛逼的也还没制造出来……<br>
<img src="http://i3.6.cn/cvbnm/30/de/f7/00c0f1bc6f8ee975bad2898422643adb.jpg"> <br>
<br>
于是人们突然想到了一个好办法。将服务器不是简单的链接起来，说你是缓存，我是数据库。<br>
而是并发使用系统资源，每个操作请求都可以按照一定的规则分割成小片段，分给不同的机器同时运算，每个机器其实只要做很小的计算就可以，这是哪怕286机器都轻松完成的。最后将这些机器的计算结果整合，输出给用户。<br>
对用户看来，他其实根本面对的不是许多机器，而是一个似乎真正存在的计算能力巨大无比的单个服务器。<br>
事实上这个服务器是不存在的。但它拥有着成千上万台服务器的能力。<br>
下面来看实例。<br>
<br>
<img src="http://i3.6.cn/cvbnm/61/a3/2f/3069725e4e666d8df472a67e81bba3c8.jpg"> <br>
<br>
<img src="http://i3.6.cn/cvbnm/bb/9c/5c/706b47139a294db7df8ae40c901e8bd0.jpg"> <br>
<br>
实际上过程没这么简单。哪怕是统计收集资料的过程也会占据可怕的处理时间。这就将云计算的任务进一步划分下去，哪个服务器的CPU干什么，处理哪个任务 段。 这个其实可以由算法安排成自动分配的。 总之，压榨每一个步骤的潜力，让一个任务被服务器集群们一起上，自然能飞速达成。<br>
别忘了，云计算不是弄个两三台服务器就可以达成的。云计算虽然和分布式计算有着深厚的渊源，但我们现在说的云计算基本上还是海量级别的服务器基数才能达成的。说成千上万台服务器绝不夸张。<br>
过去我们做的是乘法。用户请求多，计算任务重，那么就把服务器叠加，这是一个计算能力的加法。<br>
云计算走的另一个方向。我们在已有的计算资源的基础不变的情况下，我们把用户的任务请求做除法，一个请求进来，我们把它变成许多个小任务段，最后汇总出去给用户一个完整的结果。<br>
<br>
对用户来说，他根本感觉不到里面哪个cpu做了什么处理，哪部分是哪部分拼接起来的，他就感觉自己面对一台5亿内存3亿GHZ的巨无霸电脑一样。<br>
用户对这样的计算莫名其妙，云里雾里的，于是他就把这个东西，叫做云计算。<br>
<br>
<img src="http://i3.6.cn/cvbnm/62/2b/8e/30ac87bf8412079b053728fe46c5d7e4.jpg"> <br>
<br>
上面对百度的例子其实连雏形都不算。实际上照样有许多的节点在里面。但总的意思上没错。工程师主要潜心的是算法，提高输出速度这些方面的考虑。 除了初期架构和部署的麻烦外，以后考虑到主要还是搜索引擎本身的功能实现了。<br>
+++++++++++++++++++++++++++++<br>
PS：以上纯为扯淡。我说的是真是假，哪里可信哪里可以嘲笑，你自己看着办。</div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/%D4%C6%BC%C6%CB%E3">云计算</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/860b773e8ce54c3a71cf6c74.html#comment">查看评论</a>]]></description>
        <pubDate>2008年12月31日 星期三  17:14</pubDate>
        <category><![CDATA[云计算]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/860b773e8ce54c3a71cf6c74.html</guid>
</item>

<item>
        <title><![CDATA[哪有那么多云计算]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/0c0a652228a1a5a34723e86b.html]]></link>
        <description><![CDATA[
		
		<p>转自：DBA Notes<br>
<a href="http://www.dbanotes.net/review/cloud_computing.html">http://www.dbanotes.net/review/cloud_computing.html</a></p>
<p>注：DBA老兄的质疑很有同感。哪来那么多云计算呢，大多是噱头而已。</p>
<p>正文：</p>
<p>或许没几个人能说明白到底什么算是云计算(Cloud Computing)，但这并不妨碍大家讨论他的热情，并且热心的与之套近乎，恨不得分身两处，自己给自己隔着虚空贴上云计算的标签。</p>
<p>云计算，离不开规模吧? 每家公司都把自己网站弄得和信息孤岛差不多，突然就喊着云计算? 要用户怎么相信呢? Amazon 早在抛出云计算概念之前多少年，就已经提供 Web Service，这个预热过程几乎是不可避免的。对比国内，还是要补一点课的吧。</p>
<p>云计算，离不开核心基础架构吧? Google 有 Bigtable + MapReduce ，Amazon 有 <a href="http://www.dbanotes.net/techmemo/amazon_dynamo.html"><font color="#0082ff">Dynamo</font></a> ，国内有那家公司弄个自己的架构并形成论文给业界看看呢? 简单的弄个名字出来怕是也没什么意义的。</p>
<p>另一个类似的例子是 Facebook 的开放带来的业界跟风，现在甚至天涯社区开始东施效颦...看看天涯那烂页面结构吧，谁好意思吧内容引到自己的站点上呢?</p>
<p>以前都说中美互联网差距有点距离，但单从嘴皮子上看，其实没什么距离--几乎是同步的的嘛。人人都言必称云计算的时候，不妨给这东西泼点冷水。该喝豆浆喝豆浆，该吃油条吃油条。满汉全席大可作为文化给大家熏陶一下就成了。</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/%D4%C6%BC%C6%CB%E3">云计算</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/0c0a652228a1a5a34723e86b.html#comment">查看评论</a>]]></description>
        <pubDate>2008年12月31日 星期三  17:11</pubDate>
        <category><![CDATA[云计算]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/0c0a652228a1a5a34723e86b.html</guid>
</item>

<item>
        <title><![CDATA[什么是云计算（C/S/S结构）]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/e272d5c4573304cc38db4968.html]]></link>
        <description><![CDATA[
		
		<p>转自：开心就好的代码人生<br>
<a href="http://blog.joycode.com/joy/archive/2008/07/04/115163.aspx">http://blog.joycode.com/joy/archive/2008/07/04/115163.aspx</a></p>
<p>注：我个人觉得解释比较到位，比较容易理解，转帖收藏一下。C/S/S的结构比喻让人茅塞顿开啊。</p>
<p>IT界是一个特别适合&ldquo;创新&rdquo;的地方，尤其是各种各样的术语。各大厂商为了自己的利益，不断的推出一些新的术语，而媒体们也在不断的站队，跟着一些忽悠，搞得我们这些IT界的前线战士们一阵一阵得晕。刚刚有了B/S、C/S、SaaS、SOA、Mash Up以及S+S，现在又出来了云计算。</p>
<p>什么叫云计算？根据<a target="_blank" href="http://zh.wikipedia.org/w/index.php?title=%E4%BA%91%E8%AE%A1%E7%AE%97&amp;variant=zh-cn">维基百科</a>当中的定义（基于某种原因，可能无法访问维基百科）：<strong>云计算</strong>（<strong>cloud computing</strong>，<a href="http://zh.wikipedia.org/w/index.php?title=%E5%8F%B0%E6%B9%BE&amp;amp),是&lt;a href=">分布式计算</a>技术的一种，其最基本的概念，是透过<a href="http://zh.wikipedia.org/w/index.php?title=%E7%B6%B2%E8%B7%AF&amp;variant=zh-cn">网络</a>将庞大的计算处理程序自动分拆成无数个较小的子程序，再交由多部服务器所组成的庞大系统经搜寻、计算分析之后将处理结果回传给用户。透过这项技术，网络服务提供者可以在数秒之内，达成处理数以千万计甚至亿计的信息，达到和&ldquo;<a href="http://zh.wikipedia.org/w/index.php?title=%E8%B6%85%E7%B4%9A%E9%9B%BB%E8%85%A6&amp;variant=zh-cn">超级计算机</a>&rdquo;同样强大效能的网络服务。</p>
<p>很深奥的概念，相信很多朋友可能和开心一样，有些云里雾里，真的掉到云里面去了。而且在下面的云计算示例一节当中，又给出了两个简单的云计算案例，即搜索引擎以及网络邮箱。俺就有一些搞不明白了，按照这种示例，<strong>所谓的云计算，与B/S以及C/S架构到底有什么不同呢？</strong>如果再看看各大媒体举的例子，把一些在线文档编辑器也称之为云计算，那么云计算与SaaS又有什么区别呢？这不就是经典的新瓶装旧酒吗？</p>
<p>其实，云计算的先驱真的不是Google（谷歌）或者微软，而是亚马逊（Amazon）。让我们来看一下所谓的B/S以及C/S架构，如果从分层上来看，其实都是Client to Server的层次（只不过B/S中把C换成了Browser而已）。而无论在Client端还是Server端，都适用于经典的软件销售，在Client端，我们有Office、Windows Vista、Firefxo，而在Server端，则有SQL Server、Oracle、Apache。这些软件都适用于software license的销售模式（软件收费或者支持服务收费）。</p>
<p>而亚马逊的<a target="_blank" href="http://www.amazon.com/gp/browse.html?node=201590011">EC2</a>则更改了Server端的software license模式，其最主要的含义是将软件的功能以服务的方式提供出来，然后根据类似于SLA（<a target="_blank" href="http://en.wikipedia.org/wiki/Service_level_agreement">Service Level Agreement</a>）的方式为其客户提供相应的服务。比如EC2当中的Simple DB，就是一个网络存储服务，类似于SQL Server/Oracle等等，你在开发的时候，不需要安装经典的数据库应用程序在服务器上，根本不用在意我的数据到底存在&ldquo;哪块云里面&rdquo;，而且开发的时候还可以使用原来的SQL语句进行CRUD（不知道CRUD是什么意思？赶快做一下功课去吧），任何时间，任何地点，任何设备都可以进行访问。听上去很美吧？</p>
<p>所以<strong>云计算其实就是C/S的一个扩展版本，简单可以描述为C to S to S (C/S/S)</strong>，<strong>实质就是一个更新版本的SaaS，服务器端的Software As A Service</strong>。大小S之间进行计算以及数据的传输，最终把结果输给C，让C来展示就可以了。而云计算指的其实就是S to S这一端，所以<strong>与最终用户根本无关</strong>，甚至最终用户根本感觉不到这种改动，所改动的其实就是开发商如何<strong><em>采购</em></strong>其服务而已（是购买软件还是租用服务）。所以俺开心个人认为，传统的搜索引擎以及网络邮箱，或者在线文档编辑器(Google Docs)还称不上什么云计算（当然，你硬说里面也有S to S之类的云端交流，俺也不没有什么理由来说服你）。</p>
<p>ASP(Application Service Provider)其实也是云计算的一个先驱，但它是把应用构建在云端，而不是把服务构建在云端，所以造成了其上的二次开发商非常稀少，而没有建立起完整的生态链系统，最终进入到失败。而云计算由于只是把服务器端的Software更改为Service方式应用（云上的API），所以可以召募很多的二次开发商，从而快速得构建起完整的生态链。相当于IT界的一次洗牌过程，抓住了云也就抓住了未来，对于传统软件厂商来说，其危害要比Open source有过之而无不及。整个生态链可以基本上划分为云间服务提供商（相当于原来的服务器端的软件厂商：微软、甲骨文、IBM等）、应用开发商（基于服务构建应用的厂商，SI或者ISV等）以及最终用户等。</p>
<p>但云计算也不会一帆风顺，肯定会有乌云时期，有兴趣的话，可以去了解一下Amazon的EC2的业绩。我们可以先抛开欧美日印市场，从国内的IT环境来看，无论是从政策、技术或者信用等来说，目前还极度不成熟。非死不可（Facebook）本周在国内的突然病亡会在很长一段时期让大家对于云计算充满怀疑（谁又能够预料哪一天App Engine突然发动不起来了？），现有的云计算的开发模式对于重视技术迁移成本的开发商也处于观望状态。</p>
<p>所以云计算虽然看上去很美，但实际上要走得路还是很长。</p>
<p>在接下来的话题当中，开心还想聊聊云端的梦（从最终用户角度会感觉到的优势）、吞云吐雾的幻术（从开发者角度选择最好的云计算平台）等话题，欢迎大家交流。</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/%D4%C6%BC%C6%CB%E3">云计算</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/e272d5c4573304cc38db4968.html#comment">查看评论</a>]]></description>
        <pubDate>2008年12月31日 星期三  17:08</pubDate>
        <category><![CDATA[云计算]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/e272d5c4573304cc38db4968.html</guid>
</item>

<item>
        <title><![CDATA[客家歇后语]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/455afa1fc8ade964f624e4ac.html]]></link>
        <description><![CDATA[
		
		<p>屙屎捉狗虱------------一举两得</p>
<p>寒狗不识六月天--------不识时务</p>
<p>老烟脚的牙齿---难说（刷）</p>
<p>铁拐李打屁------神气</p>
<p>草蜢撩鸡公&mdash;&mdash;不自量力</p>
<p>寿星公吊颈&mdash;&mdash;嫌命长</p>
<p>屎缸里吃麻饼--------难为你开口</p>
<p>新打屎缸&mdash;&mdash;三日样</p>
<p>苯基欧泥&mdash;&mdash;会穿坑</p>
<p>鼻屎糊灯笼&mdash;&mdash;不结实</p>
<p> </p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/455afa1fc8ade964f624e4ac.html#comment">查看评论</a>]]></description>
        <pubDate>2008年12月29日 星期一  22:55</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/455afa1fc8ade964f624e4ac.html</guid>
</item>

<item>
        <title><![CDATA[觉得做人累了就看看这些 不是社会错了，是你错了]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/f9e15a66c6cb7323aa184c64.html]]></link>
        <description><![CDATA[
		
		<span class="Apple-style-span" style="word-spacing: 0px; font: 20px 宋体; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"><font color="#ff0000">学会 沉默<span class="Apple-converted-space"> </span></font><br>
<br>
　<font color="#000080">　有时候，你被人误解，你不想争辩，所以选择沈默。本来就不是所有的人都得了解你，因此你认为不必对全世界喊话。却也有时候，你被最爱的人误解，你难过到不想争辩，也只有选择沈默。全世界都可以不懂你，但他应该懂，若他竟然不能懂，还有什么话可说?生命中往往有连舒伯特都无言以对的时刻，毕竟不是所有的是非都能条列清楚，甚至可能根本没有真正的是与非。那么，不想说话，就不说吧，在多说无益的时候，也许沈默就是最好的解释。<span class="Apple-converted-space"> </span></font><br>
<br>
<br>
　<font color="#ff0000">　至少 平静</font><span class="Apple-converted-space"> </span><br>
<br>
　　<font color="#000080">在你跌入人生谷底的时候，你身旁所有的人都告诉你：要坚强，而且要快乐。坚强是绝对需要的，但是快乐?在这种情形下，恐怕是太为难你了。毕竟，谁能在跌得头破血流的时候还觉得高兴？但是至少可以做到平静。平静地看待这件事，平静地把其他该处理的事处理好。平静，没有快乐，也没有不快乐。<span class="Apple-converted-space"> </span></font><br>
　　<br>
<br>
<br>
　　<font color="#ff0000">学会弯腰 这会是我意外的收获<span class="Apple-converted-space"> </span></font><br>
<br>
　　<font color="#000080">和别人发生意见上的纷歧，甚造成言语上的冲突，所以你闷闷不乐，因为你觉得都是别人恶意。别再耿耿于怀了，回家去擦地板吧。拎一块抹布，弯下腰，双膝着地，把你面前这张地板的每个角落来回擦拭干净。然后重新省思自己在那场冲突，所说过的每一句话。现在，你发现自己其实也有不对的地方了，是不是?你渐渐心平气和了，是不是?有时候你必须学习弯腰，因为这个动作可以让你谦卑。劳动身体的同时，你也擦亮了自己的心绪。而且，你还拥有了一张光洁的地板呢。这是你的第二个收获。<span class="Apple-converted-space"> </span></font><br>
<br>
<br>
<br>
　　<font color="#ff0000">不要想 如果 当初<span class="Apple-converted-space"> </span></font><br>
<br>
<font color="#000080">　　你说，人生是一条有无限多岔口的长路，永远在不停地做选择。如果只是选择吃炒面或炒饭，影响似乎不大，但选择读什么科系、做什么工作、结婚或不结婚、要不要有孩子，每一个选择都影响深远，而不同的选择也必定造就完全不一样的人生。你又说，生命中不可承受之情，就在于人生没有重来的机会啊。如果当初如何如何，现在就不会怎样怎样...这种充满怅然的喃喃自语，还是别再多说了吧。每一个岔口的选择其实没有真正的好与坏，只要把人生看成是自己。独一无二的创作，就不会频频回首如果当初做了不一样的选择。</font><span class="Apple-converted-space"> </span><br>
<br>
　　<br>
<br>
　<font color="#ff0000">　努力吧 不管成功与否 至少曾经美丽<span class="Apple-converted-space"> </span></font><br>
<br>
　<font color="#000080">　漫步林间，你看见一株藤蔓附着树干，柔软与坚实相互交缠，你感动于这静美的一幕。让幸福与归属就此驻足吧。你想。不知未来会有怎样一番风雨摧折？也许藤将断、树会倒，也许天会荒，地将老。你又想。那么，请时光停格在此刻吧。停格即是永恒。永恒里若有这静美的一刻，未来可能遭遇的种种劫难，便已得到了安慰与报偿。<span class="Apple-converted-space"> </span></font><br>
<br>
　　<font color="#ff0000">保持单纯<span class="Apple-converted-space"> </span></font><br>
<br>
<font color="#000080">　　因为思虑过多，所以你常常把你的人生复杂化了。明明是活在现在，你却总是念念不忘着过去，又忧心忡忡着未来；坚持携带着过去、未来与现在同行，你的人生当然只有一片拖泥带水。而单纯是一种恩宠状态。单纯地以皮肤感受天气的变化，单纯地以鼻腔品尝雨后的青草香，单纯地以眼睛统摄远山近景如一幅画。单纯地活在当下。而当下其实无所谓是非真假。既然没有是非，就不必思虑；没有真假，就无须念念不忘又忧心忡忡。无是非真假，不就像在做梦一样了吗?是呀，就单纯地把你的人生当成梦境去执行吧。</font><br>
<br>
<br>
　　<font color="#ff0000">偶尔&quot;俗气&quot;...<span class="Apple-converted-space"> </span></font><br>
<br>
<font color="#000080">　　吃多了健康食品，偶尔你也想啃一啃鸭舌头和盐酥鸡。看多了大师名剧，偶尔你也想瞄一瞄耳光摔不完眼泪掉不完的连续剧。听多了古典音乐，偶尔你也想唱一唱爱他一百年又恨他一他一万年的流行歌曲。你知道健康食品对健胃整肠有意义，大师名剧对培养气质有意义，古典音乐对提升性灵有意义，可是，偶尔你其实并不想让自己时时刻刻活得那么有意。人生不需要把自己绑得那么紧。偶尔的小小放纵，是道德的。灵气充满或许接近大人，但偶尔的俗气会更平易近人。<span class="Apple-converted-space"> </span></font><br>
<br>
<font color="#ff0000">　　控制情绪 别浪费了~<span class="Apple-converted-space"> </span></font><br>
<br>
　　<font color="#000080">今天的你，是不开心的你，因为有人在言语间刺伤了你。你不喜欢吵架，所以你离开；可是你只是离开了那，却没有离开被那人伤害的情境，因此你愈想愈生气。愈有气，你就愈没有力气去理会别的事情，许多更该用心去做去想去处理的事件，就在你漫天漫地的心烦意乱之中，被轻忽被漠视被省略了。因为，你只是一心一意地在生气。在情绪上做文章，这是对自己的浪费，而且是很坏的浪费。毕竟，生气也是要花力气的，而且生气一定伤元气。所以，聪明如你，别让情绪控制了你，当你又要生气之前，不妨轻声地提醒自己一句：&ldquo;别浪费了。&rdquo;<span class="Apple-converted-space"> </span></font><br>
<br>
　　<br>
<br>
<font color="#ff0000">　　抓住最好的时机 绝不错过<span class="Apple-converted-space"> </span></font><br>
<br>
　　<font color="#000080">你曾经买了一件很喜欢的衣裳却舍不得穿，郑重地供奉在衣柜里；许久之后，当你再看见它的时候，却发现它已经过时了。所以，你就这样与它错过了。你也曾经买了一块漂亮的蛋糕却舍不得吃，郑重地供奉在冰箱里；许久之后，当你再看见它的时候，却发现它已经过期了。所以，你也这样与它错过了。没有在最喜欢的时候上身的衣裳，没有在最可口的时候品尝的蛋糕，就像没有在最想做的时候去做的事情，都是遗憾。生命也有保存期限，想做的事该趁早去做。如果你只是把你的心愿郑重地供奉在心里，却未曾去实行，那么唯一的结果，就是与它错过，一如那件过时的衣裳，一如那块过期的蛋糕。<span class="Apple-converted-space"> </span></font><br>
<br>
<br>
<font color="#ff0000">　　偶尔的出离轨道</font><span class="Apple-converted-space"> </span><br>
<br>
　　<font color="#000080">某次你搭火车打算到A地去，中途却忽然临时起意在B地下了车。也许是别致的地名吸引了你，也许是偶然一瞥的风景触动了你，总之，你就这样改变了本来预定的行程，然后经历了一场充满惊奇的意外旅行。A地是你原先的目标，B地却让你体会了小小的冒险。回忆起来，你说，那是一次令你难忘的出轨经验。生命中的许多时候不也如此？心无旁骛地奔赴唯一的目的，不过是履行了原本的行程而已；离开预设的轨道，你才有机会发现其他的风景。<span class="Apple-converted-space"> </span></font><br>
　　<br>
<br>
　<font color="#ff0000">　悄悄 悄悄地 回归平静..<span class="Apple-converted-space"> </span></font><br>
<br>
　<font color="#000080">　曾经有一段时间，你心情低落，甚至懒得拉开窗帘，看着窗外的阳光。因此你当然也忘了去看看，窗台上那一盆每天都需要喝水的玛格丽特。如此不知过了多久，总算有一天，你度过了心情的低潮，同时也想起了你的玛格丽特。天啊，可怜的花，她还活着吗？你战战兢兢地拉开窗帘，却见她迎风招摇，花颜可掬。原来在过去的这段日子里，你虽然忘了喂她喝水，老天却没忘了以雨露眷顾她呢。许多事物悄悄地在你的视线之外进行，而且悄悄地安排好了它们自己。天生万物，天养万物，一切其实无须担心......你只要做的就是做好自己，不留任何遗憾...足矣。</font></span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/f9e15a66c6cb7323aa184c64.html#comment">查看评论</a>]]></description>
        <pubDate>2008年12月26日 星期五  09:55</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/f9e15a66c6cb7323aa184c64.html</guid>
</item>

<item>
        <title><![CDATA[食物可不能乱搭配--食物相克对照表]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/a80d98efb212dde8ce1b3e9c.html]]></link>
        <description><![CDATA[
		
		<span class="Apple-style-span" style="word-spacing: 0px; font: bold 14px/21px simsun; text-transform: none; color: rgb(102,102,102); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0">同时进食物 导致后果
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">1 猪肉+菱角 肚子疼</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">2 猪肚+莲子 (用白茄枝烧) 中毒必死</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">3 牛肉+栗子 引起呕吐</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">4 牛肉+红糖 胀死人</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">5 牛肉+盐菜 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">6 牛肉+鲶鱼 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">7 牛肉+田螺 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">8 羊肉+西瓜 伤元气</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">9 羊肉+田螺 腹胀</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">10 狗肉+绿豆 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">11 狗肉+黄鳝 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">12 狗肉+葱 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">13 兔肉+芹菜 脱发</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">14 兔肉+人参 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">15 兔肉+青姜 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">16 兔肉+红罗卜 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">17 鸡肉+芹菜 伤元气</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">18 鹅肉+鸡蛋 伤元气</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">19 鹅肉+鸭梨 伤肾脏</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">20 甲鱼+苋菜 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">21 黑鱼+茄子 肚子疼</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">22 鲤鱼+猪肉 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">23 鲤鱼+甘草 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">24 鲤鱼+辣椒 成痔疾</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">25 鲤鱼+芹菜 患痢疾</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">26 鲤鱼+黄瓜 成胎毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">27 鲑鱼+河豚 有生命危险</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">28 鲫鱼+树豆花 中毒必死</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">29 鳗鱼+桔子 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">30 鱆鱼+螺肉 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">31 河豚鱼+烟灰 中毒死亡</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">32 生鲸肉+大面 中毒必死</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">33 螃蟹+柿子 引起腹泻</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">34 螃蟹给癞病人吃 必死</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">35 虾类+维生素C 必死(相当于砒霜)</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">36 虾子+金瓜 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">37 虾子+青枣 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">38 鳖+芹菜 剧毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">39 田螺+木耳 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">40 田螺+玉米 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">41 鸡蛋+糖精(片) 会中毒,重则死亡</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">43 豆腐+蜂蜜 导致耳聋</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">44 豆腐渣+蜂蜜 会下痢</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">45 蒜头+蜂蜜 会变疳积</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">46 洋葱+蜂蜜 伤眼睛</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">47 葱+蜂蜜 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">48 萝卜+人参 滞气</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">49 萝卜+木耳 导致皮炎</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">50 蜂蜜+油炸物 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">51 木瓜+油炸物 会下痢</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">52 西瓜+油炸物 会下痢</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">53 西瓜+八宝丹 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">54 金瓜+八宝丹 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">55 马铃薯+香蕉 面部生斑</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">56 芋头+香蕉 引起腹涨,中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">57 红薯+柿子 会得结石</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">58 树薯粉+麻油 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">59 花生+黄瓜 会伤身</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">60 白酒+柿子 导致胸闷</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">61 热酒+红柿 会中毒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">62 牛奶+桔子+萝卜 会伤身</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">63 牛奶+醋 患痢疾</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">64 牛奶+菠菜 患痢疾</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">65 葡萄+开水 引起腹泻</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">66 番茄+绿豆 伤元气</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">67 海带+猪血 便秘</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">注: 以上每一组相克食物不能一起食用或在两小时内先后食用</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px"><br style="line-height: 1.5em! important">
饮食禁忌:</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">① 咳嗽病忌食咸鱼,韭菜,蒜,虾,葱,酒. .</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">② 腹痛病忌食番茄,毛薯,糯米点心..</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">③ 哮喘病忌食咸蛋,咸菜,腥物.</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">④ 头痛忌食酒,大葱.</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⑤ 鼻塞病忌食油腻,糖果. .</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⑥ 眼痛忌食鸡,鸭蛋,咸鱼,虾,蟹,韭菜,蒜.</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⑦ 牙痛忌食糖,酱油..</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⑧ 喉痛忌食生姜,胡椒,辣椒,肉桂.</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⑨ 呕吐病忌食糖,油,鱼腥.</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⑩ 泄泻忌食油,奶,豆腐,生冷,鱼虾.</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⑾ 皮肤痒忌食酸果,辣椒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⑿ 失眠症忌食酒</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⒀ 肝炎忌食鸭,葱,椒,酒.</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⒁ 黄疸病忌食糯米,白酒.</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⒂ 胃痛忌食鸭蛋,豆,茨</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⒃ 痢疾忌食鱼,虾,油,韭菜.</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⒄ 腰痛忌食葱</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⒅ 盗汗忌食酒,姜,韭菜,蒜.</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⒆ 耳烂忌食鱼,虾.</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 10px; line-height: 180%; padding-top: 0px">⒇ 浮肿忌食糯米,各种酒.</p>
</span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/a80d98efb212dde8ce1b3e9c.html#comment">查看评论</a>]]></description>
        <pubDate>2008年12月26日 星期五  09:34</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/a80d98efb212dde8ce1b3e9c.html</guid>
</item>

<item>
        <title><![CDATA[Hadoop 入门]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/9e0f7bf0d51311aba40f5255.html]]></link>
        <description><![CDATA[
		
		<div class="blog_content">
<p>&nbsp;&nbsp;&nbsp;  Hadoop 是Google <a href="http://avindev.googlepages.com/mapreduce.doc" temp_href="http://avindev.googlepages.com/mapreduce.doc">MapReduce</a>的 一个Java实现。MapReduce是一种简化的分布式编程模式，让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如同java程序员可以 不考虑内存泄露一样， MapReduce的run-time系统会解决输入数据的分布细节，跨越机器集群的程序执行调度，处理机器的失效，并且管理机器之间的通讯请求。这样的 模式允许程序员可以不需要有什么并发处理或者分布式系统的经验，就可以处理超大的分布式系统得资源。</p>
<h2>&nbsp;&nbsp;&nbsp;  一、概论</h2>
<p>&nbsp;&nbsp;&nbsp;  作为Hadoop程序员，他要做的事情就是：<br>
&nbsp;&nbsp;&nbsp;  1、定义Mapper，处理输入的Key-Value对，输出中间结果。<br>
&nbsp;&nbsp;&nbsp;  2、定义Reducer，可选，对中间结果进行规约，输出最终结果。<br>
&nbsp;&nbsp;&nbsp;  3、定义InputFormat 和OutputFormat，可选，InputFormat将每行输入文件的内容转换为Java类供Mapper函数使用，不定义时默认为String。<br>
&nbsp;&nbsp;&nbsp;  4、定义main函数，在里面定义一个Job并运行它。<br>
&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;  然后的事情就交给系统了。<br>
&nbsp;&nbsp;&nbsp;  1.基本概念：Hadoop的HDFS实现了google的GFS文件系统，NameNode作为文件系统的负责调度运行在master， DataNode运行在每个机器上。同时Hadoop实现了Google的MapReduce，JobTracker作为MapReduce的总调度运行 在master，TaskTracker则运行在每个机器上执行Task。<br>
<br>
&nbsp;&nbsp;&nbsp;  2.main()函数，创建JobConf，定义Mapper，Reducer，Input/OutputFormat 和输入输出文件目录，最后把Job提交給JobTracker，等待Job结束。<br>
<br>
&nbsp;&nbsp;&nbsp;  3.JobTracker，创建一个InputFormat的实例，调用它的getSplits()方法，把输入目录的文件拆分成FileSplist作为Mapper task 的输入，生成Mapper task加入Queue。<br>
<br>
&nbsp;&nbsp;&nbsp;  4.TaskTracker 向 JobTracker索求下一个Map/Reduce。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mapper Task先从InputFormat创建RecordReader，循环读入FileSplits的内容生成Key与Value，传给Mapper函数，处理完后中间结果写成SequenceFile.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Reducer Task 从运行Mapper的TaskTracker的Jetty上使用http协议获取所需的中间内容（33%），Sort/Merge后（66%），执行Reducer函数，最后按照OutputFormat写入结果目录。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  TaskTracker 每10秒向JobTracker报告一次运行情况，每完成一个Task10秒后，就会向JobTracker索求下一个Task。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Nutch项目的全部数据处理都构建在Hadoop之上，详见<a href="http://wiki.apache.org/lucene-hadoop-data/attachments/HadoopPresentations/attachments/yahoo-sds.pdf" temp_href="http://wiki.apache.org/lucene-hadoop-data/attachments/HadoopPresentations/attachments/yahoo-sds.pdf">Scalable Computing with Hadoop</a>。</p>
<h2><br>
&nbsp;&nbsp;&nbsp;  二、程序员编写的代码</h2>
<p>&nbsp;&nbsp;&nbsp;  我们做一个简单的分布式的Grep，简单对输入文件进行逐行的正则匹配，如果符合就将该行打印到输出文件。因为是简单的全部输出，所以我们只要写Mapper函数，不用写Reducer函数，也不用定义Input/Output Format。</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">package</span> <span style="color: rgb(0,0,0)"> demo.hadoop<br>
</span><span style="color: rgb(0,0,255)"><br>
public</span> <span style="color: rgb(0,0,0)"> </span> <span style="color: rgb(0,0,255)">class</span> <span style="color: rgb(0,0,0)"> HadoopGrep {<br>
<br>
 </span> <span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,0)"> </span> <span style="color: rgb(0,0,255)">static</span> <span style="color: rgb(0,0,0)"> </span> <span style="color: rgb(0,0,255)">class</span> <span style="color: rgb(0,0,0)"> RegMapper </span> <span style="color: rgb(0,0,255)">extends</span> <span style="color: rgb(0,0,0)"> MapReduceBase </span> <span style="color: rgb(0,0,255)">implements</span> <span style="color: rgb(0,0,0)"> Mapper {<br>
<br>
&nbsp;&nbsp;</span> <span style="color: rgb(0,0,255)">private</span> <span style="color: rgb(0,0,0)"> Pattern pattern;<br>
<br>
&nbsp;&nbsp;</span> <span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,0)"> </span> <span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,0)"> configure(JobConf job) {<br>
&nbsp;&nbsp;&nbsp; pattern </span> <span style="color: rgb(0,0,0)">=</span> <span style="color: rgb(0,0,0)"> Pattern.compile(job.get(</span> <span style="color: rgb(0,0,0)">&quot;</span> <span style="color: rgb(0,0,0)">mapred.mapper.regex</span> <span style="color: rgb(0,0,0)">&quot;</span> <span style="color: rgb(0,0,0)">));<br>
&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;</span> <span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,0)"> </span> <span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,0)"> map(WritableComparable key, Writable value, OutputCollector output, Reporter reporter)<br>
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: rgb(0,0,255)">throws</span> <span style="color: rgb(0,0,0)"> IOException {<br>
&nbsp;&nbsp;&nbsp; String text </span> <span style="color: rgb(0,0,0)">=</span> <span style="color: rgb(0,0,0)"> ((Text) value).toString();<br>
&nbsp;&nbsp;&nbsp; Matcher matcher </span> <span style="color: rgb(0,0,0)">=</span> <span style="color: rgb(0,0,0)"> pattern.matcher(text);<br>
&nbsp;&nbsp;&nbsp;</span> <span style="color: rgb(0,0,255)">if</span> <span style="color: rgb(0,0,0)"> (matcher.find()) {<br>
&nbsp;&nbsp;&nbsp;&nbsp; output.collect(key, value);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp; }<br>
 }<br>
<br>
 </span> <span style="color: rgb(0,0,255)">private</span> <span style="color: rgb(0,0,0)"> HadoopGrep () {<br>
 } </span> <span style="color: rgb(0,128,0)">//</span> <span style="color: rgb(0,128,0)"> singleton</span> <span style="color: rgb(0,128,0)"><br>
</span><span style="color: rgb(0,0,0)"><br>
 </span> <span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,0)"> </span> <span style="color: rgb(0,0,255)">static</span> <span style="color: rgb(0,0,0)"> </span> <span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,0)"> main(String[] args) </span> <span style="color: rgb(0,0,255)">throws</span> <span style="color: rgb(0,0,0)"> Exception {<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp; JobConf grepJob </span> <span style="color: rgb(0,0,0)">=</span> <span style="color: rgb(0,0,0)"> </span> <span style="color: rgb(0,0,255)">new</span> <span style="color: rgb(0,0,0)"> JobConf(HadoopGrep.</span> <span style="color: rgb(0,0,255)">class</span> <span style="color: rgb(0,0,0)">);<br>
&nbsp;&nbsp; grepJob.setJobName(</span> <span style="color: rgb(0,0,0)">&quot;</span> <span style="color: rgb(0,0,0)">grep-search</span> <span style="color: rgb(0,0,0)">&quot;</span> <span style="color: rgb(0,0,0)">);<br>
&nbsp;&nbsp; grepJob.set(</span> <span style="color: rgb(0,0,0)">&quot;</span> <span style="color: rgb(0,0,0)">mapred.mapper.regex</span> <span style="color: rgb(0,0,0)">&quot;</span> <span style="color: rgb(0,0,0)">, args[</span> <span style="color: rgb(0,0,0)">2</span> <span style="color: rgb(0,0,0)">]);<br>
<br>
&nbsp;&nbsp; grepJob.setInputPath(</span> <span style="color: rgb(0,0,255)">new</span> <span style="color: rgb(0,0,0)"> Path(args[</span> <span style="color: rgb(0,0,0)">0</span> <span style="color: rgb(0,0,0)">]));<br>
&nbsp;&nbsp; grepJob.setOutputPath(</span> <span style="color: rgb(0,0,255)">new</span> <span style="color: rgb(0,0,0)"> Path(args[</span> <span style="color: rgb(0,0,0)">1</span> <span style="color: rgb(0,0,0)">]));<br>
&nbsp;&nbsp; grepJob.setMapperClass(RegMapper.</span> <span style="color: rgb(0,0,255)">class</span> <span style="color: rgb(0,0,0)">);<br>
&nbsp;&nbsp; grepJob.setReducerClass(IdentityReducer.</span> <span style="color: rgb(0,0,255)">class</span> <span style="color: rgb(0,0,0)">);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp; JobClient.runJob(grepJob);<br>
 }<br>
}<br>
</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  RegMapper类的configure()函数接受由main函数传入的查找字符串，map() 函数进行正则匹配，key是行数，value是文件行的内容，符合的文件行放入中间结果。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  main()函数定义由命令行参数传入的输入输出目录和匹配字符串，Mapper函数为RegMapper类，Reduce函数是什么都不做，直接把中间结果输出到最终结果的的IdentityReducer类，运行Job。</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <strong>整个代码非常简单，丝毫没有分布式编程的任何细节。</strong></p>
<h2><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  三.运行Hadoop程序</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hadoop这方面的文档写得不全面，综合参考<a href="http://wiki.apache.org/lucene-hadoop/GettingStartedWithHadoop" temp_href="http://wiki.apache.org/lucene-hadoop/GettingStartedWithHadoop">GettingStartedWithHadoop</a> 与<u><font color="#800080">Nutch Hadoop Tutorial</font></u> 两篇后，再碰了很多钉子才终于完整的跑起来了，记录如下：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
<br>
<strong>3.1 local运行模式<br>
</strong><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  完全不进行任何分布式计算，不动用任何namenode,datanode的做法，适合一开始做调试代码。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  解压hadoop，其中conf目录是配置目录，hadoop的配置文件在hadoop-default.xml，如果要修改配置，不是直接修改该文件，而是修改hadoop-site.xml，将该属性在hadoop-site.xml里重新赋值。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  hadoop-default.xml的默认配置已经是local运行，不用任何修改，配置目录里唯一必须修改的是hadoop-env.sh 里<font face="Courier New">JAVA_HOME</font>的位置。</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  将编译好的HadoopGrep与RegMapper.class 放入hadoop/build/classes/demo/hadoop/目录 找一个比较大的log文件放入一个目录，然后运行</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hadoop</span> <span style="color: rgb(0,0,0)">/</span> <span style="color: rgb(0,0,0)">bin</span> <span style="color: rgb(0,0,0)">/</span> <span style="color: rgb(0,0,0)">hadoop demo.hadoop.HadoopGrep log文件所在目录 任意的输出目录 grep的字符串</span></div>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看输出目录的结果，查看hadoop/logs/里的运行日志。&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  在重新运行前，先删掉输出目录。<br>
 </p>
<p><strong>3.2 单机集群运行模式</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在来搞一下只有单机的集群.假设以完成3.1中的设置，本机名为hadoopserver<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  第1步.&nbsp;&nbsp;&nbsp;  然后修改hadoop-site.xml ，加入如下内容：</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">&lt;</span> <span style="color: rgb(128,0,0)">property</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)"><br>
&nbsp;&nbsp;</span> <span style="color: rgb(0,0,255)">&lt;</span> <span style="color: rgb(128,0,0)">name</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)">fs.default.name</span> <span style="color: rgb(0,0,255)"><span style="color: rgb(128,0,0)">name</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)"><br>
&nbsp;&nbsp;</span> <span style="color: rgb(0,0,255)">&lt;</span> <span style="color: rgb(128,0,0)">value</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)">hadoopserver:9000</span> <span style="color: rgb(0,0,255)"><span style="color: rgb(128,0,0)">value</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)"><br>
</span><span style="color: rgb(0,0,255)"><span style="color: rgb(128,0,0)">property</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)"><br>
</span><span style="color: rgb(0,0,255)">&lt;</span> <span style="color: rgb(128,0,0)">property</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)"><br>
&nbsp;&nbsp;</span> <span style="color: rgb(0,0,255)">&lt;</span> <span style="color: rgb(128,0,0)">name</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)">mapred.job.tracker</span> <span style="color: rgb(0,0,255)"><span style="color: rgb(128,0,0)">name</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)"><br>
&nbsp;&nbsp;</span> <span style="color: rgb(0,0,255)">&lt;</span> <span style="color: rgb(128,0,0)">value</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)">hadoopserver:9001</span> <span style="color: rgb(0,0,255)"><span style="color: rgb(128,0,0)">value</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)"><br>
</span><span style="color: rgb(0,0,255)"><span style="color: rgb(128,0,0)">property</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)"><br>
</span><span style="color: rgb(0,0,255)">&lt;</span> <span style="color: rgb(128,0,0)">property</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)"><br>
&nbsp;&nbsp;</span> <span style="color: rgb(0,0,255)">&lt;</span> <span style="color: rgb(128,0,0)">name</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)">dfs.replication</span> <span style="color: rgb(0,0,255)"><span style="color: rgb(128,0,0)">name</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)"><br>
&nbsp;&nbsp;</span> <span style="color: rgb(0,0,255)">&lt;</span> <span style="color: rgb(128,0,0)">value</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)">1</span> <span style="color: rgb(0,0,255)"><span style="color: rgb(128,0,0)">value</span> <span style="color: rgb(0,0,255)">&gt;</span> <span style="color: rgb(0,0,0)"><br>
</span><span style="color: rgb(0,0,255)"><span style="color: rgb(128,0,0)">property</span> <span style="color: rgb(0,0,255)">&gt;</span> </span></span></span></span></span></span></span></span></span></div>
<p><br>
&nbsp;&nbsp;&nbsp;  从此就将运行从local文件系统转向了hadoop的hdfs系统，mapreduce的jobtracker也从local的进程内操作变成了分布式的任务系统，9000，9001两个端口号是随便选择的两个空余端口号。<br>
  <br>
  另外，如果你的/tmp目录不够大，可能还要修改hadoop.tmp.dir属性。</p>
<p><br>
  第2步. 增加ssh不输入密码即可登陆。<br>
<br>
&nbsp;&nbsp;&nbsp;  因为Hadoop需要不用输入密码的ssh来进行调度，在不su的状态下，在自己的home目录运行ssh-keygen -t rsa ,然后一路回车生成密钥，再进入.ssh目录,cp id_rsa.pub authorized_keys<br>
&nbsp;&nbsp;&nbsp;  详细可以man 一下ssh, 此时执行ssh hadoopserver，不需要输入任何密码就能进入了。</p>
<p>  3.格式化namenode，执行<br>
&nbsp;&nbsp; bin/hadoop namenode -format<br>
<br>
  4.启动Hadoop<br>
&nbsp;&nbsp;&nbsp;&nbsp;  执行hadoop/bin/start-all.sh, 在本机启动namenode,datanode,jobtracker,tasktracker<br>
  <br>
  5.现在将待查找的log文件放入hdfs,。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 执行hadoop/bin/hadoop dfs 可以看到它所支持的文件操作指令。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 执行hadoop/bin/hadoop dfs put log文件所在目录 in ，则log文件目录已放入hdfs的/user/user-name/in 目录中</p>
<p>  6.现在来执行Grep操作<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  hadoop/bin/hadoop demo.hadoop.HadoopGrep in out<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  查看hadoop/logs/里的运行日志，重新执行前。运行hadoop/bin/hadoop dfs rmr out 删除out目录。<br>
<br>
  7.运行hadoop/bin/stop-all.sh 结束</p>
<p><strong>  3.3 集群运行模式<br>
</strong>  假设已执行完3.2的配置，假设第2台机器名是hadoopserver2<br>
  1.创建与hadoopserver同样的执行用户，将hadoop解压到相同的目录。<br>
<br>
  2.同样的修改haoop-env.sh中的JAVA_HOME 及修改与3.2同样的hadoop-site.xml<br>
<br>
  3. 将hadoopserver中的/home/username/.ssh/authorized_keys 复制到hadoopserver2,保证hadoopserver可以无需密码登陆hadoopserver2<br>
&nbsp;&nbsp;&nbsp;&nbsp;  scp /home/username/.ssh/authorized_keys  <a href="mailto:username@hadoopserver2:/home/username/.ssh/authorized_keys" temp_href="mailto:username@hadoopserver2:/home/username/.ssh/authorized_keys">username@hadoopserver2:/home/username/.ssh/authorized_keys</a><br>
 <br>
  4.修改hadoop-server的hadoop/conf/slaves文件, 增加集群的节点，将localhost改为<br>
&nbsp;&nbsp;&nbsp;  hadoop-server<br>
&nbsp;&nbsp;&nbsp;  hadoop-server2<br>
<br>
  5.在hadoop-server执行hadoop/bin/start-all.sh<br>
&nbsp;&nbsp;  将会在hadoop-server启动namenode,datanode,jobtracker,tasktracker<br>
&nbsp;&nbsp;  在hadoop-server2启动datanode 和tasktracker<br>
  <br>
  6.现在来执行Grep操作<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hadoop/bin/hadoop demo.hadoop.HadoopGrep in out<br>
&nbsp;&nbsp;&nbsp;  重新执行前,运行hadoop/bin/hadoop dfs rmr out 删除out目录<br>
<br>
  7.运行hadoop/bin/stop-all.sh 结束。<br>
&nbsp;&nbsp;&nbsp;</p>
<h2>四、效率</h2>
<p>&nbsp;&nbsp;   经测试，Hadoop并不是万用灵丹，很取决于文件的大小和数量，处理的复杂度以及<span class="hilite1">群集</span>机器的数量，相连的带宽，当以上四者并不大时，hadoop优势并不明显。<br>
&nbsp;&nbsp;   比如，不用hadoop用java写的简单grep函数处理100M的log文件只要4秒，用了hadoop local的方式运行是14秒，用了hadoop单机集群的方式是30秒，用双机集群10M网口的话更慢，慢到不好意思说出来的地步。</p>
</div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/9e0f7bf0d51311aba40f5255.html#comment">查看评论</a>]]></description>
        <pubDate>2008年01月20日 星期日  10:12</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/9e0f7bf0d51311aba40f5255.html</guid>
</item>

<item>
        <title><![CDATA[统计Excel打印页数]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/1e13d1f922b36d5a252df2dd.html]]></link>
        <description><![CDATA[
		
		<p>'Using an XLM macro in VBA</p>
<p>Sub ShowPageCount()<br>
&nbsp;&nbsp;&nbsp;&nbsp; PageCount = 0<br>
&nbsp;&nbsp;&nbsp;&nbsp; For Each sht In Worksheets<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht.Activate<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pages = ExecuteExcel4Macro("Get.Document(50)")<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageCount = PageCount + Pages<br>
&nbsp;&nbsp;&nbsp;&nbsp; Next sht<br>
&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "Total Pages = " &amp; PageCount<br>
End Sub</p>
<p><br>
'Using VBA</p>
<p><br>
Sub NumberOfPrintedPages()<br>
&nbsp;&nbsp;&nbsp;&nbsp; Worksheets(1).DisplayAutomaticPageBreaks = True<br>
&nbsp;&nbsp;&nbsp;&nbsp; HorizBreaks = Worksheets(1).HPageBreaks.Count<br>
&nbsp;&nbsp;&nbsp;&nbsp; HPages = HorizBreaks + 1<br>
&nbsp;&nbsp;&nbsp;&nbsp; VertBreaks = Worksheets(1).VPageBreaks.Count<br>
&nbsp;&nbsp;&nbsp;&nbsp; VPages = VertBreaks + 1<br>
&nbsp;&nbsp;&nbsp;&nbsp; NumPages = HPages * VPages<br>
&nbsp;&nbsp;&nbsp;&nbsp; Worksheets(1).DisplayAutomaticPageBreaks = False<br>
&nbsp;&nbsp;&nbsp;&nbsp; MsgBox NumPages<br>
End Sub<br>
</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/office%BC%BC%C7%C9">office技巧</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/1e13d1f922b36d5a252df2dd.html#comment">查看评论</a>]]></description>
        <pubDate>2007年09月09日 星期日  20:54</pubDate>
        <category><![CDATA[office技巧]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/1e13d1f922b36d5a252df2dd.html</guid>
</item>

<item>
        <title><![CDATA[AutoComplete 自动完成的设定]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/fc05e3c4280952ab8226ac0f.html]]></link>
        <description><![CDATA[
		
		<h1 class="clsTitle">AutoComplete を自分のサイトに合わせて仕立てる</h1>
<p class="clsAuthor">Frank Chang<br>
Microsoft Corporation</p>
<p class="clsPostDate">March 10, 1999<br>
日本語版最終更新日 1999 年 5 月 19 日</p>
<h2>要約</h2>
<p>サイトによっては、AutoCompleteで表示したくない機密情報を含む場合があります。Internet Explorer 5 は、利用者と Web 制作者の両方が特定の要求に合わせて AutoComplete を設定できるオプションをいくつか用意しています。この記事では、これらのオプションを使って AutoComplete をカスタマイズする方法について説明します。</p>
<h2>ユーザーができること</h2>
<p>デフォルトでは AutoComplete は無効になっているので、Internet Explorer は、その機能を有効にしたいか尋ねてきます。それをいったん有効にすれば、AutoComplete で格納された情報は、[インターネット オプション]ダイアログボックスの<strong>[コンテンツ]</strong>タブを持つ AutoComplete コントロール パネルでいつでもクリアできます。フィールド中の特定のエントリだけを削除したいときには、AutoComplete ドロップダウンでそのエントリをハイライトして、Deleteキーを押します。</p>
<h2>Web制作者ができること</h2>
<p>Internet Explorer 5 では、AutoComplete に関して、&lt;FORM&gt;タグ内で使用できる新しい属性を導入しました。その属性とは"AUTOCOMPLETE"です。それが"OFF"に設定されていると、AutoCompleteは使用されません。これは、たとえば、次のような形式で指定します。</p>
<pre class="clsCode">&lt;FORM method=post action="submit.asp" AUTOCOMPLETE="OFF"&gt;
</pre>
<p>AutoCompleteは、同じ属性を使ってフィールド単位で無効にすることもできます。この場合は、属性を入力フィールドに記述します。たとえば、次のように定義します。</p>
<pre class="clsCode">&lt;input type="text" name="creditcard" value="" 
&nbsp;&nbsp;&nbsp; size="16" maxlength="16" AUTOCOMPLETE="OFF"&gt;
</pre>
<p>たくさんの&lt;FORM&gt;タグがあって、AUTOCOMPLETE="OFF"属性をすべて追加するのが面倒な場合は、DHTML Behaviors でそれらを自動的に追加できます。この例の .htcファイルは、次のようなコードを実行します。</p>
<pre class="clsCode">&lt;PUBLIC:HTC&gt;

&lt;PUBLIC:ATTACH EVENT="oncontentready" HANDLER="init" /&gt;

&lt;SCRIPT&gt;
function init()
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element.setAttribute("AutoComplete", "off");
}
&lt;/SCRIPT&gt;

&lt;/PUBLIC:HTC&gt;
</pre>
<p><a href="http://www.microsoft.com/japan/developer/workshop/essentials/versions/autocomp.htc">.htc ファイルをダウンロード。</a></p>
<p>.htc ファイルがサーバー上に置かれたら、HTML コードの&lt;HEAD&gt;内でこのファイルを参照します。</p>
<pre class="clsCode">&lt;HEAD&gt;
&lt;STYLE&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FORM { behavior:url(autocomp.htc) }
&lt;/STYLE&gt;
&lt;/HEAD&gt;
</pre>
<p>注: この方法は有効ですが、AUTOCOMPLETE="OFF"属性は各&lt;FORM&gt;要素に明示的に追加することを強くお勧めします。</p>
<p>AutoCompleteは、キオスク モード(全画面表示)で自動的に無効となります。この機能は、Internet Explorer 管理者キットで無効にすることもできます。</p>
<p>この情報を頭に入れておけば、ユーザーは AutoComplete の利点を活用でき、Web 制作者は機密情報が残らないようにすることができます。</p>
<p>サンプル：<a href="http://www.kihara.net/tips/html/autocomplete.html">http://www.kihara.net/tips/html/autocomplete.html</a></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/html%5F%BB%F9%B1%BE">html_基本</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/fc05e3c4280952ab8226ac0f.html#comment">查看评论</a>]]></description>
        <pubDate>2007年06月21日 星期四  10:45</pubDate>
        <category><![CDATA[html_基本]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/fc05e3c4280952ab8226ac0f.html</guid>
</item>

<item>
        <title><![CDATA[Tomcat配置的几个安全问题]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/96e5df2a692fdf2cd42af1f0.html]]></link>
        <description><![CDATA[
		
		<p><strong>1.关闭服务器端口：</strong></p>
<p>server.xml默认有下面一行：<br>
&lt;Server port="8005" shutdown="SHUTDOWN"&gt;<br>
这样允许任何人只要telnet到服务器的8005端口，输入"SHUTDOWN"，然后回车，服务器立即就被关掉了。<br>
从安全的角度上考虑，我们需要把这个shutdown指令改成一个别人不容易猜测的字符串。<br>
例如修改如下：<br>
&lt;Server port="8006" shutdown="lizongbo"&gt;，这样就只有在telnet到8006，并且输入"lizongbo"才能够关闭Tomcat.<br>
注意：这个修改不影响shutdown.bat的执行。运行shutdown.bat一样可以关闭服务器。</p>
<p><strong>2.对于tomcat3.1中，屏蔽目录文件自动列出的方法</strong></p>
<p>缺省情况下，如果你访问tomcat下的一个web应用，那么如果你输入的是一个目录名，而且该目录下没有一个可用的welcome文件，那么tomcat会将该目录下的所有文件列出来，如果你想屏蔽这个缺省行为，那么可以修改conf/web.xml文件，将其中的：<br>
&lt;servlet&gt;<br>
&lt;servlet-name&gt;default&lt;/servlet-name&gt;<br>
&lt;servlet-class&gt;org.apache.catalina.servlets.DefaultServlet&lt;/servlet-class&gt;<br>
&lt;init-param&gt;<br>
&lt;param-name&gt;debug&lt;/param-name&gt;<br>
&lt;param-value&gt;0&lt;/param-value&gt;<br>
&lt;/init-param&gt;<br>
&lt;init-param&gt;<br>
&lt;param-name&gt;listings&lt;/param-name&gt;<br>
&lt;param-value&gt;true&lt;/param-value&gt;<br>
&lt;/init-param&gt;<br>
&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br>
&lt;/servlet&gt;<br>
修改为：<br>
&lt;servlet&gt;<br>
&lt;servlet-name&gt;default&lt;/servlet-name&gt;<br>
&lt;servlet-class&gt;org.apache.catalina.servlets.DefaultServlet&lt;/servlet-class&gt;<br>
&lt;init-param&gt;<br>
&lt;param-name&gt;debug&lt;/param-name&gt;<br>
&lt;param-value&gt;0&lt;/param-value&gt;<br>
&lt;/init-param&gt;<br>
&lt;init-param&gt;<br>
&lt;param-name&gt;listings&lt;/param-name&gt;<br>
&lt;param-value&gt;<font color="#ff0000">false</font>&lt;/param-value&gt;<br>
&lt;/init-param&gt;<br>
&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br>
&lt;/servlet&gt;</p>
<p><strong>3.如何让Tomcat记录客户端的访问日志</strong></p>
<p>需要完成的步骤：<br>
&nbsp;&nbsp;&nbsp;&nbsp; 1。修改Tomcat的conf/server.xml文件。<br>
&nbsp;&nbsp;&nbsp;&nbsp; 2。加上Valve节点到server.xml文件中，和您目前使用的Connector的节点平级。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如：&lt;Valve className="org.apache.catalina.valves.AccessLogValve" <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory="e:\trs\trscds\tomcat\logs" pattern="combined"/&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp; 3。重新启动您的Tomcat<br>
&nbsp;&nbsp;&nbsp;&nbsp; 4。有用户在访问的时候，在指定的log目录下面会生成一个access_log文件（每天一个）。<br>
上述的步骤是以Tomcat4.x为例。（可能会影响性能，不推荐大家使用）。</p>
<p><strong>4.处理好Tomcat管理台的安全</strong></p>
<p>Tomcat管理台的应用文件，默认在{Tomcat安装目录}\server\webapps下，有admin和manager两个应用。<br>
其用户密码，在{Tomcat安装目录}\conf/tomcat-users.xml中定义。在{Tomcat安装目录}\webapps下<br>
admin.xml和manager.xml文件定义了可以通过访问/admin和/manager进入。 <br>
默认情况下，完全可以登录tomcat管理台，造成严重安全问题<br>
检测办法：用IE打开链接<a href="http://[ip]:[Port]/admin"><font color="#6fbc4c">http://[IP]:[Port]/admin</font></a>，以用户名admin，密码为空登录，如果成功，<br>
说明存在问题。<br>
解决办法：可以删除{Tomcat安装目录}\webapps下admin.xml和manager.xml文件，或者去掉用户密<br>
码，也可以删除应用文件。</p>
<p><strong>5.运行错误网页</strong></p>
<p>如果找不到网页即出现404错误，会显示服务器版本号，服务器配置也一目了然，<br>
为了避免这种情况，希望自定义设置错误页面。 <br>
设置如下： <br>
1、将附件的index.htm文件拷贝至\webapps\ROOT目录内，删除或改名原来的index.jsp文件。 <br>
2、用记事本打开\conf\web.xml文件，在文件的倒数第二行（&lt;/web-app&gt;一行之前）加入以下内容： <br>
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp; &lt;error-page&gt;<br>
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp; &lt;error-code&gt;404&lt;/error-code&gt;<br>
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp; &lt;location&gt;/error_404.htm&lt;/location&gt;<br>
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp; &lt;/error-page&gt;</p>
<p>路径的是对的,奇怪的是我测试时输入一个不存在的页,出现404错误提示出现的却不是我所定义的页面,这就怪了.<br>
主要有以下几个因素:<br>
1.使用 tomcat 服务器<br>
2.tomcat服务器版本<br>
3.浏览器问题<br>
4.IE的设置<br>
5.错误页本身的大小<br>
<br>
<span style="COLOR: red">下面是提供的解决方法:</span> </p>
<p style="COLOR: red">1.升级tomcat (换成其它服务器,代价沉重)<br>
2.ie 设定&nbsp;&nbsp;&nbsp; 工具--&gt;Internet选项--&gt;高级---&gt;显示http友好错误信息(取消选择) ,<br>
3. 把错误页做大一点,具体几个字节,没测试,估计三四百足够了, (加一个div块,display设为none就可以了)<br>
4.设置指定错误页页状态为正确,骗过IE的自定义错误页 方法<br>
&lt;%<br>
&nbsp;&nbsp;&nbsp;&nbsp; response.setStatus(200); // 200 = HttpServletResponse.SC_OK<br>
%&gt;</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/java%5F%D4%D3%CF%EE">java_杂项</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/96e5df2a692fdf2cd42af1f0.html#comment">查看评论</a>]]></description>
        <pubDate>2007年06月14日 星期四  10:37</pubDate>
        <category><![CDATA[java_杂项]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/96e5df2a692fdf2cd42af1f0.html</guid>
</item>

<item>
        <title><![CDATA[Apache服务器配置WEBDAV详解]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/9e0f7bf0292aadaea40f5222.html]]></link>
        <description><![CDATA[
		
		<div style="FLOAT: right" align="right"><a title="评分 0" href="http://www.zxlm.cn/fh/misc.php?action=viewratings&amp;tid=1688&amp;pid=2130&amp;sid=vnrtF4"></a></div>
<div style="FLOAT: left" align="left"><br>


</div>
<span class="bold">Apache服务器配置WEBDAV详解</span><br>
<br>
<div class="t_msgfont" >WebDAV （Web-based Distributed Authoring and Versioning）是基于 HTTP 1.1 的一个通信协议。它为 HTTP 1.1 添加了一些扩展（就是在 GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法），使得应用程序可以直接将文件写到 Web Server 上，并且在写文件时候可以对文件加锁，写完后对文件解锁，还可以支持对文件所做的版本控制。这个协议的出现极大地增加了 Web 作为一种创作媒体对于我们的价值。基于 WebDAV 可以实现一个功能强大的内容管理系统或者配置管理系统。 <br>
&nbsp;&nbsp;&nbsp;&nbsp; 现在主流的WEB服务器一般都支持WebDAV，使用WebDAV的方便性，呵呵，就不用多说了吧，用过VS.NET开发ASP.NET应用的朋友就应该知道，新建/修改WEB项目，其实就是通过WebDAV+FrontPage扩展做到的，下面我就较详细的介绍一下，WebDAV在APACHE中的配置。 <br>
一、修改http.conf文 <br>
在末尾处加上以下内容 <br>
Include conf/mod_dav.conf #稍后将介绍该文件的设置 <br>
二、在apache/conf/目录下新建一文件（mod_dev.conf）,并输入以下内容 <br>
#Dav <br>
LoadModule dav_module modules/mod_dav.so <br>
LoadModule dav_fs_module modules/mod_dav_fs.so <br>
DAVLockDB var/DavLock <br>
Alias /webdav "d:/WorkSpace" <br>
&lt;Directory "d:/WorkSpace/"&gt; <br>
Dav On <br>
&lt;/Directory&gt; <br>
这样配置，其实也就可以访问了（可通过windows的网上邻居访问），但这样有个致命的缺点就是不需要密码就可以访问，安装性大大降低了。 <br>
三、增加安全性的配置 <br>
#Dav filesystem <br>
DAVLockDB var/DavLock <br>
Alias /webdav "d:/WorkSpace" <br>
&lt;Location /webdav &gt; <br>
Dav On <br>
AuthType Basic <br>
AuthName DAV <br>
AuthUserFile /usr/local/svn/svn-auth-file #密码验证文件 <br>
&lt;LimitExcept GET OPTIONS&gt; <br>
require user user1 <br>
&lt;/LimitExcept&gt; <br>
&lt;/Location&gt; <br>
四、/usr/local/svn/svn-auth-file文件的创建 <br>
&nbsp;&nbsp;&nbsp; 进入apache/bin目录，执行以下命令产生密码验证文件 <br>
htpasswd -cm /usr/local/svn/svn-auth-file user1 <br>
提示输入密码时输入该用户的密码 <br>
若还需要增加用户user2，则执行以下命令 <br>
htpasswd -m /usr/local/svn/svn-auth-file user2 <br>
删除某个用户（user2），可以使用下列指令： <br>
htpasswd -D /usr/local/svn/svn-auth-file user2 <br>
五、修改完成后，重启apache，即可以通过<a href="http://localhost/webdav" target="_blank">http://localhost/webdav</a>来访问共享资源了。</div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/java%5F%D4%D3%CF%EE">java_杂项</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/9e0f7bf0292aadaea40f5222.html#comment">查看评论</a>]]></description>
        <pubDate>2007年06月13日 星期三  09:27</pubDate>
        <category><![CDATA[java_杂项]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/9e0f7bf0292aadaea40f5222.html</guid>
</item>

<item>
        <title><![CDATA[全球最准确的性格测试]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/247ffe24719fed328644f979.html]]></link>
        <description><![CDATA[
		
		<span style="FONT-SIZE: 18px; LINE-HEIGHT: normal"><font color="#800080"><strong>这是一个十分有趣的心理测验，而且非常简单准确。</strong><br>
<br>
要评估自己的性格，请看看以下的图片，并选出你最喜爱的一张。<br>
这些图片是科学家跟一位心理学家一起合作的成果，并且经过历时几年的全球性测试，他们收到这个研究的响应之后，再小心地调较各个图片的颜色及形状，然后再次进行测试，直至他们得到这些非常成功的图片，这些图片代表了九种不同的性格。<br>
<br>
据称这是全球最准确的性格测试。希望你喜欢这个测 验！快来看看你们的性格如何吧。测试图片如下，最好在5秒钟内选出你喜欢的图片!<br>
<div forimg="1"><img border="0" small="0" class="blogimg" src="http://hiphotos.baidu.com/mayig/pic/item/e8f3c61bac40edfcaf51331c.jpg"></div>
<br>
</font><a target="_blank" href="http://pipi-liu2006.photo.hexun.com/20230953_d.html"><font color="#800080"></font></a><br>
<br>
<strong><font color="#ff0000"><span style="FONT-SIZE: 28px; LINE-HEIGHT: normal">答案：</span></font></strong><br>
<br>
<font color="#800080"><strong>1.无忧无虑，顽皮，愉快的人</strong><br>
<br>
你喜欢自由自在，无拘无束的生活。<br>
你的座右铭是：生命只能活一次，因此你尽量享受每一刻。<br>
你好奇心旺盛，对新事物抱有开放的态度；你向往改变，讨厌束缚。<br>
你觉得身边的环境都不断在变，而且经常为你带来惊喜。<br>
<br>
<strong>2. 独立，前卫，不受拘束</strong><br>
<br>
你追求自由及不受拘束，自我的生活。<br>
你的工作及消闲活动都与艺术有关。<br>
你对于自由的渴求有时候会使你做出令人出人意表的事。<br>
你的生活方式极具个人色彩；你永远不会盲目追逐潮流。<br>
相反地，你会根据自己的意思和信念去生活，就算是逆流而上也在所不惜。<br>
<br>
<strong>3. 时常自我反省,敏感的思想家</strong><br>
<br>
你对于自己及四周的环境能够比一般人控制得更好更彻底。<br>
你讨厌表面化及肤浅的东西；你宁愿独自一人也不愿跟别人闲谈，但你跟朋友的关系却非常深入，这令你的心境保持和谐安逸。<br>
不介意长时间独自一人，而且绝少会觉得沉闷。<br>
<br>
<strong>4. 务实，头脑清醒，和谐</strong><br>
<br>
你作风自然，喜欢简单的东西。<br>
人们欣赏你脚踏实地，他们觉得你稳重，值得信赖。<br>
你能够给予身边的人安全感，你给人一种亲切，温暖的感觉。<br>
你对于俗气的，花花绿绿的东西都不屑一顾，对时装潮流抱着怀疑的态度；<br>
对于你来说，衣服必须是实用及大方得体的。<br>
<br>
<strong>5. 专业，实事求事，自信</strong><br>
<br>
你掌管自己的生活，你相信自己的能力多于相信命运的安排。<br>
你以实际，简单的方式去解决问题。<br>
你对日常生活中所遇到的事物抱有现实的睇法，并且能够应付自如。<br>
人们知道你可担重任，因此都放心把大量工作交给你处理。<br>
你那坚强的意志使你时刻都充满信心。<br>
未达到自己的目标之前，你绝不罢休。<br>
<br>
<strong>6. 温和，谨慎，无攻击性</strong><br>
<br>
你生性随和，但处事谨慎。<br>
你很容易认识朋友，但同时享受你的私人时间及独立生活。<br>
有时候，你会从人群中抽身而出，一个人静静地思考生活的意义，并自娱一番。<br>
你需要个人的空间，因此有时会隐匿于美梦当中，但你并不是一个爱孤独的人。<br>
你跟自己及这个世界都能够和陆共处，而你对现状亦非常满意。<br>
<br>
<strong>7. 具分析力，可靠，自信</strong><br>
<br>
你对事物的灵敏度令你可以发现到旁人忽略了的东西。<br>
这些就是你的宝石，你喜欢发掘这些美好的东西。<br>
你的教养对于你的生活有很特别的影响。<br>
你有自己高雅独特的一套，无视任何时装潮流。<br>
你的理想生活是优雅而愉快的，而你亦希望跟你接触的人们都是高雅而有教养的。<br>
<br>
<strong>8. 浪漫，爱幻想，情绪化</strong><br>
<br>
你是一个感性的人。你拒绝只从一个严肃，理智的角度去理解事物。<br>
你的感觉亦十分重要。事实上，你觉得人生必需要有梦想才叫活得充实。<br>
你不接受那些轻视浪漫主义及被理智牵着鼻子走的人；<br>
而且不会让任何事物影响到你那丰富的感情及情绪。<br>
<br>
<strong>9. 精力充沛，好动，外向</strong><br>
<br>
你不介意冒险，特别喜欢有趣的，多元化的工作。<br>
相比之下，例行公事及惯例会令你没精打采。<br>
你最兴奋的是可以积极参与任何比赛活动，因为这样你就可以在众人面前大显身手了。</font></span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/247ffe24719fed328644f979.html#comment">查看评论</a>]]></description>
        <pubDate>2007年06月06日 星期三  17:28</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/247ffe24719fed328644f979.html</guid>
</item>

<item>
        <title><![CDATA[Windows XP开机自动登陆]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/11c385b1a4b5aa54092302a7.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;&nbsp;如果电脑没有设置密码，会很容易被黑客等不善的家伙利用做一些损坏用户电脑的事来，但winxp设置密码后，一般是要输入密码后才能进入，如果嫌麻烦，可以做如下修改，这样就不必输入密码直接可以进入系统了。而且密码是依然存在的。</p>
<p>方法1：运行&nbsp;rundll32&nbsp;netplwiz.dll,UsersRunDll&nbsp;或&nbsp;control&nbsp;userpasswords2，<br>
取消选择“要使用本机,用户必须输入用户名和密码”，然后单击“确定”，在弹出的对话框中输入你想</p>
<p>自动登录的账户和密码即可。</p>
<p>方法2：打开注册表，找到HKEY_LOCAL_MACHINE\&nbsp;SOFTWARE\&nbsp;Microsoft\&nbsp;Windows&nbsp;NT\&nbsp;CurrentVersion\</p>
<p>Winlogon主键，在右边窗口新键字符串值，其中前三项键值是必须要有的：<br>
----autoadminlogon,键值为1，用于设置是否可以自动登陆；<br>
----defaultusername：键值为自动登陆默认的用户名；<br>
----defaultpassword:&nbsp;键值为自动登陆用户的密码；<br>
----defaultdomainname:键值为自动登陆的计算机名称或者登陆网络的域名；<br>
----ForceAutoLogon的字符串值，并将这个值设为1，这样系统即便是在注销之后也会自动登录到</p>
<p>注：该方法也适合windows&nbsp;2000系统。</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/11c385b1a4b5aa54092302a7.html#comment">查看评论</a>]]></description>
        <pubDate>2007年02月26日 星期一  14:15</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/11c385b1a4b5aa54092302a7.html</guid>
</item>

<item>
        <title><![CDATA[辨别新手、二把刀和老司机]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/d1330f08392fa430e9248850.html]]></link>
        <description><![CDATA[
		
		<p><font face="Verdana" size="2">新手特点：<br>
　　1、&nbsp;从车型上分，大多数15万以下的新车为家庭第一辆车，新手驾驶的比例较大。&nbsp;<br>
　　2、&nbsp;车中比较花哨、尤其是车内悬挂各种物件，装饰物等。<br>
　　3、&nbsp;晚上开车灯比较早，经常附带开雾灯（这个最气人了）。<br>
　　4、&nbsp;刹车灯经常点亮的，一旦刹停，重新起步慢的。<br>
　　5、&nbsp;打转向灯却不见并线的，并线后灯还亮。<br>
　　6、&nbsp;遇别人并线时拼命按喇叭却没有其他举动的。<br>
　　7、&nbsp;超车道、快行线上缓慢行驶的。<br>
　　8、&nbsp;脑袋离前风挡较近的，抱着方向盘开车。<br>
　　9、&nbsp;并线减速的。想拐就拐的。&nbsp;<br>
　　10、&nbsp;换挡车停顿一下，加速缓慢的。<br>
<br>
<br>
3年以下车手的特点：<br>
　　1、&nbsp;所驾车辆为1-2年比较新的车，老车型比较多，起步好抢灯。<br>
　　2、&nbsp;选择路况能力差，往往急加速急刹车，易追尾和被追。<br>
　　3、&nbsp;不能容人，克制力差，不允许别人夹塞甚至并线。<br>
　　4、&nbsp;抢行半天往往停在小公共或大公共后面等待。&nbsp;<br>
　　5、&nbsp;投机取巧往往被警察抓住。&nbsp;<br>
　　6、&nbsp;并线角度很大，顾头不顾尾，右后轮经常是瘪的。<br>
　　7、&nbsp;喜欢超速飚车，不计后果，甚至往往拼命，斗气。&nbsp;<br>
　　8、&nbsp;普通车换宽胎的比较多，装行李架，尾翼，排气管，贴什么“零..暴走…..熊出没“之类的标签。&nbsp;<br>
　　9、&nbsp;头离前风档不再很近，但座姿很直。&nbsp;<br>
　　10、&nbsp;能连续起步，但贴车技术差。<br>
　　<br>
<br>
老司机特点：&nbsp;<br>
　　1、&nbsp;起步平稳，不仅不慢，随时并线选择通道，速度不快，走的快。&nbsp;<br>
　　2、&nbsp;遇合理并线多数情况默默的让。&nbsp;<br>
　　3、&nbsp;遇违章并线基本不让，除非个别情况但只让一辆车，其他别想。<br>
　&nbsp;&nbsp;4、&nbsp;跟车距离近但恒定，刹车力度合适，很少点头。&nbsp;<br>
　　5、&nbsp;超车迅猛果断，很少给你侵犯的机会。&nbsp;<br>
　　6、&nbsp;高速路行驶张持有度，得快则快，得慢则慢。&nbsp;<br>
　　7、&nbsp;基本不违章，即使偶尔合理违章，也是安全通过，很少被警察抓住。&nbsp;<br>
　　8、&nbsp;无论掉头、贴边、入位均动作流畅协调，控制精确。&nbsp;<br>
　　9、&nbsp;座姿后倾，头在B柱的保护之内，离前风挡较远。&nbsp;<br>
　　10、&nbsp;夹塞往往切线*入或内弧线*入，并线往往小角度，加速进入，对后车无影响</font></p>
<p><a title="点击查看清晰大图" href="http://club.autohome.com.cn/album/540330.html" target="_blank"><img src="http://img.autohome.com.cn/album/2007/2/1/77e27d6d-676b-4451-a1bb-18884b78d5cc.jpg" vspace="10" border="0"></a></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/d1330f08392fa430e9248850.html#comment">查看评论</a>]]></description>
        <pubDate>2007年02月05日 星期一  20:54</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/d1330f08392fa430e9248850.html</guid>
</item>

<item>
        <title><![CDATA[Mojavi入门--第七章：生成query的类，session，用户认证功能]]></title>
        <link><![CDATA[http://hi.baidu.com/mayig/blog/item/761d293f296fdbec54e7231a.html]]></link>
        <description><![CDATA[
		
		<p>第七章：生成query的类，session，用户认证功能<br>
1.生成query的类SQLStatement<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQLStatement类，在SQLStatement实例中登录字段名后，可以进行生成query，添加或删除字段名，控制字段名等操作。例如：<br>
/webapp/modules/Mochat/actions/IndexAction.class.php的向数据库中插入数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//得到要插入的数据<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$name&nbsp;=&nbsp;$DB-&gt;qstr($request-&gt;getParameter('name'));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$comment&nbsp;=&nbsp;$DB-&gt;qstr($request-&gt;getParameter('comment'));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存数据<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql&nbsp;=&nbsp;"INSERT&nbsp;INTO&nbsp;t_comment(name,comment)&nbsp;VALUES&nbsp;($name,$comment)";&nbsp;&nbsp;<br>
如果改成用SQLStatement操作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调用并实例化<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require_once(OPT_DIR&nbsp;.&nbsp;'sql/SQLStatement.class.php');&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sqlst&nbsp;=&nbsp;new&nbsp;SQLStatement();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//登陆数据的字段名<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sqlst-&gt;setStringAttribute('name',$request-&gt;getParameter('name'));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sqlst-&gt;setStringAttribute('comment',$request-&gt;getParameter('comment'));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//クエリ?作成<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql&nbsp;=&nbsp;$sqlst-&gt;prepare('INSERT&nbsp;INTO&nbsp;t_comment&nbsp;(%A{names})&nbsp;VALUES&nbsp;(%A{values})');&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;使用SQLStatement的setStringAttribute()方法时，登陆字段名和数据后，在prepare()函数%A{names}中的内容是用逗号分割的字段名，%A{values}中的内容是用逗号分割的字段值。setStringAttribute()会自动执行特殊字符（如字符内有「'」sql会出错）及用「'」扩起的处理。<br>
&nbsp;&nbsp;&nbsp;&nbsp;的AutoExecute()函数的功能与SQLStatementADOdb相近。</p>
<p>2.SQLStatement<br>
&nbsp;&nbsp;&nbsp;&nbsp;SQLStatement的地址/mojavi/opt/sql/SQLStatement.class.php<br>
&nbsp;&nbsp;&nbsp;&nbsp;require_once(OPT_DIR&nbsp;.&nbsp;'sql/SQLStatement.class.php');&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;调用<br>
&nbsp;&nbsp;&nbsp;&nbsp;$sqlst&nbsp;=&nbsp;new&nbsp;SQLStatement();生成实例<br>
&nbsp;&nbsp;&nbsp;&nbsp;主要是用以下两种方法将字段名和值登录到SQLstatement对象中。<br>
&nbsp;void&nbsp;setRawAttribute&nbsp;(string&nbsp;$name,&nbsp;mixed&nbsp;$value)&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;在Attribute内用$name做键$value设。此时尚未处理$value。<br>
&nbsp;&nbsp;&nbsp;&nbsp;例:$sqlst-&gt;setRawAttribute('number','110');<br>
void&nbsp;setStringAttribute&nbsp;(string&nbsp;$name,&nbsp;mixed&nbsp;$value)&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;在Attribute内用$name做键$value设。与setRawAttribute不同，$value已被处理。（处理特殊字符和用‘’扩起$value）<br>
&nbsp;&nbsp;&nbsp;&nbsp;例:$sqlst-&gt;setStringAttribute('messages','This&nbsp;is&nbsp;test&nbsp;message.');<br>
&nbsp;&nbsp;&nbsp;&nbsp;此时$sqlst-&gt;attribute[messages]的值为'This&nbsp;is&nbsp;test&nbsp;message.'。&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;setStringAttribute()是主要针对字符串的函数，会自动对字符串做一些特殊处理。setRawAttribute()是针对数值型的函数，不对字符串作特殊处理。<br>
&nbsp;&nbsp;&nbsp;&nbsp;$name主要作为字段名，$value主要作为字段值是用。还有setRawValue()，setStringValue()等方法，不再详述。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;登陆后的数据可用prepare()函数调出。<br>
string&nbsp;&amp;prepare&nbsp;(string&nbsp;$statement)<br>
&nbsp;&nbsp;参数的字符串中可使用如下的控制代码<br>
%a{name}&nbsp;是attribute[name]的值<br>
例&nbsp;%a{title}&nbsp;→&nbsp;Test&nbsp;<br>
%A{names|values}&nbsp;用逗号分割的字段名或字段值<br>
例&nbsp;%A{names}&nbsp;→&nbsp;id,&nbsp;title,&nbsp;messages&nbsp;、&nbsp;%A{values}&nbsp;→&nbsp;'TestID',&nbsp;'test',&nbsp;'This&nbsp;is&nbsp;test&nbsp;message.'&nbsp;<br>
%C{constant}&nbsp;php的预设值<br>
例&nbsp;%C{BASE_DIR}&nbsp;→&nbsp;/workspace/mojavi/&nbsp;<br>
%e&nbsp;attribute显示成name=value<br>
例&nbsp;%e&nbsp;→&nbsp;ID&nbsp;=&nbsp;'TestID',&nbsp;title&nbsp;=&nbsp;'test',&nbsp;messages&nbsp;=&nbsp;'This&nbsp;is&nbsp;test&nbsp;message.'&nbsp;<br>
%n&nbsp;换行<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;调用SQLStatement.class.php：require_once(OPT_DIR&nbsp;.&nbsp;'sql/SQLStatement.class.php');<br>
&nbsp;&nbsp;&nbsp;&nbsp;SQLStatement实例化：$sqlst&nbsp;=&nbsp;new&nbsp;SQLStatement();<br>
&nbsp;&nbsp;&nbsp;&nbsp;用setStringAttribute和setRawAttribute登陆数据：$sqlst-&gt;setStringAttribute('title','test');<br>
&nbsp;&nbsp;&nbsp;&nbsp;插入数据：$sql&nbsp;=&nbsp;$sqlst-&gt;prepare('INSERT&nbsp;INTO&nbsp;テ?ブル名(%A{names})&nbsp;VALUES&nbsp;(%A{values})');&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;更新数据：$sql&nbsp;=&nbsp;$sqlst-&gt;prepare("UPDATE&nbsp;テ?ブル名&nbsp;SET&nbsp;%e&nbsp;WHERE&nbsp;～");&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;removeAttribute(string&nbsp;$name)<br>
&nbsp;&nbsp;&nbsp;&nbsp;通过$name删除字段属性<br>
&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;clearAttributes()<br>
&nbsp;&nbsp;&nbsp;&nbsp;删除所有字段属性<br>
3.session<br>
&nbsp;&nbsp;&nbsp;&nbsp;Mojavi通过User对象（Action的execute之类的参数$user）来使用session功能。<br>
&nbsp;&nbsp;&nbsp;&nbsp;User的使用方法与Request几乎相同，对$user进行setAttribute()和removeAttribute()操作。看如下例子：<br>
/webapp/modules/Mochat/actions/IndexAction.class.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;GET方式：读文件<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;getDefaultView&nbsp;(&amp;$controller,&nbsp;&amp;$request,&nbsp;&amp;$user)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;…<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设字段<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$request-&gt;setAttribute('data',&nbsp;$data);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//从session中读入姓名<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$request-&gt;setAttribute('name',$user-&gt;getAttribute('name'));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;VIEW_INPUT;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;/*<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;POSTの方式：追加文件<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Execute&nbsp;(&amp;$controller,&nbsp;&amp;$request,&nbsp;&amp;$user)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;…<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将姓名存入session中<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$user-&gt;setAttribute('name',$request-&gt;getParameter('name'));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$module&nbsp;=&nbsp;$controller-&gt;getRequestModule();&nbsp;&nbsp;//模块名<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$controller-&gt;redirect("?module=$module");<br>
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>
在session的有效时间内（默认180分钟）名字被保存在session内。<br>
&nbsp;&nbsp;&nbsp;&nbsp;在使用类似手机这样不能使用cookie的浏览器时，session被写入URL中，在编译PHP时如果不设定--enable-trans-sid（自动将session写入URL）的话session就会中断。<br>
&nbsp;&nbsp;&nbsp;&nbsp;User不能自动序列化，对象被存入session中时需要手动序列化。<br>
4.Mojavi的认证功能<br>
&nbsp;&nbsp;&nbsp;&nbsp;认证功能主要有两步：用户认证，登陆权限。<br>
5.用户认证<br>
&nbsp;&nbsp;&nbsp;&nbsp;为能使用认证功能，在需要使用认证的Action中，写入isSecure()函数，当需要认证时返回TRUE否则返回FALSE。<br>
function&nbsp;isSecure&nbsp;()<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;TRUE;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>
所有Action的父类Action类已经定义了isSecure（）函数，在未被重写的情况下通常返回FALSE。<br>
&nbsp;&nbsp;&nbsp;&nbsp;如果使用户被认证，需对User对象设置如下方法void&nbsp;setAuthenticated(bool&nbsp;$status)<br>
&nbsp;&nbsp;&nbsp;&nbsp;当$status为TRUE时认证，否则为FALSE时未认证。<br>
&nbsp;&nbsp;&nbsp;&nbsp;判断是否被认证用bool&nbsp;isAuthenticated()<br>
&nbsp;&nbsp;&nbsp;&nbsp;返回TRUE时为被认证，返回FALSE时为未被认证。&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;未认证的状态下与isSecure()设为TRUE的Action相连接时，将被转送到在config.php内被按如下设置的程序中处理（默认情况下是Default模块的GlobalSecure程序）<br>
&nbsp;define('AUTH_MODULE',&nbsp;'Default');<br>
define('AUTH_ACTION',&nbsp;'Login');&nbsp;<br>
6.设定权限<br>
&nbsp;&nbsp;&nbsp;&nbsp;认证后，如果想要设置权限的话，在Action内需设置可返回权限名的函数getPrivilege()。<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;getPrivilege&nbsp;(&amp;$controller,&nbsp;&amp;$request,&nbsp;&amp;$user)<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;array('权限名',&nbsp;'权限namespace（可省略，默认为org.mojavi）');<br>
}&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
父类Action类中该函数已经被定义，默认的返回值是NULL(不设权限)<br>
&nbsp;&nbsp;&nbsp;&nbsp;namespace是权限的分类名，不指定的话也没关系。（内部处理时，在处理权限时，数组$namespace[$name]被设值时表示允许处理，未被设值表示不允许处理。namespace是数组，权限名是数组的键）</p>
<p>User的权限，User的如下函数群中设定。<br>
void&nbsp;addPrivilege(string&nbsp;$name,&nbsp;[string&nbsp;$namespace&nbsp;=&nbsp;'org.mojavi'])<br>
&nbsp;&nbsp;&nbsp;&nbsp;User中追加权限。$name权限名、$namespace<br>
void&nbsp;&nbsp;&amp;removePrivilege(string&nbsp;$name,&nbsp;[string&nbsp;$namespace&nbsp;=&nbsp;'org.mojavi'])<br>
&nbsp;&nbsp;&nbsp;&nbsp;删除User权限<br>
void&nbsp;removePrivileges([string&nbsp;$namespace&nbsp;=&nbsp;'org.mojavi'])<br>
&nbsp;&nbsp;&nbsp;&nbsp;删除指定的$namespace的所有权限。<br>
login同时，权限也被设定</p>
<p>在没有权限的情况下，将被转送到在config.php内被按如下设置的程序中处理。（默认情况下是Default模块的GlobalSecure程序）&nbsp;define('SECURE_MODULE',&nbsp;'Default');<br>
define('SECURE_ACTION',&nbsp;'GlobalSecure');&nbsp;&nbsp;<br>
7.Login示例<br>
&nbsp;&nbsp;&nbsp;以下是填入用户名和密码，利用数据库进行认证处理和添加权限的例子。<br>
&lt;?php<br>
require_once(LIB_DIR&nbsp;.&nbsp;'DBAction.class.php');</p>
<p>class&nbsp;LoginAction&nbsp;extends&nbsp;DBAction<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;/*<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;GET方式：输入画面<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;getDefaultView&nbsp;(&amp;$controller,&nbsp;&amp;$request,&nbsp;&amp;$user)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;VIEW_INPUT;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;/*<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;POST方式：认证<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Execute&nbsp;(&amp;$controller,&nbsp;&amp;$request,&nbsp;&amp;$user)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$DB&nbsp;=&nbsp;$request-&gt;getAttribute('DB');<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$id&nbsp;=&nbsp;$db-&gt;qstr($request-&gt;getParameter('id'));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$pass&nbsp;=&nbsp;$db-&gt;qstr($request-&gt;getParameter('pass'));&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql&nbsp;=&nbsp;"SELECT&nbsp;Privilege&nbsp;FROM&nbsp;t_user&nbsp;WHERE&nbsp;id&nbsp;=&nbsp;$id&nbsp;AND&nbsp;pass&nbsp;=&nbsp;$pass";<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($array&nbsp;=&nbsp;$db-&gt;GetRow($sql)){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//认证成功<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$user-&gt;setAuthenticated(true);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($array['Privilege']&nbsp;==&nbsp;'admin')&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果是管理者添加特权<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$user-&gt;addPrivilege('ADMIN');<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//认证失败<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;VIEW_INPUT;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//成功画面<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;VIEW_SUCCESS;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;getRequestMethods&nbsp;()<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;REQ_POST;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;//校验功能有效<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;validate&nbsp;(&amp;$controller,&nbsp;&amp;$request,&nbsp;&amp;$user)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;TRUE;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;//Validator登陆<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;registerValidators&nbsp;(&amp;$validatorManager,&nbsp;&amp;$controller,&nbsp;&amp;$request,&nbsp;&amp;$user)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用户名密码必填<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$validatorManager-&gt;setRequired('id',&nbsp;TRUE,&nbsp;'用户名必填');&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$validatorManager-&gt;setRequired('pass',&nbsp;TRUE,'密码必填');&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;//错误处理<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;handleError&nbsp;(&amp;$controller,&nbsp;&amp;$request,&nbsp;&amp;$user)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;VIEW_INPUT;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
}<br>
?&gt;&nbsp;&nbsp;</p>
<p>在显示和模板完成后，在需要设置访问权限的Action内写unction&nbsp;isSecure()和function&nbsp;getPrivirage()即可。</p>
<p>&lt;?php<br>
class&nbsp;SampleAction&nbsp;extends&nbsp;Action<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;/*<br>
&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;GET:成功画面<br>
&nbsp;&nbsp;&nbsp;&nbsp;*/<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;getDefaultView&nbsp;(&amp;$controller,&nbsp;&amp;$request,&nbsp;&amp;$user)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;VIEW_SUCCESS;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;getRequestMethods&nbsp;()<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;REQ_NONE;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;isSecure&nbsp;()<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;getPrivilege&nbsp;(&amp;$controller,&nbsp;&amp;$request,&nbsp;&amp;$user)<br>
&nbsp;&nbsp;&nbsp;&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;array('ADMIN');<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
}<br>
?&gt;&nbsp;&nbsp;</p>
<p>============================================================================</p>
<p>整篇资料就这些了，希望对大家有帮助。<br>
&nbsp;</p>
<br>
<br>
<p>Trackback:&nbsp;http://tb.blog.csdn.net/TrackBack.aspx?PostId=1232136</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/mayig/blog/category/Php">Php</a>&nbsp;<a href="http://hi.baidu.com/mayig/blog/item/761d293f296fdbec54e7231a.html#comment">查看评论</a>]]></description>
        <pubDate>2007年01月22日 星期一  14:08</pubDate>
        <category><![CDATA[Php]]></category>
        <author><![CDATA[mayig]]></author>
		<guid>http://hi.baidu.com/mayig/blog/item/761d293f296fdbec54e7231a.html</guid>
</item>


</channel>
</rss>