<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>WangDeer</title>
    <link>https://w.toomore.us/</link>
    <description>Recent content on WangDeer</description>
    <image>
      <url>https://w.toomore.us/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://w.toomore.us/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Thu, 07 Aug 2025 17:34:57 +0800</lastBuildDate><atom:link href="https://w.toomore.us/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>非机动车交通规则测验</title>
      <link>https://w.toomore.us/posts/youth/traffic-rules-quiz/</link>
      <pubDate>Thu, 07 Aug 2025 17:34:57 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/traffic-rules-quiz/</guid>
      <description>点击下方链接参与测验：
交通规则测验</description>
      <content:encoded><![CDATA[<p>点击下方链接参与测验：</p>
<p><a href="/html/Non-MotorVehicleTrafficRulesQuiz%E2%80%8B.html">交通规则测验</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>微软 50 周年壁纸是在 macOS上设计的?</title>
      <link>https://w.toomore.us/posts/internet/was-the-microsoft-50th-anniversary-wallpaper-designed-on-macos/</link>
      <pubDate>Mon, 14 Apr 2025 13:40:17 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/was-the-microsoft-50th-anniversary-wallpaper-designed-on-macos/</guid>
      <description>微软 50 周年纪念，发布了一组纪念壁纸。
有趣的是，这些壁纸疑似是在 macOS 上设计的。
Windows wallpapers worth celebrating
Download the wallpapers
我下载了上面的壁纸解压以后，发现目录下面有一个 __MACOSX 文件夹。
~/Downloads$ tree 50th-windows-wallpapers 50th-windows-wallpapers ├── __MACOSX ├── Microsoft_50th_Mahjong_Dark_4k.jpg ├── Microsoft_50th_Mahjong_Dark_Wide.jpg ├── Microsoft_50th_Mahjong_Light_4k.jpg ├── Microsoft_50th_Mahjong_Light_Wide.jpg ├── Microsoft_50th_Solitaire_Dark_4k.jpg ├── Microsoft_50th_Solitaire_Dark_Wide.jpg ├── Microsoft_50th_Solitaire_Light_4k.jpg ├── Microsoft_50th_Solitaire_Light_Wide.jpg ├── Microsoft_50th_Tulips_Dark_4k.jpgs ├── Microsoft_50th_Tulips_Dark_Wide.jpg ├── Microsoft_50th_Tulips_Light_4k.jpg ├── Microsoft_50th_Tulips_Light_Wide.jpg ├── Microsoft_50th_Windows_Dark_4k.jpg ├── Microsoft_50th_Windows_Dark_Wide.jpg ├── Microsoft_50th_Windows_Light_4k.jpg └── Microsoft_50th_Windows_Light_Wide.jpg 2 directories, 16 files </description>
      <content:encoded><![CDATA[<p>微软 50 周年纪念，发布了一组纪念壁纸。</p>
<p>有趣的是，这些壁纸疑似是在 macOS 上设计的。</p>
<p><a href="https://blogs.windows.com/windowsexperience/2025/04/03/windows-wallpapers-worth-celebrating/">Windows wallpapers worth celebrating</a></p>
<p><a href="https://unlocked.microsoft.com/wp-content/uploads/2025/03/50th-windows-wallpapers.zip">Download the wallpapers</a></p>
<p>我下载了上面的壁纸解压以后，发现目录下面有一个 <code>__MACOSX</code> 文件夹。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>    ~/Downloads$ tree 50th-windows-wallpapers
</span></span><span style="display:flex;"><span>    50th-windows-wallpapers
</span></span><span style="display:flex;"><span>    ├── __MACOSX
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Mahjong_Dark_4k.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Mahjong_Dark_Wide.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Mahjong_Light_4k.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Mahjong_Light_Wide.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Solitaire_Dark_4k.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Solitaire_Dark_Wide.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Solitaire_Light_4k.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Solitaire_Light_Wide.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Tulips_Dark_4k.jpgs
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Tulips_Dark_Wide.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Tulips_Light_4k.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Tulips_Light_Wide.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Windows_Dark_4k.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Windows_Dark_Wide.jpg
</span></span><span style="display:flex;"><span>    ├── Microsoft_50th_Windows_Light_4k.jpg
</span></span><span style="display:flex;"><span>    └── Microsoft_50th_Windows_Light_Wide.jpg
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">2</span> directories, <span style="color:#ae81ff">16</span> files
</span></span></code></pre></div><p><img loading="lazy" src="../image/Was-the-Microsoft-50th-anniversary-wallpaper-designed-on-macOS/1744609203567.png" alt="__MACOSX"  />
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>「转」西二旗折叠：蜂巢经济学启示录</title>
      <link>https://w.toomore.us/posts/wealth/who-is-worker-bee/</link>
      <pubDate>Wed, 25 Dec 2024 17:31:27 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/wealth/who-is-worker-bee/</guid>
      <description>原文：微信公众号「重远投资观」
一）操盘手的鬼牌 这篇文章大概写的是西二旗程序员们吃饭穿衣都会选最便宜的，然后把所有剩余的钱都拿来买房。 然后朋友也问我了，说在房价下跌的2023年，你怎么看。
这让我想起了我小时候，家里的阳台上，曾养过的一箱蜜蜂。因为我家靠近公园，有足够的花可以作为蜜源。所以在我的记忆中，家里从来不缺蜂蜜吃，因为家里人会定期戴着防护面罩开箱，把蜜取走。
不过我们每次取蜜，都会留下一些蜂蜜给蜜蜂过冬，如果收割得太狠，蜜蜂活不下去，就没有长久的蜂蜜吃了。不能涸泽而渔。​
小学的语文课本里，一直在歌颂蜜蜂的勤劳，可我一直有一个疑问，是不是正因为蜜蜂的勤劳，才使得它们变成了我们的绝佳收割对象。
也许，在蜜蜂的认知中，蜂箱蜂巢就是他们最大的资产，但在更高一维度的养蜂人眼中，把蜂箱视为最大资产的蜜蜂，才是养蜂人最大的资产。
所以呢？ 生活中极尽节俭，并把房子视为最大资产而背负房贷的西二旗人，会不会是更高维度的操盘手眼中的最大资产呢？
财富收割的链条 一个年薪百万的西二旗程序员，交掉社保个税后，到手大概70万，然后公司还要额外缴纳十几万的社保。 也就是，一个西二旗程序员每创造110多万的财富，在第一次分配环节，大概还能剩70万。然后，因为他们吃饭穿衣都极为节省，所以这70万，可能又有五六十万投入了楼市。自己还剩下十几万用于生活。
投入楼市的这五六十万，可能有40多万作为土地出让金交给了操盘手，剩下付给了开发商和上下游供应商。
这么看起来，似乎程序员每赚100块钱，就有80多块以社保个税土地出让金等方式回流到了操盘手的手中。自己只剩下十几块用于生活。
但这里其实是有个问题的，西二旗人可以不买新房的。如果他向老北京人买二手房，他的这笔巨大支出，不就回流到了老北京人手中，而没有回到操盘手的手中吗？
操盘手的解法三步曲 ​零成本选址 操盘手首先要选一块只有很少居民的土地，最好土地上没有老北京人的房子。一块荒地那就是最好了，这样就能实现零拆迁成本征用所有土地。 我们看到，北京西二旗，上海张江唐镇，杭州未科，成都天府新区，几十年前，可能都是比较荒的，也几乎都是这个套路。
​引入科技公司入驻 有花才能引来蜜蜂，有工作机会才能引来年轻人。所以如果能有一些政策优惠啥的，把科技大企业引来入驻，也就等同于，引来了大批期待高薪工作的年轻人。 于是，北京西二旗后厂村路成了程序员宇宙中心，上海张江唐镇成为高科技园区。杭州未科变身未来科技城&amp;hellip;&amp;hellip;
​开始售卖科技公司周边的土地 当年轻人开始在科技公司上班，就会就近选择可购买的房子。但附近所有的土地，都在操盘手的手中。所以，操盘手拥有绝对的定价权。于是，年轻人以未来的收入为背书，借债购买房产，支付房产的土地出让金。并开始定期还贷。
二）谁是蜂王，谁是工蜂 在一个蜂群巢穴，是有着明确的分工的。 一个巢穴的蜜蜂分为三种，蜂王，雄蜂，和工蜂。
工蜂是雌蜂但无生育能力，只负责采蜜工作和照顾小蜜蜂 蜂王不采蜜，只接受工蜂的养料，专职生小蜜蜂 雄蜂也不采蜜，唯一的工作就是，和蜂王交配 也就是说，让每个蜂种，都只从事自己最擅长的工作。
这似乎给了我一些启示。 虽然京沪的总和生育率已经降到了0.7，是全球最低。但这并不可怕，其实是有解法的。
生育效率的战争推演 方向一：用最少的钱，激励出最多的生育
从这个方向看，显然，钱应该花在三四线城市。给一线城市居民补贴50万，可能人家也不愿意生，毕竟房价生活成本高。但如果是四线城市，可能给20万，人家就愿意生了。毕竟养育成本低。
方向二：激励同样生育成果的前提下，花费最小的代价
如果一个985高学历，年薪百万的女性，辞职生二胎照顾孩子，每年会损失百万财富的创造。但如果是一个大专学历，年薪5万的女性辞职生二胎照顾孩子，每年只损失5万财富的创造。
三）北京西二旗和上海张江男的终极宿命 最后一个问题，西二旗程序员，为啥心甘情愿在吃穿上拼命节省，而把大笔的钱投入楼市呢？
答案是，他们认为房子是核心资产！​
但问题在于，任何资产，或者说财富，其本质，都是对他人劳动的索取权。也就是说，世间的一切资产，不论是房子，股票，货币，黄金，它最终要能兑换成人的劳动，才有意义。
可问题就在于，2020年之后的生育率断崖式下跌了。未来所有的人，都会盯着这仅有的少数年轻人的劳动价值。
四）后记 本文无意得罪张江和西二旗的程序员，因为文中所说的逻辑，其实适用于所有在科技新区安家的一二线城市中产。但因为我自己是一个前支付宝的程序员。想想还是自嘲下自己这个群体吧。
不过我在考虑的一个点是，如果在一线城市这么累，大部分的劳动成果要被转移支付出去，结果自己连多生一个孩子的压力都承受不了，那我们为什么还要在一线城市苟且下去呢？
看似一线城市的花很多，很适合蜜蜂采，但如果采回的蜜大部分要被转移支付，那这些花（工作机会）似乎也没有什么特别大的意义。</description>
      <content:encoded><![CDATA[<blockquote>
<p>原文：微信公众号「重远投资观」</p>
</blockquote>
<h2 id="一操盘手的鬼牌">一）操盘手的鬼牌</h2>
<p>这篇文章大概写的是西二旗程序员们吃饭穿衣都会选最便宜的，然后把所有剩余的钱都拿来买房。
然后朋友也问我了，说在房价下跌的2023年，你怎么看。</p>
<p>这让我想起了我小时候，家里的阳台上，曾养过的一箱蜜蜂。因为我家靠近公园，有足够的花可以作为蜜源。所以在我的记忆中，家里从来不缺蜂蜜吃，因为家里人会定期戴着防护面罩开箱，把蜜取走。</p>
<p><strong>不过我们每次取蜜，都会留下一些蜂蜜给蜜蜂过冬，如果收割得太狠，蜜蜂活不下去，就没有长久的蜂蜜吃了。不能涸泽而渔。​</strong></p>
<p>小学的语文课本里，一直在歌颂蜜蜂的勤劳，可我一直有一个疑问，是不是正因为蜜蜂的勤劳，才使得它们变成了我们的绝佳收割对象。</p>
<p>也许，在蜜蜂的认知中，蜂箱蜂巢就是他们最大的资产，但在更高一维度的养蜂人眼中，把蜂箱视为最大资产的蜜蜂，才是养蜂人最大的资产。</p>
<p><strong>所以呢？</strong>
生活中极尽节俭，并把房子视为最大资产而背负房贷的西二旗人，会不会是更高维度的操盘手眼中的最大资产呢？</p>
<hr>
<h3 id="财富收割的链条">财富收割的链条</h3>
<p>一个年薪百万的西二旗程序员，交掉社保个税后，到手大概70万，然后公司还要额外缴纳十几万的社保。
也就是，一个西二旗程序员每创造110多万的财富，在第一次分配环节，大概还能剩70万。然后，因为他们吃饭穿衣都极为节省，所以这70万，可能又有五六十万投入了楼市。自己还剩下十几万用于生活。</p>
<p>投入楼市的这五六十万，可能有40多万作为土地出让金交给了操盘手，剩下付给了开发商和上下游供应商。</p>
<p>这么看起来，似乎程序员每赚100块钱，就有80多块以社保个税土地出让金等方式回流到了操盘手的手中。自己只剩下十几块用于生活。</p>
<p><strong>但这里其实是有个问题的</strong>，西二旗人可以不买新房的。如果他向老北京人买二手房，他的这笔巨大支出，不就回流到了老北京人手中，而没有回到操盘手的手中吗？</p>
<hr>
<h3 id="操盘手的解法三步曲">操盘手的解法三步曲</h3>
<ol>
<li>​<strong>零成本选址</strong></li>
</ol>
<p>操盘手首先要选一块只有很少居民的土地，最好土地上没有老北京人的房子。一块荒地那就是最好了，这样就能实现零拆迁成本征用所有土地。
我们看到，北京西二旗，上海张江唐镇，杭州未科，成都天府新区，几十年前，可能都是比较荒的，也几乎都是这个套路。</p>
<ol start="2">
<li>​<strong>引入科技公司入驻</strong></li>
</ol>
<p>有花才能引来蜜蜂，有工作机会才能引来年轻人。所以如果能有一些政策优惠啥的，把科技大企业引来入驻，也就等同于，引来了大批期待高薪工作的年轻人。
于是，北京西二旗后厂村路成了程序员宇宙中心，上海张江唐镇成为高科技园区。杭州未科变身未来科技城&hellip;&hellip;</p>
<ol start="3">
<li>​<strong>开始售卖科技公司周边的土地</strong></li>
</ol>
<p>当年轻人开始在科技公司上班，就会就近选择可购买的房子。但附近所有的土地，都在操盘手的手中。所以，操盘手拥有绝对的定价权。于是，年轻人以未来的收入为背书，借债购买房产，支付房产的土地出让金。并开始定期还贷。</p>
<hr>
<h2 id="二谁是蜂王谁是工蜂">二）谁是蜂王，谁是工蜂</h2>
<p>在一个蜂群巢穴，是有着明确的分工的。
一个巢穴的蜜蜂分为三种，蜂王，雄蜂，和工蜂。</p>
<ul>
<li>工蜂是雌蜂但无生育能力，只负责采蜜工作和照顾小蜜蜂</li>
<li>蜂王不采蜜，只接受工蜂的养料，专职生小蜜蜂</li>
<li>雄蜂也不采蜜，唯一的工作就是，和蜂王交配</li>
</ul>
<p>也就是说，让每个蜂种，都只从事自己最擅长的工作。</p>
<p>这似乎给了我一些启示。
虽然京沪的总和生育率已经降到了0.7，是全球最低。但这并不可怕，其实是有解法的。</p>
<hr>
<h3 id="生育效率的战争推演">生育效率的战争推演</h3>
<p><strong>方向一</strong>：用最少的钱，激励出最多的生育</p>
<p>从这个方向看，显然，钱应该花在三四线城市。给一线城市居民补贴50万，可能人家也不愿意生，毕竟房价生活成本高。但如果是四线城市，可能给20万，人家就愿意生了。毕竟养育成本低。</p>
<p><strong>方向二</strong>：激励同样生育成果的前提下，花费最小的代价</p>
<p>如果一个985高学历，年薪百万的女性，辞职生二胎照顾孩子，每年会损失百万财富的创造。但如果是一个大专学历，年薪5万的女性辞职生二胎照顾孩子，每年只损失5万财富的创造。</p>
<hr>
<h2 id="三北京西二旗和上海张江男的终极宿命">三）北京西二旗和上海张江男的终极宿命</h2>
<p>最后一个问题，西二旗程序员，为啥心甘情愿在吃穿上拼命节省，而把大笔的钱投入楼市呢？</p>
<p><strong>答案是，他们认为房子是核心资产！​</strong></p>
<p>但问题在于，任何资产，或者说财富，其本质，都是对他人劳动的索取权。也就是说，世间的一切资产，不论是房子，股票，货币，黄金，它最终要能兑换成人的劳动，才有意义。</p>
<p>可问题就在于，2020年之后的生育率断崖式下跌了。未来所有的人，都会盯着这仅有的少数年轻人的劳动价值。</p>
<hr>
<h2 id="四后记">四）后记</h2>
<p>本文无意得罪张江和西二旗的程序员，因为文中所说的逻辑，其实适用于所有在科技新区安家的一二线城市中产。但因为我自己是一个前支付宝的程序员。想想还是自嘲下自己这个群体吧。</p>
<p>不过我在考虑的一个点是，如果在一线城市这么累，大部分的劳动成果要被转移支付出去，结果自己连多生一个孩子的压力都承受不了，那我们为什么还要在一线城市苟且下去呢？</p>
<p>看似一线城市的花很多，很适合蜜蜂采，但如果采回的蜜大部分要被转移支付，那这些花（工作机会）似乎也没有什么特别大的意义。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>难得空明</title>
      <link>https://w.toomore.us/posts/youth/kongkong-poem/</link>
      <pubDate>Mon, 01 Apr 2024 11:42:21 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/kongkong-poem/</guid>
      <description>朋友圈看到中学老师的书法作品。
版本比较多，找了一个类似的。
《志公和尚万空歌》 【梁】志公和尚（宝志禅师） 撰
南来北往走西东，看得浮生总是空。
天也空来地也空，人生渺渺在其中。
大地本来无寸土，人生劳碌一场空。
日也空来月也空，来来往往不留踪。
日月星辰常运转，人亡千载永无踪。
山也空来水也空，随缘变化体无穷。
青山绿水依然在，为人一死不相逢。
田也空来地也空，换了多少主人翁。
世间多少穷后富，也有多少富后穷。
金也空来银也空，死后何曾在手中。
万两黄金拿不去，为他一世受牢笼。
生也空来死也空，生死如同一梦中。
生如百花逢春好，死如黄叶落秋风。
夫也空来妻也空，大限到了各西东。
夫妻本是同林鸟，可怜死后不相逢。
男也空来女也空，黄泉路上难相逢。
贵子贤孙休贪爱，人因痴爱堕牢笼。
幻化空身虚变现，空是色来色是空。
空手来了空手去，到头总是一场空。
朝走西，暮走东，人生恰似采花蜂。
采得百花成蜜后，一场辛苦一场空。
夜深听得三更鼓，翻身不觉五更钟。
从头仔细想一想，便是南柯一梦中。
不信但看桃李树，花开能有几时红。
任你做到公卿相，死后还归泥土中。
身归土，气归风，一片顽皮裹臭脓。
败坏不如猪狗相，何不当初问志公。
生有一，死无二，休向人前夸伶俐。
生前置下田万顷，死后只得三步地。
宽八尺、长丈二，仔细思量真个是。
若人死后带得去，志公与你亲书契。</description>
      <content:encoded><![CDATA[<p><img loading="lazy" src="/posts/youth/images/kongkong-poem/kongkong-2.jpg" alt="万空歌"  />
</p>
<p>朋友圈看到中学老师的书法作品。</p>
<p>版本比较多，找了一个类似的。</p>
<h2 id="志公和尚万空歌">《志公和尚万空歌》</h2>
<blockquote>
<p>【梁】志公和尚（宝志禅师） 撰</p>
</blockquote>
<p>南来北往走西东，看得浮生总是空。</p>
<p>天也空来地也空，人生渺渺在其中。</p>
<p>大地本来无寸土，人生劳碌一场空。</p>
<p>日也空来月也空，来来往往不留踪。</p>
<p>日月星辰常运转，人亡千载永无踪。</p>
<p>山也空来水也空，随缘变化体无穷。</p>
<p>青山绿水依然在，为人一死不相逢。</p>
<p>田也空来地也空，换了多少主人翁。</p>
<p>世间多少穷后富，也有多少富后穷。</p>
<p>金也空来银也空，死后何曾在手中。</p>
<p>万两黄金拿不去，为他一世受牢笼。</p>
<p>生也空来死也空，生死如同一梦中。</p>
<p>生如百花逢春好，死如黄叶落秋风。</p>
<p>夫也空来妻也空，大限到了各西东。</p>
<p>夫妻本是同林鸟，可怜死后不相逢。</p>
<p>男也空来女也空，黄泉路上难相逢。</p>
<p>贵子贤孙休贪爱，人因痴爱堕牢笼。</p>
<p>幻化空身虚变现，空是色来色是空。</p>
<p>空手来了空手去，到头总是一场空。</p>
<p>朝走西，暮走东，人生恰似采花蜂。</p>
<p>采得百花成蜜后，一场辛苦一场空。</p>
<p>夜深听得三更鼓，翻身不觉五更钟。</p>
<p>从头仔细想一想，便是南柯一梦中。</p>
<p>不信但看桃李树，花开能有几时红。</p>
<p>任你做到公卿相，死后还归泥土中。</p>
<p>身归土，气归风，一片顽皮裹臭脓。</p>
<p>败坏不如猪狗相，何不当初问志公。</p>
<p>生有一，死无二，休向人前夸伶俐。</p>
<p>生前置下田万顷，死后只得三步地。</p>
<p>宽八尺、长丈二，仔细思量真个是。</p>
<p>若人死后带得去，志公与你亲书契。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ubuntu Clean</title>
      <link>https://w.toomore.us/posts/dev/ubuntu-clean/</link>
      <pubDate>Fri, 21 Apr 2023 15:53:23 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ubuntu-clean/</guid>
      <description>清理 /boot 目录 查看内核版本 uname -r 列出所有的内核 dpkg --list &#39;linux-image*&#39; | grep ^ii 卸载没有使用的内核 sudo apt-get remove linux-image-VERSION 清理不再使用的包 sudo apt-get autoremove 更新内核列表 sudo update-grub 清理 /lib/modules 目录 查看已安装的内核版本 apt list --installed linux-image 删除未使用的内核版本对应的目录 sudo rm -rf 5.15.0-70-generic/ 清除未使用的 snap 包 #!/bin/sh LANG=en_US.UTF-8 snap list --all | awk &amp;#39;/disabled/{print $1, $3}&amp;#39; | while read pkg revision; do sudo snap remove &amp;#34;$pkg&amp;#34; --revision=&amp;#34;$revision&amp;#34; done </description>
      <content:encoded><![CDATA[<h2 id="清理-boot-目录">清理 <code>/boot</code> 目录</h2>
<ul>
<li>查看内核版本 <code>uname -r</code></li>
<li>列出所有的内核  <code>dpkg --list 'linux-image*' | grep ^ii</code></li>
<li>卸载没有使用的内核 <code>sudo apt-get remove linux-image-VERSION</code></li>
<li>清理不再使用的包 <code>sudo apt-get autoremove</code></li>
<li>更新内核列表 <code>sudo update-grub</code></li>
</ul>
<h2 id="清理-libmodules-目录">清理 <code>/lib/modules</code> 目录</h2>
<ul>
<li>查看已安装的内核版本 <code>apt list --installed linux-image</code></li>
<li>删除未使用的内核版本对应的目录 <code>sudo rm -rf 5.15.0-70-generic/</code></li>
</ul>
<h2 id="清除未使用的-snap-包">清除未使用的 snap 包</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/sh
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>LANG<span style="color:#f92672">=</span>en_US.UTF-8 snap list --all | awk <span style="color:#e6db74">&#39;/disabled/{print $1, $3}&#39;</span> |
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span> read pkg revision; <span style="color:#66d9ef">do</span>
</span></span><span style="display:flex;"><span>  sudo snap remove <span style="color:#e6db74">&#34;</span>$pkg<span style="color:#e6db74">&#34;</span> --revision<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span>$revision<span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>Porto</title>
      <link>https://w.toomore.us/posts/dev/porto/</link>
      <pubDate>Fri, 17 Feb 2023 13:46:44 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/porto/</guid>
      <description>Porto (Software Architectural Pattern) Welcome to Porto Introduction Getting Started Layers Overview 1) Ship Layer 2) Containers Layer Containers Sections Components 1) Main Components 1.1) Components Interaction Diagram 1.2) Request Life Cycle 1.3) Main Components Definitions &amp;amp; Principles Routes Controllers Requests Actions Tasks Models Views Transformers Exceptions Sub-Actions 2) Optional Components Typical Container Structure Porto Quality Attributes Implementations (Built with Porto) Feedback &amp;amp; Questions Introduction Porto is a modern software architectural pattern, consisting of guidelines, principles and patterns to help developers organize their code in a highly maintainable and reusable way.</description>
      <content:encoded><![CDATA[<h1 id="porto-software-architectural-pattern">Porto (Software Architectural Pattern)</h1>
<p><img loading="lazy" src="../images/porto/porto-logo.png" alt=""  />
</p>
<h2 id="welcome-to-porto">Welcome to Porto</h2>
<ul>
<li><a href="#Introduction">Introduction</a></li>
<li><a href="#Getting-Started">Getting Started</a>
<ul>
<li><a href="#Layers-Overview">Layers Overview</a></li>
<li><a href="#Ship-Layer">1) Ship Layer</a></li>
<li><a href="#Containers-Layer">2) Containers Layer</a>
<ul>
<li><a href="#Containers">Containers</a></li>
<li><a href="#Sections">Sections</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#Components">Components</a>
<ul>
<li><a href="#Main-Components">1) Main Components</a>
<ul>
<li><a href="#Components-Interaction-Diagram">1.1) Components Interaction Diagram</a></li>
<li><a href="#Request-Life-Cycle">1.2) Request Life Cycle</a></li>
<li><a href="#Components-Details">1.3) Main Components Definitions &amp; Principles</a>
<ul>
<li><a href="#Routes">Routes</a></li>
<li><a href="#Controllers">Controllers</a></li>
<li><a href="#Requests">Requests</a></li>
<li><a href="#Actions">Actions</a></li>
<li><a href="#Tasks">Tasks</a></li>
<li><a href="#Models">Models</a></li>
<li><a href="#Views">Views</a></li>
<li><a href="#Transformers">Transformers</a></li>
<li><a href="#Exceptions">Exceptions</a></li>
<li><a href="#Sub-Actions">Sub-Actions</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#Optional-Components">2) Optional Components</a></li>
</ul>
</li>
<li><a href="#Typical-Container-Structure">Typical Container Structure</a></li>
<li><a href="#Quality-Attributes">Porto Quality Attributes</a></li>
<li><a href="#Implementations-Projects">Implementations (Built with Porto)</a></li>
<li><a href="#Feedback">Feedback &amp; Questions</a></li>
</ul>
<p><a id="Introduction"></a></p>
<h1 id="introduction">Introduction</h1>
<p><strong>Porto</strong> is a modern software architectural pattern, consisting of guidelines, principles and patterns to help developers organize their code in a highly maintainable and reusable way.</p>
<p>Porto is a great option for medium to large sized web projects, as they tend to have higher complexity over time.</p>
<p>With Porto developers can build super scalable monolithics, which can be easily splitted into multiple micro-services whenever needed.
While enabling the reusability of the business logic <em>(Application Features)</em>, across multiple projects.</p>
<p><strong>Porto</strong> inherits concepts from the <strong>DDD</strong> <em>(Domain Driven Design)</em>, <strong>Modular</strong>, <strong>Micro Kernel</strong>, <strong>MVC</strong> <em>(Model View Controller)</em>, <strong>Layered</strong> and <strong>ADR</strong> <em>(Action Domain Responder)</em> architectures.
<br>
And it adheres to a list of convenient design principles such as <strong>SOLID</strong>, <strong>OOP</strong>, <strong>LIFT</strong>, <strong>DRY</strong>, <strong>CoC</strong>, <strong>GRASP</strong>, <strong>Generalization</strong>, <strong>High Cohesion</strong> and <strong>Low Coupling</strong>.</p>
<br>
<p>It started as an experimental architecture, aiming at solving the common problems web developers face, when building large projects.</p>
<p><em>Feedbacks &amp; Contributions are much appreciated.</em></p>
<blockquote>
<p>&ldquo;Simplicity is prerequisite for reliability.” — Edsger Dijkstra</p>
</blockquote>
<p><a id="Getting-Started"></a></p>
<h1 id="getting-started">Getting Started</h1>
<p><a id="Layers-Overview"></a></p>
<h2 id="layers-overview">Layers Overview</h2>
<p>At its core Porto consists of 2 layers &ldquo;folders&rdquo; <code>Containers</code> &amp; <code>Ship</code>.</p>
<ul>
<li><strong>The Containers layer</strong> holds all your application business logic code.</li>
<li><strong>The Ship layer</strong> holds the infrastructure code (your shared code between all Containers).</li>
</ul>
<p>These layers can be created anywhere inside any framework of choice.</p>
<p><em>(Example: in Laravel or Rails they can be created in the <code>app/</code> directory or in a new <code>src/</code> directory at the root.)</em></p>
<h3 id="visual-overview">Visual Overview</h3>
<p><img loading="lazy" src="../images/porto/porto_visual_diagram.png" alt=""  />
</p>
<p>Before diving deeper, let&rsquo;s understand the different levels of code we will have in your code base:</p>
<h4 id="code-levels">Code Levels</h4>
<ul>
<li><strong>Low-level code</strong>: the framework code (implements basic operations like reading files from a disk, or interacting with a database). Usually lives in the Vendor directory.</li>
<li><strong>Mid-level code</strong>: the application general code (implements functionality that serves the High-level code. And it relies on the Low-level code to function). Should be in the <code>Ship</code> layer.</li>
<li><strong>High-level code</strong>: the business logic code (encapsulates complex logic and relies on the Mid-level code to function). Should be in the <code>Containers</code> layer.</li>
</ul>
<h3 id="layers-diagram">Layers Diagram</h3>
<p>The Containers layer (cargo containers) <code>&gt;&gt; relies &gt;&gt;</code> on the Ship layer (cargo ship) <code>&gt;&gt; relies &gt;&gt;</code> on the Framework (sea).</p>
<p><img loading="lazy" src="../images/porto/porto_layers.png" alt=""  />
</p>
<h3 id="monolithic-to-micro-services">Monolithic to &ldquo;Micro&rdquo; Services</h3>
<p>Porto is designed to scale with you! While most companies shift from Monolithic to Micro-Services <em>(and most recently Serverless)</em> as they scale up. Porto offers the flexibility to deflate your Monolithic into Micro-Services (or SOA) at any time with the least effort possible.</p>
<p>In Porto terms a Monolithic is equal to one cargo ship of Containers, while Micro Services is equal to multiple cargo ships of Containers. <em>(Disregarding their sizes).</em></p>
<p>Porto offers the flexibility to start small with a single well organized Monolithic service and grow whenever you need, by extracting containers into multiple services as your team grows.</p>
<p>This is possible becuase Porto organizes your code into Containers, which are grouped into isolated Sections. A section can be later extracted out with all it&rsquo;s related containers to be depolyed separatly as you scale.</p>
<p>As you can imagine operating two or more ships in the sea rather than a single one, will increase the cost of maintenance (two repositories, two CI pipelines,&hellip;) but also gives you flexibility, where each ship can run at different speed and direction. This technially translates to each service scaling differently based on the traffic it expect.</p>
<p>How Sections &ldquo;Services&rdquo; communicate together is completely up to the developers, even though Porto recomands using Events and/or Commands.</p>
<br>
<p><a id="Ship-Layer"></a></p>
<h2 id="1-ship-layer">1) Ship Layer</h2>
<p>The Ship layer, contains the Parent &ldquo;Base&rdquo; classes <em>(classes extended by every single component)</em> and some Utility Code.</p>
<p>The Parent classes &ldquo;Base classes&rdquo; of the Ship layer gives full control over the Container&rsquo;s Components <em>(for example adding a function to the Base Model class, makes it available in every Model in your Containers).</em></p>
<p>The Ship layer, also plays an important role in separating the Application code from the Framework code. Which facilitates upgrading the Framework without affecting the Application code.</p>
<p>In Porto the Ship layer is very slim, it does NOT contain common reusable functionalities such as Authentication or Authorization, since all these functionalities are provided by Containers, to be replaced whenever needed. Giving the developers more flexibility.</p>
<br>
<h3 id="ship-structure">Ship Structure</h3>
<p>The Ship layer, contains the following types of codes:</p>
<ul>
<li><strong>The Core Code</strong>: is the engine of the ship, that auto-register and auto-load all your Container&rsquo;s Components to boot your Application. It contains most of the magical code that handles everything that is not part of your business logic. And mostly contains code that facilitate the development by extending the framework features.</li>
<li><strong>The Containers shared code</strong>
<ul>
<li><strong>Parents Classes</strong>: the base classes of each Component in your Container. (Adding functions to the parent classes makes them available in every Container). Parents are made to contain shared code between your Containers.</li>
<li><strong>Generic Classes</strong>: the reusable features and classes which can be used by every Container. Such as, Global Exceptions, Application Middleware&rsquo;s, Global Config files, etc.</li>
</ul>
</li>
</ul>
<p>Note: All the Container&rsquo;s Components MUST extend or inherit from the Ship layer <em>(in particular the Parent&rsquo;s folder)</em>.</p>
<p>When separating the <strong>Core</strong> to an external package, the Ship Parents should extend from the Core Parents (can be named Abstract, since most of the them supposed to be Abstract Classes).
The Ship Parents holds your custom Application shared business logic, while the Core Parents (Abstracts) holds your framework common code, basically anything that is not business logic should be hidden from the actual Application being developed.</p>
<br>
<p><a id="Containers-Layer"></a></p>
<h2 id="2-containers-layer">2) Containers Layer</h2>
<p>Porto manages the complexity of a problem by breaking it down to smaller manageable Containers.</p>
<p>The Containers layer is where the Application specific business logic lives <em>(Application features/functionalities)</em>. You will spend 90% of your time at this layer.</p>
<br>
<p><a id="Containers"></a></p>
<h3 id="containers">Containers</h3>
<p>A Container can be a <strong>feature</strong>, or can be a wrapper around a RESTful API resource, or anything else.</p>
<h4 id="example-1">Example 1:</h4>
<p>&ldquo;In a TODO App, the &lsquo;Task&rsquo;, &lsquo;User&rsquo; and &lsquo;Calendar&rsquo; objects each would live in a different Container, were each has its own Routes, Controllers, Models, Exceptions, etc. And each Container is responsible for receiving requests and returning responses from whichever supported UI (Web, API..).&rdquo;</p>
<p>It&rsquo;s advised to use a Single Model per Container, however in some cases you may need more than a single Model and that&rsquo;s totally fine.
(Even if you have a single Model you could also have Values &ldquo;AKA Value Objects&rdquo; (Values are similar to Models but that do not get represented in the DB on their own tables but as data on the Models) these objects get built automatically after their data is fetched from the DB such as Price, Location, Time&hellip;)</p>
<p>Just keep in mind two Models means two Repositories, two Transformers, etc.
Unless you want to use both Models always together, do split them into 2 Containers.</p>
<p>Note: if you have high dependecies between two containers by nature, than placing them in the same Section would make reusing them easier in other projects.</p>
<h4 id="example-2">Example 2:</h4>
<p>If you look at <a href="http://apiato.io">Apiato</a> (the first project implementing Porto), you will notice that Authentication and Authorization are both features provided as Containers.</p>
<p><a id="Containers-Structure"></a></p>
<h4 id="basic-containers-structure">Basic Containers Structure</h4>
<pre tabindex="0"><code>Container 1
	├── Actions
	├── Tasks
	├── Models
	└── UI
	    ├── WEB
	    │   ├── Routes
	    │   ├── Controllers
	    │   └── Views
	    ├── API
	    │   ├── Routes
	    │   ├── Controllers
	    │   └── Transformers
	    └── CLI
	        ├── Routes
	        └── Commands

Container 2
	├── Actions
	├── Tasks
	├── Models
	└── UI
	    ├── WEB
	    │   ├── Routes
	    │   ├── Controllers
	    │   └── Views
	    ├── API
	    │   ├── Routes
	    │   ├── Controllers
	    │   └── Transformers
	    └── CLI
	        ├── Routes
	        └── Commands
</code></pre><p><a id="Containers-Interactions"></a></p>
<h4 id="containers-communication">Containers Communication</h4>
<ul>
<li>A Container MAY depends on one or many other Containers. <em>(Wihin the same Section.)</em></li>
<li>A Controller MAY call Tasks from another Container.</li>
<li>A Model MAY have a relationship with a Model from another Containers.</li>
<li>Other forms of communications are also possible, such as via Events and Commands.</li>
</ul>
<p><em>If you use Event based communcations between containers, you could use the same mechanism after spliting your code base into multi services.</em></p>
<blockquote>
<p>Note: If you&rsquo;re not familiar with separating your code into Modules/Domains, or for some reason you don&rsquo;t prefer that approach. You can create your entire Application in a single Container. (Not recommended but absolutely possible).</p>
</blockquote>
<p><a id="Sections"></a></p>
<h3 id="sections">Sections</h3>
<p>Section are another very important aspect in the Porto architecture.</p>
<p>A <strong>Section</strong> is a group of related containers. It can be a <strong>service</strong> <em>(micro or bigger)</em>, or a sub-system within the main system, or antyhing else.</p>
<p><em>Think of a Section as a rows of containers on a cargo ship. Well organized containers in rows, speeds up the loading and unloading of related containers for a specific customer.</em></p>
<p>The basic definition of a Section is a folder that contains related Containers. However the benifits are huge. (A section is equivalent to a bounded context from the Domain-driven design) Each section represents a portion of your system and is completely isolated from other sections.</p>
<p>A Section can be deployed separatly.</p>
<h4 id="example-1-1">Example 1:</h4>
<p>If you&rsquo;re building a racing game like Need for Speed, you may have the following two sections: the Race Section and the Lobby Section, where each section contains a Car Container and a Car Model inside it, but with different properties and functions.
In this example the Car Model of the Race section can contain the business logic for accelerating and controlling the car, while the Car Model of the Lobby Section contains the business logic for customizing the car (color, accessories..) before the race.</p>
<p>Sections allows separating large Model into smaller ones. And they can provide boundaries for different Models in your system.</p>
<p>If you prefer simplicity or you have only single team working on the project, you can have no Sections at all (where all Containers live in the containers folder) which means your project is a single section. In this case if the project grew quickly and you decided you need to start using sections, you can make a new project also with a single section, this is known as Micro-Services. In Micro-Services each section &ldquo;project portion&rdquo; live in its own project (repository) and they can communicate over the network usually using the HTTP protocol.</p>
<h4 id="example-2-1">Example 2:</h4>
<p>In a typical e-commerce application you can have the following sections: Inventory Section, Shipping Section, Order Section, Payment Section, Catalog Section and more&hellip;</p>
<p>As you can imagine each of these Sections can be a micro-service by itself. And can be extracted and deployed on its own server based on the traffic it receives.</p>
<p><a id="Sections-Interactions"></a></p>
<h4 id="sections-communication">Sections Communication</h4>
<ul>
<li>A Section MUST be isolated and SHOULD NOT depends on any other Section.</li>
<li>A Section MAY listen to Events fired by other Sections. (Commands can be used as alternative to Events).</li>
</ul>
<br>
<p><a id="Components"></a></p>
<h1 id="components">Components</h1>
<p>In the Container layer there&rsquo;s a set of <code>Components</code> &ldquo;Classes&rdquo; with predefined responsibilities.</p>
<p>Every single piece of code you write should live in a Component (class function). Porto defines a huge list of those Components for you, with a set guidelines to follow when using them, to keep the development process smooth.</p>
<p>Components ensures consistency and make your code easier to maintain as you already know where each piece of code should be found.</p>
<p><a id="Components-Types"></a></p>
<h3 id="components-types">Components Types</h3>
<p>Every Container consists of a number of Components, in <strong>Porto</strong> the Components are split into two Types:
<code>Main Components</code> and <code>Optional Components</code>.</p>
<p><a id="Main-Components"></a></p>
<h2 id="1-main-components">1) Main Components</h2>
<p>You must use these Components as they are essential for almost all types of Web Apps:</p>
<p>Routes - Controllers - Requests - Actions - Tasks - Models - Views - Transformers.</p>
<blockquote>
<p><strong>Views:</strong> should be used in case the App serves HTML pages.
<br>
<strong>Transformers:</strong> should be used in case the App serves JSON or XML data.</p>
</blockquote>
<p><a id="Components-Interaction-Diagram"></a></p>
<h3 id="11-main-components-interaction-diagram">1.1) Main Components Interaction Diagram</h3>
<p><img loading="lazy" src="../images/porto/porto_container_interactions.png" alt=""  />
</p>
<p><a id="Request-Life-Cycle"></a></p>
<h3 id="12-the-request-life-cycle">1.2) The Request Life Cycle</h3>
<p><em>A basic API call scenario, navigating through the main components:</em></p>
<ol>
<li><strong>User</strong> calls an <code>Endpoint</code> in a <code>Route</code> file.</li>
<li><code>Endpoint</code> calls a <code>Middleware</code> to handle the Authentication.</li>
<li><code>Endpoint</code> calls its <code>Controller</code> function.</li>
<li><code>Request</code> injected in the <code>Controller</code> automatically applies the request validation &amp; authorization rules.</li>
<li><code>Controller</code> calls an <code>Action</code> and pass each <code>Request</code> data to it.</li>
<li><code>Action</code> do the business logic, <em>OR can call as many <code>Tasks</code> as needed to do the reusable subsets of the business logic</em>.</li>
<li><code>Tasks</code> do a reusable subsets of the business logic (A <code>Task</code> can do a single portion of the main Action).</li>
<li><code>Action</code> prepares data to be returned to the <code>Controller</code>, <em>some data can be collected from the <code>Tasks</code></em>.</li>
<li><code>Controller</code> builds the response using a <code>View</code> (or <code>Transformer</code>) and send it back to the <strong>User</strong>.</li>
</ol>
<p><a id="Components-Details"></a></p>
<h3 id="13-main-components-definitions--principles">1.3) Main Components Definitions &amp; Principles</h3>
<blockquote>
<p>Click on the arrows below to read about each component.</p>
</blockquote>
<p><a id="Routes"></a></p>
<Details>
<Summary>Routes</Summary>
<br>
<p>Routes are the first receivers of the HTTP requests.</p>
<p>The Routes are responsible for mapping all the incoming HTTP requests to their controller&rsquo;s functions.</p>
<p>The Routes files contain Endpoints (URL patterns that identify the incoming request).</p>
<p>When an HTTP request hits your Application, the Endpoints match with the URL pattern and make the call to the corresponding Controller function.</p>
<h4 id="principles">Principles:</h4>
<ul>
<li>There are three types of Routes, API Routes, Web Routes and CLI Routes.</li>
<li>The API Routes files SHOULD be separated from the Web Routes files, each in its own folder.</li>
<li>The Web Routes folder will contain only the Web Endpoints, (accessible by Web browsers); And the API Routes folder will contain only the API Endpoints, (accessible by any consumer App).</li>
<li>Every Container SHOULD have its own Routes.</li>
<li>Every Route file SHOULD contain a single Endpoint.</li>
<li>The Endpoint job is to call a function on the corresponding Controller once a request of any type is made. (It SHOULD NOT do anything else).</li>
</ul>
<hr>
</Details>
<p><a id="Controllers"></a></p>
<Details>
<Summary>Controllers</Summary>
<br>
<p>Controllers are responsible for validating the request, serving the request data and building a response. <em>Validation and response, happens in separate classes, but triggered from the Controller</em>.</p>
<p>The Controllers concept is the same as in MVC <em>(They are the C in MVC)</em>, but with limited and predefined responsibilities.</p>
<h4 id="principles-1">Principles:</h4>
<ul>
<li>Controllers SHOULD NOT know anything about the business logic or about any business object.</li>
<li>A Controller SHOULD only do the following jobs:
<ol>
<li>Reading a Request data (user input)</li>
<li>Calling an Action (and passing request data to it)</li>
<li>Building a Response (usually build response based on the data collected from the Action call)</li>
</ol>
</li>
<li>Controllers SHOULD NOT have any form of business logic. (It SHOULD call an Action to perform the business logic).</li>
<li>Controllers SHOULD NOT call Container Tasks. They MAY only call Actions. (And then Actions can call Container Tasks).</li>
<li>Controllers CAN be called by Routes Endpoints only.</li>
<li>Every Container UI folder (Web, API, CLI) will have its own Controllers.</li>
</ul>
<p>You may wonder why we need the Controller! when we can directly call the Action from the Route. The Controller layer helps making the Action reusable in multiple UI&rsquo;s (Web &amp; API), since it doesn&rsquo;t build a response, and that reduces the amount of code duplication across different UI&rsquo;s.</p>
<p>Here&rsquo;s an example below:</p>
<ul>
<li>UI (Web): Route <code>W-R1</code> -&gt; Controller <code>W-C1</code> -&gt; Action <code>A1</code>.</li>
<li>UI (API): Route <code>A-R1</code> -&gt; Controller <code>A-C1</code> -&gt; Action <code>A1</code>.</li>
</ul>
<p>As you can see in the example above the Action <code>A1</code> was used by both routes <code>W-R1</code> and <code>A-R1</code>, with the help of the Controllers layer that lives in each UI.</p>
<hr>
</Details>
<p><a id="Requests"></a></p>
<Details>
<Summary>Requests</Summary>
<br>
<p>Requests mainly serve the user input in the application. And they are very useful to automatically apply the Validation and Authorization rules.</p>
<p>Requests are the best place to apply validations, since the validations rules will be related to every request.
Requests can also check the Authorization, e.g. check if this user has access to this controller function.
<em>(Example: check if a specific user owns a product before deleting it, or check if this user is an admin to edit something).</em></p>
<h4 id="principles-2">Principles:</h4>
<ul>
<li>A Request MAY hold the Validation / Authorization rules.</li>
<li>Requests SHOULD only be injected in Controllers. Once injected they automatically check if the request data matches the validation rules, and if the request input is not valid an Exception will be thrown.</li>
<li>Requests MAY also be used for authorization, they can check if the user is authorized to make a request.</li>
</ul>
<hr>
</Details>
<p><a id="Actions"></a></p>
<Details>
<Summary>Actions</Summary>
<br>
<p>Actions represent the Use Cases of the Application <em>(the actions that can be taken by a User or a Software in the Application)</em>.</p>
<p>Actions CAN hold business logic or/and they orchestrate the Tasks to perform the business logic.</p>
<p>Actions take data structures as inputs, manipulates them according to the business rules internally or through some Tasks, then output a new data structures.</p>
<p>Actions SHOULD NOT care how the Data is gathered, or how it will be represented.</p>
<p>By just looking at the Actions folder of a Container, you can determine what Use Cases (features) your Container provides.
And by looking at all the Actions you can tell what an Application can do.</p>
<h4 id="principles-3">Principles:</h4>
<ul>
<li>Every Action SHOULD be responsible for doing a single Use Case in the Application.</li>
<li>An Action MAY retrieves data from Tasks and pass data to another Task.</li>
<li>An Action MAY call multiple Tasks. (They can even call Tasks from other Containers as well!).</li>
<li>Actions MAY return data to the Controller.</li>
<li>Actions SHOULD NOT return a response. (The Controller&rsquo;s job is to return a response).</li>
<li>An Action SHOULD NOT call another Action (If you need to reuse a big chunk of business logic in multiple Actions, and this chunk is calling some Tasks, you can create a SubAction). See the SubAction section below.</li>
<li>Actions are mainly used from Controllers. However, they can be used from Events Listeners, Commands and/or other Classes. But they SHOULD NOT be used from Tasks.</li>
<li>Every Action SHOULD have only a single function named <code>run()</code>.</li>
<li>The Action main function <code>run()</code> can accept a Request Object in the parameter.</li>
<li>Actions are responsible of handling all expected Exceptions.</li>
</ul>
<hr>
</Details>
<p><a id="Tasks"></a></p>
<Details>
<Summary>Tasks</Summary>
<br>
<p>The Tasks are the classes that hold the shared business logic between multiple Actions accross different Containers.</p>
<p>Every Task is responsible for a small part of the logic.</p>
<p>Tasks are optional, but in most cases you find yourself in need for them.</p>
<p>Example: if you have Action 1 that needs to find a record by its ID from the DB, then fires an Event.
And you have an Action 2 that needs to find the same record by its ID, then makes a call to an external API.
Since both actions are performing the &ldquo;find a record by ID&rdquo; logic, we can take that business logic and put it in it&rsquo;s own class, that class is the Task. This Task is now reusable by both Actions and any other Action you might create in the future.</p>
<p>The rule is, whenever you see the possibility of reusing a piece of code from an Action, you should put that piece of code in a Task. Do not blindly create Tasks for everything, you can always start with writing all the business logic in an Action and only when you need to reuse it, create an a dedicated Task for it. (Refactoring is essential to adapt to the code growth).</p>
<h4 id="principles-4">Principles:</h4>
<ul>
<li>Every Task SHOULD have a single responsibility (job).</li>
<li>A Task MAY receive and return Data. (Task SHOULD NOT return a response, the Controller&rsquo;s job is to return a response).</li>
<li>A Task SHOULD NOT call another Task. Because that will takes us back to the Services Architecture and it&rsquo;s a big mess.</li>
<li>A Task SHOULD NOT call an Action. Because your code wouldn&rsquo;t make any logical sense then!</li>
<li>Tasks SHOULD only be called from Actions. (They could be called from Actions of other Containers as well!).</li>
<li>Tasks usually have a single function <code>run()</code>. However, they can have more functions with explicit names if needed. <em>Making the Task class replace the ugly concept of function flags.</em> Example: the <code>FindUserTask</code> can have 2 functions <code>byId</code> and <code>byEmail</code>, <strong>all internal functions MUST call the <code>run</code> function</strong>. In this example the <code>run</code> can be called at the end of both funtions, after appending Criteria to the repository.</li>
<li>A Task SHOULD NOT be called from Controller. Because this leads to non-documented features in your code. It&rsquo;s totally fine to have a lot of Actions &ldquo;example: <code>FindUserByIdAction</code> and <code>FindUserByEmailAction</code> where both Actions are calling the same Task&rdquo; as well as it&rsquo;s totally fine to have single Action <code>FindUserAction</code> making a decision to which Task it should call.</li>
<li>A Task SHOULD NOT accept a Request object in any of its functions. It can take anything in its funtions parameters but never a Request object. This will keep free to use from anwyhere, and can be tested independently.</li>
</ul>
<hr>
</Details>
<p><a id="Models"></a></p>
<Details>
<Summary>Models</Summary>
<br>
<p>The Models provide an abstraction for the data, they represent the data in the database. <em>(They are the M in MVC)</em>.</p>
<p>Models are responsible for how the data should be handled. They make sure that data arrives properly into the backend store (e.g. Database).</p>
<h4 id="principles-5">Principles:</h4>
<ul>
<li>A Model SHOULD NOT hold business logic, it can only hold the code and data that represents itself. <em>(it&rsquo;s relationships with other models, hidden fields, table name, fillable attributes,&hellip;)</em></li>
<li>A single Container MAY contain multiple Models.</li>
<li>A Model MAY define the Relations between itself and any other Models (in case a relation exist).</li>
</ul>
<hr>
</Details>
<p><a id="Views"></a></p>
<Details>
<Summary>Views</Summary>
<br>
<p>Views contain the HTML served by your application.</p>
<p>Their main goal is to separate the application logic from the presentation logic. <em>(They are the V in MVC)</em>.</p>
<h4 id="principles-6">Principles:</h4>
<ul>
<li>Views can only be used from the Web Controllers.</li>
<li>Views SHOULD be separated into multiple files and folders based on what they display.</li>
<li>A single Container MAY contain multiple Views files.</li>
</ul>
<hr>
</Details>
<p><a id="Transformers"></a></p>
<Details>
<Summary>Transformers</Summary>
<br>
<p>Transformers (are the short name for Responses Transformers).</p>
<p>They are equivalent to Views but for JSON Responses. While Views takes data and represent it in HTML, Transformers takes data and represent it in JSON.</p>
<p>Transformers are classes responsible for transforming Models into Arrays.</p>
<p>Transformers takes a Model or a group of Models &ldquo;Collection&rdquo; and converts it to a formatted serializable Array.</p>
<h4 id="principles-7">Principles:</h4>
<ul>
<li>All API responses MUST be formatted via Transformers.</li>
<li>Every Model (that gets returned by an API call) SHOULD have a Transformer.</li>
<li>A single Container MAY have multiple Transformers.</li>
<li>Usually every Model would have a Transformer.</li>
</ul>
<hr>
</Details>
<p><a id="Exceptions"></a></p>
<Details>
<Summary>Exceptions</Summary>
<br>
<p>Exceptions are also a form of output that should be expected (like an API exception) and well defined.</p>
<h4 id="principles-8">Principles:</h4>
<ul>
<li>There are container Exceptions (live in Containers) and general Exceptions (live in Ship).</li>
<li>Tasks, Sub-Tasks, Models and any class in general can throw a very specific Exception.</li>
<li>The caller MUST handle all expected Exceptions from the called class.</li>
<li>Actions MUST handle all Exceptions, and making sure they don&rsquo;t leak to upper Components, and cause unexpected behaviors.</li>
<li>Exceptions names SHOULD be as specific as possible and they SHOULD have a clear descriptive messages.</li>
</ul>
<hr>
</Details>
<p><a id="Sub-Actions"></a></p>
<Details>
<Summary>Sub-Actions</Summary>
<br>
<p>SubActions are designed to eliminate code duplication in Actions. Don&rsquo;t get confused! SubActions do not replace Tasks.</p>
<p>While Tasks allows Actions to share a piece of functionality. SubActions allows Actions to share a sequence of Tasks.</p>
<p>The SubActions are created to solve a problem. The problem is:
Sometimes you need to reuse a big chunk of business logic in multiple Actions. That chunk of code is already calling some Tasks. <em>(Remember a Task SHOULD NOT call other Tasks)</em> so how shall you reuse that chunk of code without creating a Task! The solution is create a SubAction.</p>
<p>Detailed Example: assuming an Action <code>A1</code> is calling Task1, Task2 and Task3. And another Action <code>A2</code> is calling Task2, Task3, Task4 and Task5. Notice both Actions are calling Tasks 2 and 3. To eliminate code duplication we can create a SubAction that contains all the common code between both Actions.</p>
<h4 id="principles-9">Principles:</h4>
<ul>
<li>Sub-Actions MUST call Tasks. If a Sub-Actions is doing all the business logic, without the help of at least 1 Tasks, it probably shouldn&rsquo;t be a Sub-Action but a Task instead.</li>
<li>A Sub-Action MAY retrieves data from Tasks and pass data to another Task.</li>
<li>A Sub-Action MAY call multiple Tasks. (They can even call Tasks from other Containers as well!).</li>
<li>Sub-Actions MAY return data to the Action.</li>
<li>Sub-Action SHOULD NOT return a response. (the Controller job is to return a response).</li>
<li>Sub-Action SHOULD NOT call another Sub-Action. (try to avoid that as much as possible).</li>
<li>Sub-Action SHOULD be used from Actions. However, they can be used from Events, Commands and/or other Classes. But they SHOULD NOT be used from Controllers or Tasks.</li>
<li>Every Sub-Action SHOULD have only a single function named <code>run()</code>.</li>
</ul>
<hr>
</Details>
<br>
<p><a id="Optional-Components"></a></p>
<h2 id="2-optional-components">2) Optional Components</h2>
<p>You can add these Components when you need them, based on your App needs, however some of them are highly recommended:</p>
<p>Tests - Events - Listeners - Commands - Migrations - Seeders - Factories - Middlewares - Repositories - Criteria - Policies - Service Providers - Contracts - Traits - Jobs - Values - Transporters - Mails - Notifications&hellip;</p>
<br>
<p><a id="Typical-Container-Structure"></a></p>
<h2 id="typical-container-structure">Typical Container Structure</h2>
<blockquote>
<p>A Container with a list of Main and Optional Components.</p>
</blockquote>
<pre tabindex="0"><code>Container
	├── Actions
	├── Tasks
	├── Models
	├── Values
	├── Events
	├── Listeners
	├── Policies
	├── Exceptions
	├── Contracts
	├── Traits
	├── Jobs
	├── Notifications
	├── Providers
	├── Configs
	├── Mails
	│   ├── Templates	
	├── Data
	│   ├── Migrations
	│   ├── Seeders
	│   ├── Factories
	│   ├── Criteria
	│   ├── Repositories
	│   ├── Validators
	│   ├── Transporters
	│   └── Rules
	├── Tests
	│   ├── Unit
	│   └── Traits
	└── UI
	    ├── API
	    │   ├── Routes
	    │   ├── Controllers
	    │   ├── Requests
	    │   ├── Transformers
	    │   └── Tests
	    │       └── Functional
	    ├── WEB
	    │   ├── Routes
	    │   ├── Controllers
	    │   ├── Requests
	    │   ├── Views
	    │   └── Tests
	    │       └── Acceptance
	    └── CLI
	        ├── Routes
	        ├── Commands
	        └── Tests
	            └── Functional
</code></pre><p><a id="Quality-Attributes"></a></p>
<h2 id="porto-quality-attributes">Porto Quality Attributes</h2>
<blockquote>
<p>The benefits of using Porto.</p>
</blockquote>
<Details>
<Summary>Modularity & Reusability</Summary>
<br>
<p>In Porto, your application business logic lives in Containers. Porto Containers are similar in nature to the Modules <em>(from the Modular architecture)</em> and Domains <em>(from the DDD architecture)</em>.</p>
<p>Containers can depend on other Containers, similar to how a layer can depend on other layers in a layered architecture.</p>
<p>Porto&rsquo;s rules and guidelines minimizes and defines the dependecies directions between Containers, to avoid circular references between them.</p>
<p>And it allows the grouping of related Containers into sections, in order to reuse them together in different projects. <em>(each Section contains a reusable portion of your application business logic).</em></p>
<p>In terms of dependency management, the developer is free to move each Container to its own repository or keep all Containers together under single repository.</p>
<hr>
</Details>
<Details>
<Summary>Maintainability & Scalability</Summary>
<br>
<p>Porto aim to reduce maintance cost by saving developers time.
It&rsquo;s structured in a way to insure code decoupling, and forces consistency which all contribute to its maintainability.</p>
<p>Having a single function per class to describe a functionality, makes adding and removing features an easy process.</p>
<p>Porto has a very organized code base and a zero code decoupling. In addition to clear development workflow with predefined data flow and dependencies directions. That all contributes to its scalability.</p>
<hr>
</Details>
<Details>
<Summary>Testability & Debuggability</Summary>
<br>
<p>Extremely adhering to the single responsibility principle by having single function per class, results in having super slim classes, which leads to easier testability.</p>
<p>In Porto each component expect the same type of input and output, which makes testing, mocking and stabbing very simple.</p>
<p>The Porto structure itself makes writing automated tests a smooth process. As it has a <code>tests</code> folder at the root of each Container for contaning the unit tests of your Tasks.
And a <code>tests</code> folder in each UI folder for contaning the functional tests (for testing each UI&rsquo;s separately).</p>
<p>The secret of making the testing and debugging easy, is not only in the organization of the tests and pre defined responsiblity of the components but also in the decoupling of your code.</p>
<hr>
</Details>
<Details>
<Summary>Adaptability & Evolvability</Summary>
<br>
<p>With Porto you can easily accommodate future changes with the least amount of efforts.</p>
<p>Let&rsquo;s assume you have a web app that serves HTML and recently you decided that you need to have a Mobile app, hence you need an API.</p>
<p>Porto has pluggable UI&rsquo;s (WEB, API &amp; CLI) and this allows writting the business logic of your application first, then implementing a UI to interact with your code.</p>
<p>This gives the flexibility to adding interfaces whenever needed and adapting to future changes, with the least effort possible.</p>
<p>it is all possible because the Actions are the central organizing principle &ldquo;not the controller&rdquo; which are shared across multiple UI&rsquo;s.
And the UI&rsquo;s are separated from the application business logic and separated from each others within each Container.</p>
<hr>
</Details>
<Details>
<Summary>Usability & Learnability</Summary>
<br>
<p>Porto makes it super easy to locate any feature/functionality. And to understand what&rsquo;s happening inside it.</p>
<p>That due to the usage of the domain expert language when naming the classes &ldquo;components&rdquo;. As well as the single function per class golden rule. Which allows you to find any Use Case (<code>Action</code>) in your code by just browsing the files.</p>
<p>Porto promises that you can find any feature implementation in less than 3 seconds! (example: if you are looking for where the user address is being validated - just go to the Address Container, open the list of Actions and search for ValidateUserAddressAction).</p>
<hr>
</Details>
<Details>
<Summary>Extensibility & Flexibility</Summary>
<br>
<p>Porto&rsquo;s takes future growth into consideration and it ensures your code remains maintainable no matter what the project size becomes.</p>
<p>It achieves this by its modular structure, separation of concerns and the organized coupling between the internal classes &ldquo;Components&rdquo;.</p>
<p>This allows modifications to be made without undesirable side effects.</p>
<hr>
</Details>
<Details>
<Summary>Agility & Upgradability</Summary>
<br>
<p>Porto gives the ability to move quickly and easily.</p>
<p>It&rsquo;s easy to make framework upgrades due to the complete separation between the App and the framework code through the Ship layer.</p>
<hr>
</Details>
<br>
<p><a id="Implementations-Projects"></a></p>
<h1 id="implementations">Implementations</h1>
<blockquote>
<p>Feel free to list your implementation here.</p>
</blockquote>
<p>List of projects implementing the Porto architecture.</p>
<ul>
<li><strong>PHP</strong>
<ul>
<li><strong>Laravel</strong>
<ul>
<li><a href="http://apiato.io/"><strong>Apiato</strong></a> <strong>(By the Porto creator)</strong> A PHP Framework for building scalable API&rsquo;s on top of Laravel.</li>
<li><a href="https://github.com/stasyanko/laravel-large-project"><strong>Laravel Large Project</strong></a> An example project to show how to build large projects with Porto.</li>
</ul>
</li>
<li><strong>Zend Expressive</strong>
<ul>
<li><a href="https://github.com/lpj145/expressive-porto"><strong>Expressive Porto</strong></a> An implementation of the Porto architecture with Zend Expressive.</li>
</ul>
</li>
</ul>
</li>
<li><strong>JavaScript</strong></li>
<li><strong>Python</strong>
<ul>
<li><strong>Django</strong>
<ul>
<li><a href="https://github.com/discoroveryx/pyporto"><strong>PyPorto</strong></a> A design for building scalable and testable applications with Django Rest Framework.</li>
</ul>
</li>
</ul>
</li>
<li><strong>Ruby</strong></li>
<li><strong>Java</strong></li>
<li><strong>C#</strong></li>
<li>&hellip;</li>
</ul>
<p><a id="Feedback"></a></p>
<h1 id="get-in-touch">Get in Touch</h1>
<blockquote>
<p>Your feedback is important.</p>
</blockquote>
<p>For feedbacks, questions, or suggestions? We are on <a href="https://slackin-mezlsumyvc.now.sh/"><strong>Slack</strong></a>.</p>
<p><a href="https://slackin-mezlsumyvc.now.sh/"><img loading="lazy" src="https://s19.postimg.cc/h7pvzy9ar/Slack-i_OS-icon.png" alt=""  />
</a></p>
<p><a id="Author"></a></p>
<h2 id="author">Author</h2>
<table>
  <tbody>
     <tr>
        <td align="center" valign="top">
            <img width="125" height="125" src="https://github.com/mahmoudz.png?s=150">
            <br>
            <strong>Mahmoud Zalt</strong>
            <br>
            Twitter: <a href="https://github.com/Mahmoudz">@mahmoudz</a>
            <br>
            Site: <a href="http://zalt.me">zalt.me</a>
        </td>
     </tr>
  </tbody>
</table>
<p><a id="Donations"></a></p>
<h2 id="donations">Donations</h2>
<p>Become a <a href="https://github.com/sponsors/Mahmoudz">Github Sponsor</a>.
<br>
Direct donation via <a href="https://paypal.me/mzmmzz">Paypal</a>.
<br>
Become a <a href="https://www.patreon.com/zalt">Patreon</a>.</p>
<p><a name="License"></a></p>
<h2 id="license">License</h2>
<p><a href="https://opensource.org/licenses/MIT">MIT</a> © Mahmoud Zalt</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>ApidocJs apigroup Support Chinese</title>
      <link>https://w.toomore.us/posts/dev/apidocjs-apigroup-support-chinese/</link>
      <pubDate>Thu, 16 Feb 2023 13:39:23 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/apidocjs-apigroup-support-chinese/</guid>
      <description>如题 apidoc 的 @apiGroup 值如果是中文的时候没办法进行分组。官方仓库提了好多这样的 issue，貌似韩文也不支持。
有人提了 pr，但是被拒绝了，不知道为什么。
可以临时根据这个 pr 修改文件来支持中文分组，node_modules/apidoc/lib/core/workers/api_group.js 文件中的：
group = group.replace(/^[^a-z]+|[^\w:.-]+/gi, &amp;#39;&amp;#39;); 替换为：
group = encodeURI(group).replace(/^[^a-z]+|[^\w:.-]+/gi, &amp;#39;&amp;#39;); 这样如果线上部署生成的话就不太方便了，可以在生成文档的脚本文件中添加一行替换的代码，在生成文档前强行替换：
sed -i &amp;#39;s/group = group.replace/group = encodeURI\(group\).replace/&amp;#39; node_modules/apidoc/lib/core/workers/api_group.js </description>
      <content:encoded><![CDATA[<p>如题 <a href="https://apidocjs.com/">apidoc</a> 的 <code>@apiGroup</code> 值如果是中文的时候没办法进行分组。官方仓库提了好多这样的 <a href="https://github.com/apidoc/apidoc/search?q=apigroup+chinese&amp;type=issues">issue</a>，貌似韩文也不支持。</p>
<p>有人提了 <a href="https://github.com/apidoc/apidoc/pull/1242">pr</a>，但是被拒绝了，不知道为什么。</p>
<p>可以临时根据这个 pr 修改文件来支持中文分组，<code>node_modules/apidoc/lib/core/workers/api_group.js</code> 文件中的：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-JavaScript" data-lang="JavaScript"><span style="display:flex;"><span><span style="color:#a6e22e">group</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">group</span>.<span style="color:#a6e22e">replace</span>(<span style="color:#e6db74">/^[^a-z]+|[^\w:.-]+/gi</span>, <span style="color:#e6db74">&#39;&#39;</span>);
</span></span></code></pre></div><p>替换为：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-JavaScript" data-lang="JavaScript"><span style="display:flex;"><span><span style="color:#a6e22e">group</span> <span style="color:#f92672">=</span> encodeURI(<span style="color:#a6e22e">group</span>).<span style="color:#a6e22e">replace</span>(<span style="color:#e6db74">/^[^a-z]+|[^\w:.-]+/gi</span>, <span style="color:#e6db74">&#39;&#39;</span>);
</span></span></code></pre></div><p>这样如果线上部署生成的话就不太方便了，可以在生成文档的脚本文件中添加一行替换的代码，在生成文档前强行替换：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sed -i <span style="color:#e6db74">&#39;s/group = group.replace/group = encodeURI\(group\).replace/&#39;</span> node_modules/apidoc/lib/core/workers/api_group.js
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>int(10)里面的10是什么意思?</title>
      <link>https://w.toomore.us/posts/dev/int10%E9%87%8C%E9%9D%A2%E7%9A%8410%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D/</link>
      <pubDate>Fri, 24 Jun 2022 12:46:57 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/int10%E9%87%8C%E9%9D%A2%E7%9A%8410%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D/</guid>
      <description>crud 惯了，从来没深入研究过这些（一直以为是能存储的字节数）。
查了一下官方文档：Numeric Type Attributes。
MySQL supports an extension for optionally specifying the display width of integer data types in parentheses following the base keyword for the type. For example, INT(4) specifies an INT with a display width of four digits. This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets.</description>
      <content:encoded><![CDATA[<p>crud 惯了，从来没深入研究过这些（一直以为是能存储的字节数）。</p>
<p>查了一下官方文档：<a href="https://dev.mysql.com/doc/refman/8.0/en/numeric-type-attributes.html">Numeric Type Attributes</a>。</p>
<p>MySQL supports an extension for optionally specifying the display width of integer data types in parentheses following the base keyword for the type. For example, INT(4) specifies an INT with a display width of four digits. This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets. Whether it is used is up to the application.)</p>
<p>MySQL 有一个支持在字段类型关键字后边的 <code>()</code> 里指定 <code>integer</code> 数据类型的显示宽度的扩展。例如 <code>INT(4)</code> 指定一个显示宽度为4位数的整数。这个选项一般用在当字段值的宽度小于字段指定的宽度时，用空格对值进行左填充。（也就是说，此宽度存在于随结果集返回的元数据中。是否使用取决于应用程序。）</p>
<p>The display width does not constrain the range of values that can be stored in the column. Nor does it prevent values wider than the column display width from being displayed correctly. For example, a column specified as SMALLINT(3) has the usual SMALLINT range of -32768 to 32767, and values outside the range permitted by three digits are displayed in full using more than three digits.</p>
<p>显示宽度既不限制该字段可以存储的值的范围，也不会阻止比显示宽度宽的值的正确显示。例如一个字段指定为 <code>SMALLINT(3)</code>，通常 <code>SMALLINT</code> 的范围为 -32768 到 32767，超出三位数宽度的值将会以三位数以上的数字全部显示。</p>
<p>When used in conjunction with the optional (nonstandard) ZEROFILL attribute, the default padding of spaces is replaced with zeros. For example, for a column declared as INT(4) ZEROFILL, a value of 5 is retrieved as 0005.</p>
<p>当与可选属性 <code>ZEROFILL</code> 一起使用时，默认的空格填充将替换为用 <code>0</code> 填充。例如一个字段声明为 <code>INT(4) ZEROFILL</code>，那么值 <code>5</code> 将被检索为 <code>0005</code>。</p>
<blockquote>
<p><strong>NOTE</strong></p>
<p>The ZEROFILL attribute is ignored for columns involved in expressions or UNION queries.</p>
<p>If you store values larger than the display width in an integer column that has the ZEROFILL attribute, you may experience problems when MySQL generates temporary tables for some complicated joins. In these cases, MySQL assumes that the data values fit within the column display width.</p>
</blockquote>
<blockquote>
<p><strong>注意</strong></p>
<p><code>ZEROFILL</code> 属性在表达式和联合查询中会被忽略。</p>
<p>如果你在一个设置了 <code>ZEROFILL</code> 属性的整数字段中，存储的值大于显示宽度，你可能会在一些复杂的联合查询中生成临时表是碰到问题。在这些情况下，MySQL 假设数据值适合字段的显示宽度。</p>
</blockquote>
<p>Excuse me 🤔️?  那这有啥用？</p>
<p>As of MySQL 8.0.17, the ZEROFILL attribute is deprecated for numeric data types, as is the display width attribute for integer data types. You should expect support for ZEROFILL and display widths for integer data types to be removed in a future version of MySQL. Consider using an alternative means of producing the effect of these attributes. For example, applications can use the LPAD() function to zero-pad numbers up to the desired width, or they can store the formatted numbers in CHAR columns.</p>
<p>从 <code>MySQL 8.0.17</code> 开始，数字数据类型不推荐使用 <code>ZEROFILL</code> 属性，整数数据类型也不推荐使用 <code>display width</code> 属性。你应该预料到在 MySQL 的未来版本中会删除对整数数据类型的 <code>ZEROFILL</code>和 <code>display width</code> 的支持，考虑用其他方法来实现这些属性的功能。例如用 <code>LPAD()</code> 函数将数字填充为指定宽度，或者将格式化后的数字存储在 <code>CHAR</code> 类型的字段中。</p>
<p>弃用了我就放心了。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>5-3 会话</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%94%E7%AB%A0%E8%BF%9B%E7%A8%8B%E5%85%B3%E7%B3%BB%E4%B8%8E%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B/5-3-%E4%BC%9A%E8%AF%9D/</link>
      <pubDate>Fri, 10 Jun 2022 21:37:27 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%94%E7%AB%A0%E8%BF%9B%E7%A8%8B%E5%85%B3%E7%B3%BB%E4%B8%8E%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B/5-3-%E4%BC%9A%E8%AF%9D/</guid>
      <description>会话 会话是一个进程组，或是多个进程组的集合。
一个会话可以至少有一个控制终端（物理终端，伪终端） 一个会话至少有一个前台进程组（前台就是指能输入的 bin/bash ），其它就是后台进程组 一个会话如果连接了一个控制终端，就叫控制进程 因为这个会话首进程 /bin/bash 是连接控制终端（伪终端设置驱动程序+tcp/ip 对端的ssh client） 的，所以创建的子进程，也会继承 bin/bash 的控制终端（0,1,2标准输出，标准输入，标准错误）
在终端的输入会影响前台进程组，ctrl+c （会终止前台进程）。
会话的创建 使用 posix_setsid() / setsid(2)创建。
不能使用组长进程调用 setsid 函数，硬要调用会报错 一般先创建一个子进程，让父进程exit，由子进程调用 setsid 调用 setsid 之后，该进程会变成组长进程，同时也会变成会话首进程 同时该进程没有控制终端（没有终端了，可以认为它没有连接显示器，没有连接键盘） 它没有控制终端了，你在终端里输入任何数据都没有反应的 phpdemo19.php
&amp;lt;?php function showPid() { $pid = posix_getpid(); fprintf(STDOUT, &amp;#34;pid=%d,ppid=%d,pgid=%d,sid=%d\n&amp;#34;,$pid,posix_getppid(),posix_getpgid($pid),posix_getsid($pid)); } showPid(); $pid = pcntl_fork(); if ($pid &amp;gt; 0) { exit(0); } if (-1 == posix_setsid()) { echo &amp;#39;error&amp;#39;.PHP_EOL; $erro_no = pcntl_errno(); echo pcntl_strerror($erro_no).PHP_EOL; } else { echo &amp;#39;会话创建成功&amp;#39;.</description>
      <content:encoded><![CDATA[<h2 id="会话">会话</h2>
<p><a href="https://zh.wikipedia.org/zh-cn/%E4%BC%9A%E8%AF%9D_(%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6)">会话</a>是一个进程组，或是多个进程组的集合。</p>
<ol>
<li>一个会话可以至少有一个控制终端（物理终端，伪终端）</li>
<li>一个会话至少有一个前台进程组（前台就是指能输入的 bin/bash ），其它就是后台进程组</li>
<li>一个会话如果连接了一个控制终端，就叫控制进程</li>
</ol>
<p>因为这个会话首进程 <code>/bin/bash</code> 是连接控制终端（<code>伪终端设置驱动程序+tcp/ip 对端的ssh client</code>） 的，所以创建的子进程，也会继承 <code>bin/bash</code> 的控制终端（<code>0,1,2标准输出，标准输入，标准错误</code>）</p>
<p>在终端的输入会影响前台进程组，ctrl+c （会终止前台进程）。</p>
<h2 id="会话的创建">会话的创建</h2>
<p>使用 <a href="https://www.php.net/manual/zh/function.posix-setsid">posix_setsid()</a> / <a href="https://man7.org/linux/man-pages/man2/setsid.2.html">setsid(2)</a>创建。</p>
<ol>
<li>不能使用组长进程调用 setsid 函数，硬要调用会报错</li>
<li>一般先创建一个子进程，让父进程exit，由子进程调用 setsid</li>
<li>调用 setsid 之后，该进程会变成组长进程，同时也会变成会话首进程</li>
<li>同时该进程没有控制终端（没有终端了，可以认为它没有连接显示器，没有连接键盘）
它没有控制终端了，你在终端里输入任何数据都没有反应的</li>
</ol>
<p>phpdemo19.php</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>    <span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">showPid</span>()
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_getpid</span>();
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid=%d,ppid=%d,pgid=%d,sid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,$pid,<span style="color:#a6e22e">posix_getppid</span>(),<span style="color:#a6e22e">posix_getpgid</span>($pid),<span style="color:#a6e22e">posix_getsid</span>($pid));
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">showPid</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">exit</span>(<span style="color:#ae81ff">0</span>);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span> <span style="color:#f92672">==</span> <span style="color:#a6e22e">posix_setsid</span>()) {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">echo</span> <span style="color:#e6db74">&#39;error&#39;</span><span style="color:#f92672">.</span><span style="color:#a6e22e">PHP_EOL</span>;
</span></span><span style="display:flex;"><span>        $erro_no <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_errno</span>();
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">echo</span> <span style="color:#a6e22e">pcntl_strerror</span>($erro_no)<span style="color:#f92672">.</span><span style="color:#a6e22e">PHP_EOL</span>;
</span></span><span style="display:flex;"><span>    } <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">echo</span> <span style="color:#e6db74">&#39;会话创建成功&#39;</span><span style="color:#f92672">.</span><span style="color:#a6e22e">PHP_EOL</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">showPid</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>) {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">2</span>);
</span></span><span style="display:flex;"><span>    }
</span></span></code></pre></div><p>执行结果，注意观察 pgid,sid 变化</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ php demo19.php 
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>976,ppid<span style="color:#f92672">=</span>28,pgid<span style="color:#f92672">=</span>976,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">28</span>
</span></span><span style="display:flex;"><span>会话创建成功
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>977,ppid<span style="color:#f92672">=</span>976,pgid<span style="color:#f92672">=</span>977,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">977</span>
</span></span></code></pre></div><p>查看进程信息</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>ps aux
</span></span><span style="display:flex;"><span>USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
</span></span><span style="display:flex;"><span><span style="color:#75715e">## 变成了没有控制终端的进程</span>
</span></span><span style="display:flex;"><span>laradock     <span style="color:#ae81ff">977</span>  0.0  0.1 <span style="color:#ae81ff">102524</span> <span style="color:#ae81ff">11020</span> ?        Ss   03:04   0:00 php demo19.php
</span></span></code></pre></div><p><img loading="lazy" src="../images/5-3-%E4%BC%9A%E8%AF%9D/87cb5ea5205f283f2b84dcc5f5a98f8fb8b4e4e0e5073b564eab2a9e8704aa9b.png" alt="会话创建过程"  />
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>5-2 进程组</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%94%E7%AB%A0%E8%BF%9B%E7%A8%8B%E5%85%B3%E7%B3%BB%E4%B8%8E%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B/5-2-%E8%BF%9B%E7%A8%8B%E7%BB%84/</link>
      <pubDate>Sun, 08 May 2022 12:31:27 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%94%E7%AB%A0%E8%BF%9B%E7%A8%8B%E5%85%B3%E7%B3%BB%E4%B8%8E%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B/5-2-%E8%BF%9B%E7%A8%8B%E7%BB%84/</guid>
      <description>进程组，就是一个或是多个进程的集合，每一个进程都有个标识「组ID（PGID）」，表示该进程属于哪个进程组。
bash 进程启动之后，它会自己 setsid 把自己设置为会话首进程，也会设置自己为组长进程。 进程：正在执行的程序，这个程序是在 bin/bash 进程里启动的。
进程启动之后（通过 execve 函数启动），它会继承一些属性比如说组ID,会话ID，同时也会继承父进程已经打开的文件描述符（伪终端里的）：0/标准输入,1/标准输出,2/标准错误，通过 pts、ptmx 模拟出来的。
demo17.php
$pid = posix_getpid(); fprintf(STDOUT, &amp;#34;pid=%d,ppid=%d,pgid=%d,sid=%d\n&amp;#34;,$pid,posix_getppid(),posix_getpgid($pid),posix_getsid($pid)); 查看当前 bash 进程 PID
$ echo $$ 1031235 另外一个 SSH 连接，追踪上一个 bash 进程
$ strace -f -s 65500 -o demo17.log -p 1031235 在 bash 进程 1031235 中，执行代码
$ php demo17.php pid=1032568,ppid=1031235,pgid=1032568,sid=1031235 demo17.log
# bash 进程 clone 一个子进程 1032568 1031235 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f2c4847ba10) = 1032568 1032568 getpid() = 1032568 ... # 子进程将自己设置为组长进程 1031235 setpgid(1032568, 1032568) = 0 .</description>
      <content:encoded><![CDATA[<p><a href="https://baike.baidu.com/item/%E8%BF%9B%E7%A8%8B%E7%BB%84/1910809">进程组</a>，就是一个或是多个进程的集合，每一个进程都有个标识「组ID（PGID）」，表示该进程属于哪个进程组。</p>
<h3 id="bash-进程启动之后它会自己-setsid-把自己设置为会话首进程也会设置自己为组长进程">bash 进程启动之后，它会自己 setsid 把自己设置为会话首进程，也会设置自己为组长进程。</h3>
<p>进程：正在执行的程序，这个程序是在 <code>bin/bash</code> 进程里启动的。</p>
<p>进程启动之后（通过 <a href="https://man7.org/linux/man-pages/man2/execve.2.html">execve</a> 函数启动），它会继承一些属性比如说组ID,会话ID，同时也会继承父进程已经打开的文件描述符（伪终端里的）：0/标准输入,1/标准输出,2/标准错误，通过 pts、ptmx 模拟出来的。</p>
<p>demo17.php</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_getpid</span>();
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid=%d,ppid=%d,pgid=%d,sid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,$pid,<span style="color:#a6e22e">posix_getppid</span>(),<span style="color:#a6e22e">posix_getpgid</span>($pid),<span style="color:#a6e22e">posix_getsid</span>($pid));
</span></span></code></pre></div><p>查看当前 bash 进程 PID</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ echo $$
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">1031235</span>
</span></span></code></pre></div><p>另外一个 SSH 连接，追踪上一个 bash 进程</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ strace -f -s <span style="color:#ae81ff">65500</span> -o demo17.log -p <span style="color:#ae81ff">1031235</span>
</span></span></code></pre></div><p>在 bash 进程 1031235 中，执行代码</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ php demo17.php 
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>1032568,ppid<span style="color:#f92672">=</span>1031235,pgid<span style="color:#f92672">=</span>1032568,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">1031235</span>
</span></span></code></pre></div><p>demo17.log</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e"># bash 进程 clone 一个子进程 1032568</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">1031235</span> clone<span style="color:#f92672">(</span>child_stack<span style="color:#f92672">=</span>NULL, flags<span style="color:#f92672">=</span>CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr<span style="color:#f92672">=</span>0x7f2c4847ba10<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">1032568</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">1032568</span> getpid<span style="color:#f92672">()</span>                        <span style="color:#f92672">=</span> <span style="color:#ae81ff">1032568</span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 子进程将自己设置为组长进程</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">1031235</span> setpgid<span style="color:#f92672">(</span>1032568, 1032568<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 子进程执行 `demo17.php`</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">1032568</span> execve<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;/usr/bin/php&#34;</span>, <span style="color:#f92672">[</span><span style="color:#e6db74">&#34;php&#34;</span>, <span style="color:#e6db74">&#34;-c&#34;</span>, <span style="color:#e6db74">&#34;/www/server/php/80/etc/php-cli.ini&#34;</span>, <span style="color:#e6db74">&#34;demo17.php&#34;</span><span style="color:#f92672">]</span>, 0x5558eda12830 /* <span style="color:#ae81ff">32</span> vars */<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span></code></pre></div><p>孤儿进程：指父进程先结束，但是子进程晚结束，这个时候子进程就是孤儿进程，它会被1号进程接管。</p>
<h3 id="子进程继承父进程的组idgpid会话idsid">子进程继承父进程的组id（gpid）、会话id（sid）</h3>
<p>demo18.php</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>    <span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">showPid</span>()
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_getpid</span>();
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid=%d,ppid=%d,pgid=%d,sid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,$pid,<span style="color:#a6e22e">posix_getppid</span>(),<span style="color:#a6e22e">posix_getpgid</span>($pid),<span style="color:#a6e22e">posix_getsid</span>($pid));
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">showPid</span>(); <span style="color:#75715e">// ppid 和下边两个子进程是不一样的
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>(); <span style="color:#75715e">// 该子进程的 ppid、pgid、sid是一样的
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    $pidMap <span style="color:#f92672">=</span> [];
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>        $pidMap[$pid] <span style="color:#f92672">=</span> $pid;
</span></span><span style="display:flex;"><span>        $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>(); <span style="color:#75715e">// 该子进程的 ppid、pgid、sid是一样的
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>            $pidMap[$pid] <span style="color:#f92672">=</span> $pid;
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">showPid</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>        $i <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>) {
</span></span><span style="display:flex;"><span>            $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_waitpid</span>(<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>, $status);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">echo</span> <span style="color:#e6db74">&#34;子进程 </span><span style="color:#e6db74">$pid</span><span style="color:#e6db74"> 结束了</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>;
</span></span><span style="display:flex;"><span>                $i<span style="color:#f92672">++</span>;
</span></span><span style="display:flex;"><span>            }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">unset</span>($pidMap[$pid]);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> (<span style="color:#66d9ef">empty</span>($pidMap)) {
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">break</span>;
</span></span><span style="display:flex;"><span>            }
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    }
</span></span></code></pre></div><p>运行结果：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ php demo18.php
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>678,ppid<span style="color:#f92672">=</span>28,pgid<span style="color:#f92672">=</span>678,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">28</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>679,ppid<span style="color:#f92672">=</span>678,pgid<span style="color:#f92672">=</span>678,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">28</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>678,ppid<span style="color:#f92672">=</span>28,pgid<span style="color:#f92672">=</span>678,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">28</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>680,ppid<span style="color:#f92672">=</span>678,pgid<span style="color:#f92672">=</span>678,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">28</span>
</span></span><span style="display:flex;"><span>子进程 <span style="color:#ae81ff">679</span> 结束了
</span></span><span style="display:flex;"><span>子进程 <span style="color:#ae81ff">680</span> 结束了
</span></span></code></pre></div><h3 id="设置子进程组id">设置子进程组id</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>    <span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">showPid</span>()
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_getpid</span>();
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid=%d,ppid=%d,pgid=%d,sid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,$pid,<span style="color:#a6e22e">posix_getppid</span>(),<span style="color:#a6e22e">posix_getpgid</span>($pid),<span style="color:#a6e22e">posix_getsid</span>($pid));
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">showPid</span>(); <span style="color:#75715e">// ppid 和下边两个子进程是不一样的
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>(); <span style="color:#75715e">// 该子进程的 ppid、pgid、sid是一样的
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    $pidMap <span style="color:#f92672">=</span> [];
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>        $pidMap[$pid] <span style="color:#f92672">=</span> $pid;
</span></span><span style="display:flex;"><span>        $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>(); <span style="color:#75715e">// 该子进程的 ppid、pgid、sid是一样的
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>            $pidMap[$pid] <span style="color:#f92672">=</span> $pid;
</span></span><span style="display:flex;"><span>        } <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">// 设置子进程组id
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_getpid</span>();
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">posix_setpgid</span>($pid, $pid);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">// fork 一个子进程、观察组id变化
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>                $pidMap[$pid] <span style="color:#f92672">=</span> $pid;
</span></span><span style="display:flex;"><span>            }
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">showPid</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>        $i <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>) {
</span></span><span style="display:flex;"><span>            $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_waitpid</span>(<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>, $status);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">echo</span> <span style="color:#e6db74">&#34;子进程 </span><span style="color:#e6db74">$pid</span><span style="color:#e6db74"> 结束了</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>;
</span></span><span style="display:flex;"><span>                $i<span style="color:#f92672">++</span>;
</span></span><span style="display:flex;"><span>            }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">unset</span>($pidMap[$pid]);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> (<span style="color:#66d9ef">empty</span>($pidMap)) {
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">break</span>;
</span></span><span style="display:flex;"><span>            }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    }
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ php demo18.php 
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>463,ppid<span style="color:#f92672">=</span>28,pgid<span style="color:#f92672">=</span>463,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">28</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>464,ppid<span style="color:#f92672">=</span>463,pgid<span style="color:#f92672">=</span>463,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">28</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>463,ppid<span style="color:#f92672">=</span>28,pgid<span style="color:#f92672">=</span>463,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">28</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>465,ppid<span style="color:#f92672">=</span>463,pgid<span style="color:#f92672">=</span>465,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">28</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>466,ppid<span style="color:#f92672">=</span>465,pgid<span style="color:#f92672">=</span>465,sid<span style="color:#f92672">=</span><span style="color:#ae81ff">28</span>
</span></span><span style="display:flex;"><span>子进程 <span style="color:#ae81ff">466</span> 结束了
</span></span><span style="display:flex;"><span>子进程 <span style="color:#ae81ff">464</span> 结束了
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>2021-03-25 「PHP架构师」面试准备</title>
      <link>https://w.toomore.us/posts/dev/2021-03-25-%E9%9D%A2%E8%AF%95%E5%87%86%E5%A4%87/</link>
      <pubDate>Thu, 24 Mar 2022 11:59:59 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/2021-03-25-%E9%9D%A2%E8%AF%95%E5%87%86%E5%A4%87/</guid>
      <description>岗位信息 职位：PHP架构师
工作职责：
负责应用类产品后端架构设计、开发与优化 负责业务整体设计，具有良好的维护性和扩展性 参与需求分析与评审，了解业务，从技术角度推进业务的安全、稳定运行 任职要求：
掌握微服务开发，拆分，saga事务模型 掌握消息队列 熟悉其他的语言 掌握docker，k8s 熟悉TCP、UDP、http协议 熟悉 linux 基础命令，了解如何排查系统性能瓶颈 熟练掌握mysql数据库的性能优化，表拆分 熟练掌握php，了解PHP的优势 统招全日制本科及以上学历，理工科专业。 知识点 saga 事务模型 概念 saga 是啥？ 咱可没听过呀。
《传奇》是由布莱恩·K·沃恩（Brian K. Vaughan）撰写并由菲奥娜·斯台普斯（Fiona Staples）绘制的史诗般的太空歌剧/奇幻漫画系列，由美国公司Image Comics每月出版。该系列作品深受《星球大战》（Star Wars）的影响，并基于沃恩（Vaughan）既是孩子又是父母的想法。
—— saga
呃，貌似对找工作没啥帮助，既然是漫画先收藏起来。
再搜找到了以下相关的介绍：
1987年普林斯顿大学的 Hector Garcia-Molina 和 Kenneth Salem 发表了一篇 Paper Sagas（点这里可以看原文），讲述的是如何处理 long lived transaction（长活事务）。Saga 是一个长活事务可被分解成可以交错运行的子事务集合。其中每个子事务都是一个保持数据库一致性的真实事务。
—— 10分钟说透Saga分布式事务
The Saga design pattern is a way to manage data consistency across microservices in distributed transaction scenarios. A saga is a sequence of transactions that updates each service and publishes a message or event to trigger the next transaction step.</description>
      <content:encoded><![CDATA[<h2 id="岗位信息">岗位信息</h2>
<p>职位：PHP架构师</p>
<p>工作职责：</p>
<ol>
<li>负责应用类产品后端架构设计、开发与优化</li>
<li>负责业务整体设计，具有良好的维护性和扩展性</li>
<li>参与需求分析与评审，了解业务，从技术角度推进业务的安全、稳定运行</li>
</ol>
<p>任职要求：</p>
<ol>
<li>掌握微服务开发，拆分，saga事务模型</li>
<li>掌握消息队列</li>
<li>熟悉其他的语言</li>
<li>掌握docker，k8s</li>
<li>熟悉TCP、UDP、http协议</li>
<li>熟悉 linux 基础命令，了解如何排查系统性能瓶颈</li>
<li>熟练掌握mysql数据库的性能优化，表拆分</li>
<li>熟练掌握php，了解PHP的优势</li>
<li>统招全日制本科及以上学历，理工科专业。</li>
</ol>
<h2 id="知识点">知识点</h2>
<h3 id="saga-事务模型">saga 事务模型</h3>
<h4 id="概念">概念</h4>
<p>saga 是啥？ 咱可没听过呀。</p>
<blockquote>
<p>《传奇》是由布莱恩·K·沃恩（Brian K. Vaughan）撰写并由菲奥娜·斯台普斯（Fiona Staples）绘制的史诗般的太空歌剧/奇幻漫画系列，由美国公司Image Comics每月出版。该系列作品深受《星球大战》（Star Wars）的影响，并基于沃恩（Vaughan）既是孩子又是父母的想法。</p>
<p>—— <cite><a href="https://imagecomics.com/comics/series/saga">saga</a></cite></p>
</blockquote>
<p>呃，貌似对找工作没啥帮助，既然是漫画先收藏起来。</p>
<p>再搜找到了以下相关的介绍：</p>
<blockquote>
<p>1987年普林斯顿大学的 Hector Garcia-Molina 和 Kenneth Salem 发表了一篇 <a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">Paper Sagas</a>（点这里可以看原文），讲述的是如何处理 long lived transaction（长活事务）。Saga 是一个长活事务可被分解成可以交错运行的子事务集合。其中每个子事务都是一个保持数据库一致性的真实事务。</p>
<p>—— <cite><a href="https://cloud.tencent.com/developer/article/1839642">10分钟说透Saga分布式事务</a></cite></p>
</blockquote>
<blockquote>
<p>The Saga design pattern is a way to manage data consistency across microservices in distributed transaction scenarios. A saga is a sequence of transactions that updates each service and publishes a message or event to trigger the next transaction step. If a step fails, the saga executes compensating transactions that counteract the preceding transactions.</p>
<p>Saga 设计模式是一种在分布式事务方案中跨微服务管理数据一致性的方法。 saga 是更新每个服务并发布消息或事件以触发下一个事务步骤的事务序列。 如果步骤失败，saga 将执行补偿事务，这些事务会消除前面的事务。</p>
<p>—— <cite><a href="https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga">Saga distributed transactions pattern</a> - Azure Design Patterns</cite></p>
</blockquote>
<blockquote>
<p>You have applied the Database per Service pattern. Each service has its own database. Some business transactions, however, span multiple service so you need a mechanism to implement transactions that span services. For example, let’s imagine that you are building an e-commerce store where customers have a credit limit. The application must ensure that a new order will not exceed the customer’s credit limit. Since Orders and Customers are in different databases owned by different services the application cannot simply use a local ACID transaction.</p>
<p>Implement each business transaction that spans multiple services is a saga. A saga is a sequence of local transactions. Each local transaction updates the database and publishes a message or event to trigger the next local transaction in the saga. If a local transaction fails because it violates a business rule then the saga executes a series of compensating transactions that undo the changes that were made by the preceding local transactions.</p>
<p>你已经使用了 <a href="https://microservices.io/patterns/data/database-per-service.html">Database per Service</a> 模型，每个服务有自己的数据库。然而有些业务的事务是跨多个服务的，所以需要一个实现跨服务的事务机制。
例如你在创建一个客户有信用限制的电商系统，系统必须确保新创建的订单不会超出客户的信用限制。但是因为订单和客户在不同服务的数据库中，系统就无法简单的使用本地 ACID 事务。</p>
<p>实现业务事务跨多个服务执行就叫 saga。Saga 是一个本地事务的序列。每个本地事务更新数据库，并发布一条消息或事件，以触发 saga 中的下一个本地事务。如果本地事务因违反业务规则而失败，那么 saga 将执行一系列补偿事务，这些事务将撤销之前本地事务所做的更改。</p>
<p>—— <cite><a href="https://microservices.io/patterns/data/saga.html">Sagas - Microservice Architecture</a></cite></p>
</blockquote>
<h4 id="saga-事务有两种恢复策略">saga 事务有两种恢复策略</h4>
<p>向前恢复（forward recovery）：</p>
<p>对于执行不通过的事务，会尝试重试事务，这里有一个假设就是每个子事务最终都会成功。这种方式适用于必须要成功的场景。</p>
<p>向后恢复（backward recovery）：</p>
<p>在执行事务失败时，补偿所有已完成的事务，是“一退到底”的方式。</p>
<h4 id="saga-事务协调">saga 事务协调</h4>
<h5 id="choreography编排">Choreography（编排）:</h5>
<p>参与者（子事务）之间的调用、分配、决策和排序，通过交换事件进行进行。是一种去中心化的模式，参与者之间通过消息机制进行沟通，通过监听器的方式监听其他参与者发出的消息，从而执行后续的逻辑处理。由于没有中间协调点，靠参与靠自己进行相互协调。</p>
<p>优点：</p>
<ul>
<li>
<p>简单：每个子事务进行操作时只用发布事件消息，其他子事务监听处理。</p>
</li>
<li>
<p>松耦合：参与者（服务）之间通过订阅事件进行沟通，组合会更加灵活</p>
</li>
</ul>
<p>缺点：</p>
<ul>
<li>
<p>理解困难：没有对业务流程进行完整的描述，要了解整个事务的执行过程需要通过阅读代码完成。增加开发人员理解和维护代码的难度。</p>
</li>
<li>
<p>存在服务的循环依赖：由于通过消息和事件进行沟通，参与者之间会存在循环依赖的情况。也就是A服务调用B服务，B服务又调用A服务的情况。这也增加了架构设计的复杂度，在设计初期需要认真考虑。</p>
</li>
<li>
<p>紧耦合风险：每个参与者执行的方法都依赖于上一步参与者发出的消息，但是上一步的参与者的所有消息都需要被订阅，才能了解参与者的真实状态，无形中增加了两个服务的耦合度。</p>
</li>
</ul>
<h5 id="orchestration控制">Orchestration（控制）:</h5>
<p>saga 提供一个控制类，其方便参与者之前的协调工作。事务执行的命令从控制类发起，按照逻辑顺序请求 saga 的参与者，从参与者那里接受到反馈以后，控制类再发起向其他参与者的调用。所有 saga 的参与者都围绕这个控制类进行沟通和协调工作。</p>
<p>优点：</p>
<ul>
<li>
<p>避免循环依赖：在编排模式中存在参与者之间的循环调用，而中心控制类的方式可以避免这种情况的发生。</p>
</li>
<li>
<p>降低复杂性：所有事务交给控制器完成，它负责命令的执行和回复的处理，参与者只需要完成自身的任务，不用考虑处理消息的方式，降低参与者接入的复杂性。</p>
</li>
</ul>
<p>容易测试：测试工作集中在集中控制类上，其他服务单独测试功能即可。</p>
<ul>
<li>容易扩展：如果事务需要添加新步骤，只需修改控制类，保持事务复杂性保持线性，回滚更容易管理</li>
</ul>
<p>缺点：</p>
<ul>
<li>
<p>依赖控制器：控制器中集中太多逻辑的风险。</p>
</li>
<li>
<p>增加管理难度：这种模式除了管理各个业务服务以外，还需要额外管理控制类服务，无形中增加了管理的难度和复杂度。而且存在单点风险，一旦控制器出现问题，整个业务就处于瘫痪中。</p>
</li>
</ul>
<h5 id="总结">总结</h5>
<p>首先Saga是针对分布式长活事务的解决方案，针对事务长、多、复杂的情况，特别是服务由多个公司开发具有不可控性，可以使用Saga模式进行分布式事务的处理。Saga在处理事务一致性方面采取了向前恢复和向后恢复策略，前者通过不断重试的方式保证事务完成，而后者通过子事务的补偿事务，逐一回滚的方式让事务标记失败。在分布式协调方面，Saga采用了两种模式：编排和控制。前者让参与者（服务）之间通过消息进行沟通，根据事件出发事务的执行流程，是一种去中心化的模式。后者通过中心控制类，处理事务的执行和回滚步骤，统一调用服务和接受服务的反馈。</p>
<h3 id="微服务">微服务</h3>
<p>Microservices - also known as the microservice architecture - is an architectural style that structures an application as a collection of services that are</p>
<ul>
<li>Highly maintainable and testable（高度可维护、可测试）</li>
<li>Loosely coupled（松耦合）</li>
<li>Independently deployable（可独立部署）</li>
<li>Organized around business capabilities（围绕业务能力进行组织）</li>
<li>Owned by a small team（由一个小团队拥有）</li>
</ul>
<p>The microservice architecture enables the rapid（快速）, frequent（频繁） and reliable（可靠） delivery of large, complex（复杂的） applications. It also enables an organization to evolve（改进、演化） its technology stack.</p>
<p>—— <cite><a href="https://microservices.io/index.html">Microservice Architecture</a><cite></p>
<h3 id="消息队列message-queue">消息队列（Message Queue）</h3>
<p>能够在服务集群中广播消息，并传递到每个服务中。具有这个功能的像是 NSQ 或是 RabbitMQ。你能够在 A 服务上广播一个“创建新用户”的事件，这个事件可以顺便带有新用户的资料。而 B 服务可以监听这个事件并在接收到之后有所处理。这些过程都是异步处理的，这意味着 A 服务并不需要等到 B 服务处理完该事件后才能继续，而这也代表 A 服务无法获取 B 服务的处理结果。与事件存储中心近乎相似，但有所不同的是：消息队列并不会保存事件。一旦事件被消化（接收）后就会从队列中消失，这很适合用在像发送欢迎信件的时机。</p>
<p>—— <cite><a href="https://zh.wikipedia.org/wiki/%E5%BE%AE%E6%9C%8D%E5%8B%99#%E8%A8%8A%E6%81%AF%E4%BD%87%E5%88%97%EF%BC%88Message_Queue%EF%BC%89">微服务</a></cite></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>5-1 Bash进程与终端</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%94%E7%AB%A0%E8%BF%9B%E7%A8%8B%E5%85%B3%E7%B3%BB%E4%B8%8E%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B/5-1-bash%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BB%88%E7%AB%AF/</link>
      <pubDate>Wed, 16 Mar 2022 15:33:55 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%94%E7%AB%A0%E8%BF%9B%E7%A8%8B%E5%85%B3%E7%B3%BB%E4%B8%8E%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B/5-1-bash%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BB%88%E7%AB%AF/</guid>
      <description>什么是终端 能实现数据输入、输出的统称为终端。
物理终端：传统显示器、键盘，通过 VGA、HDMI、USB 等连接。
软件终端（虚拟终端/伪终端）：通过 TCP/IP 协议实现的终端，能模拟出来一个实现「数据输入、输出」的终端，比如：ssh、telnet &amp;hellip;
这篇博客介绍的比较详细：「转」彻底理解Linux的各种终端类型以及概念。
伪终端的连接过程 在linux中有物理终端，有虚拟终端（伪终端）。
sshd 服务会打开一个 [dev/ptmx]，这个文件是一个伪终端主设备文件。
bin/bash 会打开一个 dev/pts（0,1&amp;hellip;）， 是一个伪终端从设备文件。
ptmx/ptsx 它们通过伪终端设备驱动程序模拟出输入和输出的功能。
bin/bash 进程就可以实现数据读取和数据写入。
ssh客户端 &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;gt; 远程服务器的一个进程 &amp;mdash;&amp;mdash;-&amp;gt; ssh客户端。
输入单元（ssh客户端）&amp;mdash;&amp;mdash;&amp;ndash;&amp;gt; /bin/bash进程&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash;&amp;gt; 输出单元（ssh客户端）。
bin/bash 启动之后，对终端数据的读取和写入就是通过 pts 实现的（能实现标准输入，标准输出）。
dev/pts0 0 1 2 标准输入，标准输出，标准错误。
通过 strace 命令查看sshd服务：
strace 前进程关系：
├─sshd,9408 │ └─sshd,2888142 │ └─bash,2888170 │ └─pstree,2889779 -ap strace 中：
$strace -f -s 65500 -o sshd.log -p 9408 # strace 查看系统调用，进行一个新的 SSH 连接 strace: Process 9408 attached strace: Process 2888330 attached strace: Process 2888331 attached strace: Process 2888336 attached strace: Process 2888342 attached strace: Process 2888343 attached strace: Process 2888344 attached strace: Process 2888345 attached strace: Process 2888346 attached strace: Process 2888347 attached strace: Process 2888348 attached strace: Process 2888349 attached strace: Process 2888350 attached strace: Process 2888351 attached strace: Process 2888352 attached strace: Process 2888353 attached strace: Process 2888354 attached strace: Process 2888355 attached strace: Process 2888356 attached strace: Process 2888357 attached # 新的SSH连接 strace: Process 2888358 attached strace: Process 2888359 attached strace: Process 2888360 attached strace: Process 2888361 attached strace: Process 2888362 attached strace: Process 2888363 attached strace: Process 2888364 attached strace: Process 2888365 attached strace: Process 2888382 attached ^Cstrace: Process 9408 detached # 终止信号 strace: Process 2888330 detached strace: Process 2888357 detached 新的 SSH 连接以后的进程关系：</description>
      <content:encoded><![CDATA[<h2 id="什么是终端">什么是终端</h2>
<p>能实现数据输入、输出的统称为<a href="https://zh.wikipedia.org/wiki/%E7%B5%82%E7%AB%AF">终端</a>。</p>
<p>物理终端：传统显示器、键盘，通过 VGA、HDMI、USB 等连接。</p>
<p>软件终端（虚拟终端/伪终端）：通过 <a href="https://zh.wikipedia.org/wiki/TCP/IP%E5%8D%8F%E8%AE%AE%E6%97%8F">TCP/IP</a> 协议实现的终端，能模拟出来一个实现「数据输入、输出」的终端，比如：ssh、telnet &hellip;</p>
<p>这篇博客介绍的比较详细：<a href="/posts/networktech/thoroughly-understand-various-terminal-types-and-concepts-of-linux/">「转」彻底理解Linux的各种终端类型以及概念</a>。</p>
<h2 id="伪终端的连接过程">伪终端的连接过程</h2>
<p>在linux中有物理终端，有虚拟终端（伪终端）。</p>
<p>sshd 服务会打开一个 [dev/ptmx]，这个文件是一个伪终端主设备文件。</p>
<p>bin/bash 会打开一个 <a href="https://man7.org/linux/man-pages/man4/pts.4.html">dev/pts</a>（0,1&hellip;）， 是一个伪终端从设备文件。</p>
<p>ptmx/ptsx 它们通过伪终端设备驱动程序模拟出输入和输出的功能。</p>
<p>bin/bash 进程就可以实现数据读取和数据写入。</p>
<p>ssh客户端 &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&gt; 远程服务器的一个进程 &mdash;&mdash;-&gt; ssh客户端。</p>
<p>输入单元（ssh客户端）&mdash;&mdash;&ndash;&gt; /bin/bash进程&mdash;&mdash;&mdash;&mdash;&ndash;&gt; 输出单元（ssh客户端）。</p>
<p>bin/bash 启动之后，对终端数据的读取和写入就是通过 pts 实现的（能实现标准输入，标准输出）。</p>
<p>dev/pts0 0 1 2 标准输入，标准输出，标准错误。</p>
<p>通过 strace 命令查看sshd服务：</p>
<p>strace 前进程关系：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>├─sshd,9408
</span></span><span style="display:flex;"><span>│   └─sshd,2888142    
</span></span><span style="display:flex;"><span>│       └─bash,2888170
</span></span><span style="display:flex;"><span>│           └─pstree,2889779 -ap
</span></span></code></pre></div><p>strace 中：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$strace -f -s <span style="color:#ae81ff">65500</span> -o sshd.log -p <span style="color:#ae81ff">9408</span> <span style="color:#75715e"># strace 查看系统调用，进行一个新的 SSH 连接</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">9408</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888330</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888331</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888336</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888342</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888343</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888344</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888345</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888346</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888347</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888348</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888349</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888350</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888351</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888352</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888353</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888354</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888355</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888356</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888357</span> attached <span style="color:#75715e"># 新的SSH连接</span>
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888358</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888359</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888360</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888361</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888362</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888363</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888364</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888365</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888382</span> attached
</span></span><span style="display:flex;"><span>^Cstrace: Process <span style="color:#ae81ff">9408</span> detached <span style="color:#75715e"># 终止信号</span>
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888330</span> detached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">2888357</span> detached
</span></span></code></pre></div><p>新的 SSH 连接以后的进程关系：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>├─sshd,9408
</span></span><span style="display:flex;"><span>│   ├─sshd,2888142    
</span></span><span style="display:flex;"><span>│   │   └─bash,2888170
</span></span><span style="display:flex;"><span>│   └─sshd,2888330    
</span></span><span style="display:flex;"><span>│       └─bash,2888357 <span style="color:#75715e"># 新的SSH连接</span>
</span></span><span style="display:flex;"><span>│           └─pstree,2889432 -ap
</span></span></code></pre></div><p>查看 sshd.log：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e"># select 是一个 socket 接口函数</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">9408</span>  <span style="color:#66d9ef">select</span><span style="color:#f92672">(</span>95, <span style="color:#f92672">[</span>3<span style="color:#f92672">]</span>, NULL, NULL, NULL<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span> <span style="color:#f92672">(</span>in <span style="color:#f92672">[</span>3<span style="color:#f92672">])</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 接收客户端连接</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">9408</span>  accept<span style="color:#f92672">(</span>3, <span style="color:#f92672">{</span>sa_family<span style="color:#f92672">=</span>AF_INET, sin_port<span style="color:#f92672">=</span>htons<span style="color:#f92672">(</span>22670<span style="color:#f92672">)</span>, sin_addr<span style="color:#f92672">=</span>inet_addr<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;123.139.68.156&#34;</span><span style="color:#f92672">)}</span>, <span style="color:#f92672">[</span>128-&gt;16<span style="color:#f92672">])</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">4</span> 
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">9408</span>  fcntl<span style="color:#f92672">(</span>4, F_GETFL<span style="color:#f92672">)</span>                 <span style="color:#f92672">=</span> 0x2 <span style="color:#f92672">(</span>flags O_RDWR<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">9408</span>  pipe<span style="color:#f92672">([</span>5, 6<span style="color:#f92672">])</span>                      <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">9408</span>  socketpair<span style="color:#f92672">(</span>AF_UNIX, SOCK_STREAM, 0, <span style="color:#f92672">[</span>7, 8<span style="color:#f92672">])</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 创建 SSHD 子进程</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">9408</span>  clone<span style="color:#f92672">(</span>child_stack<span style="color:#f92672">=</span>NULL, flags<span style="color:#f92672">=</span>CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr<span style="color:#f92672">=</span>0x7f1fc4482210<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">2888330</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">9408</span>  close<span style="color:#f92672">(</span>6<span style="color:#f92672">)</span>                          <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 打开 ptmx 伪终端主设备文件</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888330</span> openat<span style="color:#f92672">(</span>AT_FDCWD, <span style="color:#e6db74">&#34;/dev/ptmx&#34;</span>, O_RDWR<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">9</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888330</span> statfs<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;/dev/pts&#34;</span>, <span style="color:#f92672">{</span>f_type<span style="color:#f92672">=</span>DEVPTS_SUPER_MAGIC, f_bsize<span style="color:#f92672">=</span>4096, f_blocks<span style="color:#f92672">=</span>0, f_bfree<span style="color:#f92672">=</span>0, f_bavail<span style="color:#f92672">=</span>0, f_files<span style="color:#f92672">=</span>0, f_ffree<span style="color:#f92672">=</span>0, f_fsid<span style="color:#f92672">={</span>val<span style="color:#f92672">=[</span>0, 0<span style="color:#f92672">]}</span>, f_namelen<span style="color:#f92672">=</span>255,
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 创建 bash 子进程</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888330</span> clone<span style="color:#f92672">(</span>child_stack<span style="color:#f92672">=</span>NULL, flags<span style="color:#f92672">=</span>CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr<span style="color:#f92672">=</span>0x7f1994e47210<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">2888357</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> set_robust_list<span style="color:#f92672">(</span>0x7f1994e47220, 24<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> close<span style="color:#f92672">(</span><span style="color:#ae81ff">11</span> &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> &lt;... close resumed&gt;<span style="color:#f92672">)</span>            <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> close<span style="color:#f92672">(</span><span style="color:#ae81ff">12</span> &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> &lt;... close resumed&gt;<span style="color:#f92672">)</span>            <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> close<span style="color:#f92672">(</span><span style="color:#ae81ff">9</span> &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> &lt;... close resumed&gt;<span style="color:#f92672">)</span>            <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 把自己设置为会话首进程</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> setsid<span style="color:#f92672">(</span> &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> openat<span style="color:#f92672">(</span>AT_FDCWD, <span style="color:#e6db74">&#34;/dev/tty&#34;</span>, O_RDWR|O_NOCTTY &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> &lt;... openat resumed&gt;<span style="color:#f92672">)</span>           <span style="color:#f92672">=</span> -1 ENXIO <span style="color:#f92672">(</span>No such device or address<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> setsid<span style="color:#f92672">(</span> &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> &lt;... setsid resumed&gt;<span style="color:#f92672">)</span>           <span style="color:#f92672">=</span> <span style="color:#ae81ff">2888357</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> openat<span style="color:#f92672">(</span>AT_FDCWD, <span style="color:#e6db74">&#34;/dev/tty&#34;</span>, O_RDWR|O_NOCTTY &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> &lt;... openat resumed&gt;<span style="color:#f92672">)</span>           <span style="color:#f92672">=</span> -1 ENXIO <span style="color:#f92672">(</span>No such device or address<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> ioctl<span style="color:#f92672">(</span>10, TIOCSCTTY, <span style="color:#ae81ff">0</span> &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> &lt;... ioctl resumed&gt;<span style="color:#f92672">)</span>            <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 伪终端从设备文件</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 当 /bin/bash 进程打开这个文件时，就可以简单认为该进程已经连接了我们的输入（键盘）、输出单元（显示器）。</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 已经能实现数据的输入和输出，相当于连接了一个终端（这个终端是通过 [TCP/IP] 协议实现的）。</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Linux 内核（SSHD服务）模拟出一个终端：[0、1、2 标准输入、标准输出、标准错误]</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> openat<span style="color:#f92672">(</span>AT_FDCWD, <span style="color:#e6db74">&#34;/dev/pts/1&#34;</span>, O_RDWR &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 在终端输入 `ll` 的系统调用</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 说明伪终端通过 [TCP/IP] 传输</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 输入（键盘）</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> &lt;... read resumed&gt;<span style="color:#e6db74">&#34;l&#34;</span>, 1<span style="color:#f92672">)</span>       <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># socket 监听</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888330</span> <span style="color:#66d9ef">select</span><span style="color:#f92672">(</span>12, <span style="color:#f92672">[</span><span style="color:#ae81ff">4</span> <span style="color:#ae81ff">5</span> 11<span style="color:#f92672">]</span>, <span style="color:#f92672">[]</span>, NULL, NULL &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> <span style="color:#66d9ef">select</span><span style="color:#f92672">(</span>1, <span style="color:#f92672">[</span>0<span style="color:#f92672">]</span>, NULL, <span style="color:#f92672">[</span>0<span style="color:#f92672">]</span>, <span style="color:#f92672">{</span>tv_sec<span style="color:#f92672">=</span>0, tv_usec<span style="color:#f92672">=</span>0<span style="color:#f92672">})</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span> <span style="color:#f92672">(</span>in <span style="color:#f92672">[</span>0<span style="color:#f92672">]</span>, left <span style="color:#f92672">{</span>tv_sec<span style="color:#f92672">=</span>0, tv_usec<span style="color:#f92672">=</span>0<span style="color:#f92672">})</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> pselect6<span style="color:#f92672">(</span>1, <span style="color:#f92672">[</span>0<span style="color:#f92672">]</span>, NULL, NULL, NULL, <span style="color:#f92672">{[]</span>, 8<span style="color:#f92672">})</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span> <span style="color:#f92672">(</span>in <span style="color:#f92672">[</span>0<span style="color:#f92672">])</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 输入（键盘）</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> read<span style="color:#f92672">(</span>0, <span style="color:#e6db74">&#34;l&#34;</span>, 1<span style="color:#f92672">)</span>                 <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> <span style="color:#66d9ef">select</span><span style="color:#f92672">(</span>1, <span style="color:#f92672">[</span>0<span style="color:#f92672">]</span>, NULL, <span style="color:#f92672">[</span>0<span style="color:#f92672">]</span>, <span style="color:#f92672">{</span>tv_sec<span style="color:#f92672">=</span>0, tv_usec<span style="color:#f92672">=</span>0<span style="color:#f92672">})</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">(</span>Timeout<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 输出（显示器）</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2888357</span> write<span style="color:#f92672">(</span>2, <span style="color:#e6db74">&#34;ll&#34;</span>, 2<span style="color:#f92672">)</span>               <span style="color:#f92672">=</span> <span style="color:#ae81ff">2</span>
</span></span></code></pre></div><p>总结：</p>
<ol>
<li>
<p>通过 ssh 客户端连接 <a href="https://www.ssh.com/academy/ssh/sshd">sshd</a> 服务（它是一个守护进程，实现协议是：<a href="https://zh.wikipedia.org/wiki/TCP/IP%E5%8D%8F%E8%AE%AE%E6%97%8F">TCP/IP</a>）；</p>
</li>
<li>
<p>sshd 接收客户端连接之后，clone,fork 一个进程，同时打开伪终端主设备文件 <a href="https://man7.org/linux/man-pages/man4/ptmx.4.html">/dev/ptmx</a>；</p>
</li>
<li>
<p>再fork一个进程，同时启动 bin/bash（etc/passwd）进程，该进程会打开一个伪终端从设备 <a href="https://man7.org/linux/man-pages/man4/pts.4.html">dev/pts</a>；</p>
</li>
<li>
<p>伪终端能实现数据输入（键盘），还能实现数据输出（显示器），就是这个进程对应的键盘、显示器，键盘（0）,显示器（1,2）；</p>
</li>
<li>
<p>主从设备终端通过伪终端设备驱动程序进行通信；</p>
</li>
<li>
<p>ssh 客户端输入的数据，可以当作远程服务器的键盘输入的数据；</p>
</li>
<li>
<p>远程服务器的输出，通过 <a href="https://zh.wikipedia.org/wiki/TCP/IP%E5%8D%8F%E8%AE%AE%E6%97%8F">TCP/IP</a> 协议传输到 ssh 客户端；</p>
</li>
</ol>
<blockquote>
<p>理解这些对：进程组，会话，守护进程的学习很重要。</p>
</blockquote>
]]></content:encoded>
    </item>
    
    <item>
      <title>「转」彻底理解Linux的各种终端类型以及概念</title>
      <link>https://w.toomore.us/posts/networktech/thoroughly-understand-various-terminal-types-and-concepts-of-linux/</link>
      <pubDate>Wed, 16 Mar 2022 15:20:50 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/thoroughly-understand-various-terminal-types-and-concepts-of-linux/</guid>
      <description>为了防止走丢，做了全文转载。
原文出自：彻底理解Linux的各种终端类型以及概念
作者：dog250
每天使用Linux每天都要接触到Bash，使用Bash时似乎永远都让人摸不着头脑的概念就是终端，坐在这台运行着Linux的机器的显示器前面，这个显示器就是终端的输出，而插在机器上的USB键盘或者PS/2键盘就是终端的输入，看来这是一种最直白意义上关于终端的解释。
&amp;emsp;&amp;emsp;但是有的时候，机器上并没有看到显示器或者键盘接口，但是却有一个串口，想操作这台机器想必只能通过这个串口来进行了，这个时候，串口另一端的那台电脑的显示器键盘也叫做终端。除了上述两种意义的终端之外，我们使用的类似SecureCRT这种软件上运行的SSH，Telnet等也算是一种终端程序，只是说它是通过TCP/IP网络而不是通过串口与主机连接的。
&amp;emsp;&amp;emsp;现在可以给终端下一个非严格意义上的定义了，什么是终端？终端就是处理计算机主机输入输出的一套设备，它用来显示主机运算的输出，并且接受主机要求的输入，典型的终端包括显示器键盘套件，打印机打字机套件等。但想要彻底理解终端的概念，还是要从计算机发展历史的角度去寻根溯源。
&amp;emsp;&amp;emsp;最开始的时候，计算机有三间房屋那么大，确切地讲应该叫三间车间。如此的庞然大物有一个专门的操作台，就好像机床厂车间的操作台一样，或者说它像飞机驾驶舱的操作台更加合适，各种仪器仪表，操作员只需要在这里对这部机器发出指令，整部机器就开始为他的指令而运算，然后机器运算后的结果也会反馈到这里而不是其它地方，这里这个操作台就是最原始的终端。这里曾经是整部机器的控制中枢。
后来有了多用户多任务分时系统，不同的程序竟然可以“同时运行”了，为了让不同的程序分别独立地接受输入和处理输出，就需要多个不同的上述的操作台，当然了，坐在或者站在操作台前面的最好始终是同一个人，这样不同的人拥有不同的操作台处理不同的程序，这就进入了多终端时代，从这时起一直到现在，每一个终端都是和一个用户绑定的。为了保证这种绑定，于是就出现了登录，即通过一种叫做登录的动作，去唤起一个终端起来工作。为了支持多用户，终端从硬件分离了出来，终端成了一个软件概念，在一个硬件终端上成功登录后，便获得了一个软件终端。
&amp;emsp;&amp;emsp;可见，这个时代已经和三车间的时代不同了，终端不再只有一个，而是变成了多个，每一个登录成功的用户拥有一个可工作的软件终端来处理输入输出。
分久必合。
&amp;emsp;&amp;emsp;到了个人计算机时代，计算机和终端又成了一对一的关系。毕竟嘛，这时的计算机叫做个人计算机，并不是随便谁都能用的，计算机本身就是归属个人，所以根本没必要去支持什么多用户，或者至少是淡化了多用户和多终端的概念。我们都曾记得，当时买电脑的时候，都是一个主机配一个显示器和一套键盘鼠标，这种情况从上世纪80年代初一直持续到今天。不过近些年来当人们逐渐全面认识到计算机和终端的一对一关系后，一体机的市场就来了，既然你几乎不会(我当然知道有人会，但这里我说的是大多数人，程序员占比寥寥，程序员为了装X，是不会用一体机的，就连品牌机套装有时也不屑的)在同一主机上接多个显示器多套键盘，何必再那么麻烦，干脆把主机和显示器合在一起不就好了嘛。嗯，这个点子不错，循着这个路子，最终有了触屏一体机，连键盘都内置了。对比一下下图和三车间里的计算机时代，是不是很像呢？
但是好景不长。
&amp;emsp;&amp;emsp;合久必分。
&amp;emsp;&amp;emsp;一切似乎又回到了大型机时代。在大型机时代，一台机器是拥有多个终端的，那是五十年以前。今天，我们拥有了各种各样的小型设备，智能手机，平板电脑，智能手表….然而这些东西，其实仅仅只是一系列的终端而已！那么既然这些东西都成了终端，真正的计算机在哪儿？当然在各大机房(也是类似车间大小的那种房间)里了，只是现在不叫大型机了，而叫做云端，这种技术叫做云计算(似乎有点炒作概念的意思)。如果你不信你花了几千上万块的钱买来的设备仅仅是一个完成输入输出功能的终端，那么请断网试试，看看你的iPhone是不是变砖头了。可见，昂贵的是云提供的计算服务，而不是终端设备本身，我们把所谓的云看作是一台计算机，这幅图景是不是跟五十年前的非常像呢？
你有多久没有打开过家里的PC了，是不是很久了，但是日子也还过得去。但是你能忍受哪怕几个小时不登录微信吗？某种意义上，成为新的终端的不是这些个硬件设备，而是基于云计算技术的现代互联网服务的各类APP。 …
&amp;emsp;&amp;emsp;是不是又要分久必合了呢？早就有迹象了，从用QQ号可以登录微信，微博，内推网的时候就有迹象了。
好了，扯了这么多关于终端的发展，其实根本上也就一句话，能接受输入，能显示输出，就这就够了，不管到了什么时代，终端始终扮演着人机接口的角色，所谓Terminal，即机器的边缘！
&amp;emsp;&amp;emsp;只要能提供给计算机输入和输出功能，它就是终端，而与其所在的位置无关。我可以用ls命令列举五千公里以外的一台计算机上某个目录下的文件并且显示在我眼前的屏幕上，至于我的输入如何到达五千公里以外，这并不是我要关注的，也不是计算机要关注的，这显然只是一个通信方式问题。那么使用TCP/IP网络进行这类通信传输就是再显然不过的了。
&amp;emsp;&amp;emsp;这就是SSH使用的方法。我们知道，SSH是一个TCP/IP协议族的协议，而其上跑的却是一个远程登录后的终端流，这显然只是用TCP/IP构建了一条隧道，然后终端流通行于该隧道。除此之外，更简单的Telnet也不例外，也是通过一个TCP/IP隧道来封装承载远程登录的终端流。除却TCP/IP，如果我们执意使用卡车来运载我们的输入和输出，也完全是合适的，TCP/IP也好，卡车也好，它们只是通信手段，它们并非终端本身。
我们现在可以想象一下终端存在的形式都会有哪些。
本地终端 用VGA连接主机和显示器，用PS/2或者USB连接主机和键盘，这样的一个显示器/键盘组合就是一个本地终端。用串口连接的远程终端 通过串口线把主机接到另外一个有显示器和键盘的主机，通过运行一个终端模拟程序，比如“Windows超级终端”来将这台主机的显示器和键盘借给串口对端的主机。用TCP/IP承载的远程终端 类似Telnet，SSH这般。 大致就先说这几类吧。可见上述的三类中，前两类都是在本地就直接关联了物理设备的，比如VGA口啊，PS/2口啊，串口啊之类的，这种终端叫做物理终端，而第三类在本地则没有关联任何物理设备，注意，不要把物理网卡当成终端关联的物理设备，它只是隧道关联的物理设备，这里的物理网卡完全可以换成卡车，它们与终端并不直接相关，所以这类不直接关联物理设备的终端叫做伪终端。
&amp;emsp;&amp;emsp;既然知道了这些终端到底是怎么回事，理解余下来的那些术语就不在话下了。这些术语的存在并非是为了故意增加复杂性，而是因为工程上的东西必须要有可操作性，要可操作就必须至少有个名字来称呼，仅此而已。这跟我们中国的传统道，可道非常道；名，可名非常名是完全不同的。可谓现代数学，既要有名又要有道，而现代工程，则必须舍道而取名。
&amp;emsp;&amp;emsp;先看下Linux系统中管终端都叫做什么。
tty是最令人熟悉的了，在Linux中，/dev/ttyX代表的都是上述的物理终端，其中，/dev/tty1~/dev/tty63代表的是本地终端，也就是接到本机的键盘显示器可以操作的终端。换句话说，你往/dev/tty3里写个东西，它就会显示在显示器对应的终端。
&amp;emsp;&amp;emsp;为什么会有63个终端这么多呢？毕竟显示器只是一个单独的显示设备，键盘往往也只有一个，但Linux内核有能力知道现在该干什么，所以事实上Linux内核在初始化时会生成63个本地终端，通过键盘上的Fn-Alt-FX(X为1,2,3…)可以在这些终端之间切换，每切换到一个终端，该终端就是当前的焦点终端，比如说，你按下了Fn-Alt-F4组合键，那么此时第4个终端就是焦点终端，即/dev/tty4就是焦点终端设备。
谁是焦点终端会被内核记录为全局变量，这样只要有键盘输入，就会把输入的字符交给焦点终端。这里顺便提一下，对于串口而言，不存在焦点终端的概念，谁连了串口就是谁，而对于伪终端来讲，一般情况下client都是运行在GUI环境，对于Windows那是微软的事，对于Linux，则有X系统完成同样的事，在此略过，继续我们正在说的话题。
&amp;emsp;&amp;emsp;系统中有没有什么变量可以表示焦点终端呢？当然有了，那就是/dev/console，不管你在哪里往/dev/console里写东西，这些东西总会出现在系统当前的焦点终端上！
&amp;emsp;&amp;emsp;按照以他人为中心，我们解释了/dev/console其实就是一个全局变量，指代当前的焦点终端，如果当前的焦点是/dev/tty4，那么/dev/console指的就是/dev/tty4，当然这一切都是由内核来维护的。
&amp;emsp;&amp;emsp;那么系统中有没有一个叫做自己的全局变量呢？当然有，那就是/dev/tty，也就是说，无论你在哪个终端下工作，当你往/dev/tty里写东西的时候，它总是会马上出现在你的眼前。
&amp;emsp;&amp;emsp;/dev/tty1~/dev/tty63我们知道了它们是什么，/dev/tty表示自己，/dev/console表示焦点终端这些我们也知道了，那么串口终端如何表示呢？很简单，以ttyS 开头的就是串口连接的终端，比如ttyS1，ttyS2…
&amp;emsp;&amp;emsp;最后，解释一下伪终端。其实也很好解释，只要你理解TUN/TAP虚拟网卡的原理就行，它们如出一辙！类似Telnet，SSH不是没有实际的物理设备吗？简单，给它模拟一个不就得了？系统是分层的，执行流只管调用接口，并不管具体实现。
&amp;emsp;&amp;emsp;模拟一个虚拟的终端设备，实现它的write，read等回调即可。对于VGA连接的显示器而言，write其实就是将显存刷新，而对于伪终端而言，write其实是想将数据导入到一个用户态的程序中(不然又能去哪里呢？它下面又没有任何物理的东西)，这简直跟很多VPN的原理非常类似。为此，Linux设计出一对虚拟终端设备，即/dev/ptmx和/dev/pts/X，这就跟TUN/TAP网卡的网卡与字符设备之前的对应关系一致。
&amp;emsp;&amp;emsp;简单来讲，当有ssh客户端连接后，sshd会fork一个进程，然后在子进程中打开一个叫做/dev/pts/1(或者2,3,4,5…)的设备，然后和sshd进程的/dev/ptmx配对，这样在ptmx与pts之间就构成了一条管道，数据可以顺利被导入到sshd，然后通过TCP/IP封装发往ssh client所在的机器。
&amp;emsp;&amp;emsp;为了帮助理解上述的文字，我特意作图一张，希望能解释清楚这些终端之间的关系以及弄明白它们的工作流程。为了让图画的更加紧凑，避免横向网络吧图拉的过长而不好看，我这里采用了环形解释法，类似Intel早先的Ring1，Ring2，Ring3，我把最内层视作硬件(比它更里面的还有叫做人的东西)，中间层视作内核，最外层视作软件。
理解了图例，我上我的图，这是我昨晚画到很晚才完成的，希望能有宝贵的意见提出(图有点大，请单独查看)：
/dev目录下的各种tty，ptmx，pts/X，console等等这些是令人混淆的根源，其实理解这些是有窍门的，记住它们只是操作某种终端设备的设备文件而已，这是UNIX风格的延续，这些设备文件对应的真实设备也就那么几种，比如显示器键盘套件，串口对面的超级终端，伪终端对面的SSH，Telnet等等。然后试着画出一个上面的图，基本就理清楚了。
本文的最后，我来简单说下关于getty和login相关的东西。
&amp;emsp;&amp;emsp;前面在讲终端发展历史的时候说到过，到了多终端时代，每一个终端必须绑定一个用户，只有登录成功的用户方可获得一个终端。因此当一个人站到一个终端面前并不意味着它就能在这个终端上操作计算机，他首先要做的就是登录。所谓的登录呢，就是输入用户名和密码，如果输入正确，则会给你一个Bash(或者别的Shell)让你操作计算机，如果输入不正确，则让你继续输入…
&amp;emsp;&amp;emsp;getty给了让你登录并且继续输入的机会！init进程不断调用getty，然后getty会发起login让你登录，当你输入正确的用户名和密码后，ttyXYZ就是你的了，如果你是用SSH进行的login，那么你将得到一个叫做/dev/pts/X，如果你是在显示器键盘登录，你将得到/dev/tttX(X取决于当前的焦点终端)。
&amp;emsp;&amp;emsp;所有这一切其实都是多终端以及多用户的产物，但归根结底其根源都在分时系统。在计算机最初被放在车间大小的屋子里的年代，可能把屋子的门禁做好以及将屋子外的鉴权系统做好显得比后来的多用户login更为重要，只有在后来，终端不再属于计算机了，终端与计算机分离了，用户也和终端分离了的时候，设计一套登录机制就显得尤为必要了，因为首先即便你把计算机锁在铁屋子里，只要终端在外面，那么计算机就毫无安全感可言，其次，你也不可能把终端全部锁在完全属于你控制的铁屋子里，特别是在TCP/IP出现以后，几乎所有的计算机都是互联互通的，这意味着任何一台计算机都可以作为其它任何一台另外的计算机的操作终端，任何外部的鉴权系统和物理保护在TCP/IP网络面前都堪比马其诺防线，看似固若金汤，实则百无一用。</description>
      <content:encoded><![CDATA[<p>为了防止走丢，做了全文转载。</p>
<p>原文出自：<a href="https://blog.csdn.net/dog250/article/details/78766716">彻底理解Linux的各种终端类型以及概念</a></p>
<p>作者：<a href="https://blog.csdn.net/dog250">dog250</a></p>
<hr>
<p>每天使用Linux每天都要接触到Bash，使用Bash时似乎永远都让人摸不着头脑的概念就是<strong><em>终端</em></strong>，坐在这台运行着Linux的机器的显示器前面，这个显示器就是终端的输出，而插在机器上的USB键盘或者PS/2键盘就是终端的输入，看来这是一种最直白意义上关于终端的解释。</p> 
<p>&emsp;&emsp;但是有的时候，机器上并没有看到显示器或者键盘接口，但是却有一个串口，想操作这台机器想必只能通过这个串口来进行了，这个时候，串口另一端的那台电脑的显示器键盘也叫做终端。除了上述两种意义的终端之外，我们使用的类似SecureCRT这种软件上运行的SSH，Telnet等也算是一种终端程序，只是说它是通过TCP/IP网络而不是通过串口与主机连接的。</p> 
<p>&emsp;&emsp;现在可以给终端下一个非严格意义上的定义了，什么是终端？终端就是处理计算机主机输入输出的一套设备，它用来显示主机运算的输出，并且接受主机要求的输入，典型的终端包括<strong><em>显示器键盘套件</em></strong>，<strong><em>打印机打字机套件</em></strong>等。但想要彻底理解终端的概念，还是要从计算机发展历史的角度去寻根溯源。</p> 
<hr> 
<p>&emsp;&emsp;最开始的时候，计算机有三间房屋那么大，确切地讲应该叫三间车间。如此的庞然大物有一个专门的操作台，就好像机床厂车间的操作台一样，或者说它像飞机驾驶舱的操作台更加合适，各种仪器仪表，操作员只需要在这里对这部机器发出指令，整部机器就开始为他的指令而运算，然后机器运算后的结果也会反馈到这里而不是其它地方，这里这个操作台就是最原始的终端。这里曾经是整部机器的控制中枢。</p> 
<p><img loading="lazy" src="../images/thoroughly-understand-various-terminal-types-and-concepts-of-linux/a62b1c1baefaadd15cf613f12a1c17359d046c682bb794b56f873e999e646f26.png" alt=""  />
</p>
<p>后来有了多用户多任务分时系统，不同的程序竟然可以<strong><em>“同时运行”</em></strong>了，为了让不同的程序分别独立地接受输入和处理输出，就需要多个不同的上述的操作台，当然了，坐在或者站在操作台前面的最好始终是同一个人，这样不同的人拥有不同的操作台处理不同的程序，这就进入了多终端时代，从这时起一直到现在，每一个终端都是和一个用户绑定的。为了保证这种绑定，于是就出现了<strong><em>登录</em></strong>，即通过一种叫做<strong><em>登录</em></strong>的动作，去<strong><em>唤起一个终端起来工作</em></strong>。为了支持多用户，终端从硬件分离了出来，终端成了一个软件概念，在一个硬件终端上成功登录后，便获得了一个<strong><em>软件终端</em></strong>。</p> 
<p>&emsp;&emsp;可见，这个时代已经和三车间的时代不同了，终端不再只有一个，而是变成了多个，每一个<strong><em>登录成功的用户</em></strong>拥有一个可工作的<strong><em>软件终端</em></strong>来处理输入输出。</p> 
<p><img loading="lazy" src="../images/thoroughly-understand-various-terminal-types-and-concepts-of-linux/bfc2b486c92d3bb3249cd6eb545854cb8f033b9f3517048032963e028bc57fe3.png" alt=""  />
</p>
<p>分久必合。</p> 
<p>&emsp;&emsp;到了个人计算机时代，计算机和终端又成了一对一的关系。毕竟嘛，这时的计算机叫做<strong><em>个人计算机</em></strong>，并不是随便谁都能用的，计算机本身就是归属个人，所以根本没必要去支持什么多用户，或者至少是淡化了多用户和多终端的概念。我们都曾记得，当时买电脑的时候，都是一个主机配一个显示器和一套键盘鼠标，这种情况从上世纪80年代初一直持续到今天。不过近些年来当人们逐渐全面认识到计算机和终端的一对一关系后，一体机的市场就来了，既然你几乎不会(<u>我当然知道有人会，但这里我说的是大多数人，程序员占比寥寥，程序员为了装X，是不会用一体机的，就连品牌机套装有时也不屑的</u>)在同一主机上接多个显示器多套键盘，何必再那么麻烦，干脆把主机和显示器合在一起不就好了嘛。嗯，这个点子不错，循着这个路子，最终有了触屏一体机，连键盘都<strong><em>内置</em></strong>了。对比一下下图和三车间里的计算机时代，是不是很像呢？</p> 
<p><img loading="lazy" src="../images/thoroughly-understand-various-terminal-types-and-concepts-of-linux/f55183284f753c08099a778ceae59f226754cbc06fe9ae265a006c0612af42cf.png" alt=""  />
</p>
<p>但是好景不长。</p> 
<p>&emsp;&emsp;合久必分。</p> 
<p>&emsp;&emsp;一切似乎又回到了大型机时代。在大型机时代，一台机器是拥有多个终端的，那是五十年以前。今天，我们拥有了各种各样的小型设备，智能手机，平板电脑，智能手表….然而这些东西，其实仅仅只是一系列的终端而已！那么既然这些东西都成了终端，真正的计算机在哪儿？当然在各大机房(也是类似车间大小的那种房间)里了，只是现在不叫大型机了，而叫做<strong><em>云端</em></strong>，这种技术叫做<strong><em>云计算</em></strong>(<u>似乎有点炒作概念的意思</u>)。如果你不信你花了几千上万块的钱买来的设备仅仅是一个<strong><em>完成输入输出功能的终端</em></strong>，那么请断网试试，看看你的iPhone是不是变砖头了。可见，昂贵的是<strong><em>云提供的计算服务</em></strong>，而不是终端设备本身，我们把所谓的云看作是一台计算机，这幅图景是不是跟五十年前的非常像呢？</p> 
<p><img loading="lazy" src="../images/thoroughly-understand-various-terminal-types-and-concepts-of-linux/d5f3ca8262c0bb593f8fd05a436110878945432942b9f2737ca949492ea2406e.png" alt=""  />
</p>
<p>你有多久没有打开过家里的PC了，是不是很久了，但是日子也还过得去。但是你能忍受哪怕几个小时不登录微信吗？某种意义上，成为新的终端的不是这些个硬件设备，而是基于云计算技术的现代互联网服务的各类APP。 <br> …</p> 
<p>&emsp;&emsp;是不是又要分久必合了呢？早就有迹象了，从用QQ号可以登录微信，微博，内推网的时候就有迹象了。</p> 
<hr> 
<p>好了，扯了这么多关于终端的发展，其实根本上也就一句话，能接受输入，能显示输出，就这就够了，不管到了什么时代，终端始终扮演着人机接口的角色，所谓Terminal，即机器的边缘！</p> 
<p>&emsp;&emsp;只要能提供给计算机输入和输出功能，它就是终端，而与其所在的位置无关。我可以用<strong><em>ls</em></strong>命令列举五千公里以外的一台计算机上某个目录下的文件并且显示在我眼前的屏幕上，至于我的输入如何到达五千公里以外，这并不是我要关注的，也不是计算机要关注的，这显然只是一个通信方式问题。那么使用TCP/IP网络进行这类通信传输就是再显然不过的了。</p> 
<p>&emsp;&emsp;这就是SSH使用的方法。我们知道，SSH是一个TCP/IP协议族的协议，而其上跑的却是一个远程登录后的终端流，这显然只是用TCP/IP构建了一条隧道，然后终端流通行于该隧道。除此之外，更简单的Telnet也不例外，也是通过一个TCP/IP隧道来封装承载远程登录的终端流。除却TCP/IP，如果我们执意使用卡车来运载我们的输入和输出，也完全是合适的，TCP/IP也好，卡车也好，它们只是通信手段，它们并非终端本身。</p> 
<hr> 
<p>我们现在可以想象一下终端存在的形式都会有哪些。</p> 
<ul><li><font size="4"><b>本地终端</b></font> <br> 用VGA连接主机和显示器，用PS/2或者USB连接主机和键盘，这样的一个显示器/键盘组合就是一个本地终端。</li><li><font size="4"><b>用串口连接的远程终端</b></font> <br> 通过串口线把主机接到另外一个有显示器和键盘的主机，通过运行一个终端模拟程序，比如<strong><em>“Windows超级终端”</em></strong>来将这台主机的显示器和键盘借给串口对端的主机。</li><li><font size="4"><b>用TCP/IP承载的远程终端</b></font> <br> 类似Telnet，SSH这般。</li></ul> 
<p>大致就先说这几类吧。可见上述的三类中，前两类都是在本地就直接关联了物理设备的，比如VGA口啊，PS/2口啊，串口啊之类的，这种终端叫做<strong><em>物理终端</em></strong>，而第三类在本地则没有关联任何物理设备，注意，不要把物理网卡当成终端关联的物理设备，它只是隧道关联的物理设备，这里的物理网卡完全可以换成卡车，它们与终端并不直接相关，所以这类不直接关联物理设备的终端叫做<strong><em>伪终端</em></strong>。</p> 
<p>&emsp;&emsp;既然知道了这些终端到底是怎么回事，理解余下来的那些术语就不在话下了。这些术语的存在并非是为了故意增加复杂性，而是因为工程上的东西必须要有可操作性，要可操作就必须至少有个名字来称呼，仅此而已。这跟我们中国的传统<strong><em>道，可道非常道；名，可名非常名</em></strong>是完全不同的。可谓现代数学，既要有名又要有道，而现代工程，则必须舍道而取名。</p> 
<p>&emsp;&emsp;先看下Linux系统中管终端都叫做什么。</p> 
<hr> 
<p><strong><em>tty</em></strong>是最令人熟悉的了，在Linux中，<strong><em>/dev/ttyX</em></strong>代表的都是上述的物理终端，其中，<strong><em>/dev/tty1~/dev/tty63</em></strong>代表的是本地终端，也就是接到本机的键盘显示器可以操作的终端。换句话说，你往/dev/tty3里写个东西，它就会显示在显示器对应的终端。</p> 
<p>&emsp;&emsp;为什么会有63个终端这么多呢？毕竟显示器只是一个单独的显示设备，键盘往往也只有一个，但Linux内核有能力知道现在该干什么，所以事实上Linux内核在初始化时会生成63个本地终端，通过键盘上的<strong><em>Fn-Alt-FX(X为1,2,3…)</em></strong>可以在这些终端之间切换，每切换到一个终端，该终端就是当前的<strong><em>焦点终端</em></strong>，比如说，你按下了<strong><em>Fn-Alt-F4</em></strong>组合键，那么此时第4个终端就是焦点终端，即<strong><em>/dev/tty4</em></strong>就是焦点终端设备。</p> 
<p><img loading="lazy" src="../images/thoroughly-understand-various-terminal-types-and-concepts-of-linux/eb1bc0a41449e2e679356f6b37a3f642bc1cfe0deb02ec4b9503bb102c90eac6.png" alt=""  />
</p>
<p>谁是焦点终端会被内核记录为全局变量，这样只要有键盘输入，就会把输入的字符交给焦点终端。这里顺便提一下，对于串口而言，不存在焦点终端的概念，谁连了串口就是谁，而对于伪终端来讲，一般情况下client都是运行在GUI环境，对于Windows那是微软的事，对于Linux，则有X系统完成同样的事，在此略过，继续我们正在说的话题。</p> 
<p>&emsp;&emsp;系统中有没有什么变量可以表示焦点终端呢？当然有了，那就是<strong><em>/dev/console</em></strong>，不管你在哪里往<strong><em>/dev/console</em></strong>里写东西，这些东西总会出现在系统当前的焦点终端上！</p> 
<p>&emsp;&emsp;按照以他人为中心，我们解释了<strong><em>/dev/console</em></strong>其实就是一个全局变量，指代当前的焦点终端，如果当前的焦点是<strong><em>/dev/tty4</em></strong>，那么<strong><em>/dev/console</em></strong>指的就是<strong><em>/dev/tty4</em></strong>，当然这一切都是由内核来维护的。</p> 
<p>&emsp;&emsp;那么系统中有没有一个叫做<strong><em>自己</em></strong>的全局变量呢？当然有，那就是<strong><em>/dev/tty</em></strong>，也就是说，无论你在哪个终端下工作，当你往<strong><em>/dev/tty</em></strong>里写东西的时候，它总是会马上出现在你的眼前。</p> 
<p>&emsp;&emsp;<strong><em>/dev/tty1~/dev/tty63</em></strong>我们知道了它们是什么，<strong><em>/dev/tty</em></strong>表示自己，<strong><em>/dev/console</em></strong>表示焦点终端这些我们也知道了，那么串口终端如何表示呢？很简单，以<strong><em>ttyS</em></strong> <br> 开头的就是串口连接的终端，比如<strong><em>ttyS1，ttyS2</em></strong>…</p> 
<p>&emsp;&emsp;最后，解释一下伪终端。其实也很好解释，只要你理解<strong><em>TUN/TAP</em></strong>虚拟网卡的原理就行，它们如出一辙！类似Telnet，SSH不是没有实际的物理设备吗？简单，给它模拟一个不就得了？系统是分层的，执行流只管调用接口，并不管具体实现。</p> 
<p>&emsp;&emsp;模拟一个虚拟的终端设备，实现它的write，read等回调即可。对于VGA连接的显示器而言，write其实就是将显存刷新，而对于伪终端而言，write其实是想将数据导入到一个用户态的程序中(<u>不然又能去哪里呢？它下面又没有任何物理的东西</u>)，这简直跟很多VPN的原理非常类似。为此，Linux设计出一对虚拟终端设备，即<strong><em>/dev/ptmx</em></strong>和<strong><em>/dev/pts/X</em></strong>，这就跟<strong><em>TUN/TAP</em></strong>网卡的网卡与字符设备之前的对应关系一致。</p> 
<p>&emsp;&emsp;简单来讲，当有ssh客户端连接后，sshd会fork一个进程，然后在子进程中打开一个叫做<strong><em>/dev/pts/1(或者2,3,4,5…)</em></strong>的设备，然后和sshd进程的<strong><em>/dev/ptmx</em></strong>配对，这样在<strong><em>ptmx</em></strong>与<strong><em>pts</em></strong>之间就构成了一条管道，数据可以顺利被导入到sshd，然后通过TCP/IP封装发往ssh client所在的机器。</p> 
<p>&emsp;&emsp;为了帮助理解上述的文字，我特意作图一张，希望能解释清楚这些终端之间的关系以及弄明白它们的工作流程。为了让图画的更加紧凑，避免横向网络吧图拉的过长而不好看，我这里采用了环形解释法，类似Intel早先的Ring1，Ring2，Ring3，我把最内层视作硬件(<u>比它更里面的还有叫做人的东西</u>)，中间层视作内核，最外层视作软件。</p> 
<p><img loading="lazy" src="../images/thoroughly-understand-various-terminal-types-and-concepts-of-linux/457ecfede17aeabc8a89dc4b2a858a0e95bb343c8b173c8b49e291e365972645.png" alt=""  />
</p>
<p>理解了图例，我上我的图，这是我昨晚画到很晚才完成的，希望能有宝贵的意见提出(<u>图有点大，请单独查看</u>)：</p> 
<p><img loading="lazy" src="../images/thoroughly-understand-various-terminal-types-and-concepts-of-linux/04cd8be9a3868e80b992522c0aa5a631e3f09c7924d7e43d85fe4feb283e684c.png" alt=""  />
</p>
<p><strong><em>/dev</em></strong>目录下的各种<strong><em>tty</em></strong>，<strong><em>ptmx</em></strong>，<strong><em>pts/X</em></strong>，<strong><em>console</em></strong>等等这些是令人混淆的根源，其实理解这些是有窍门的，记住它们只是<strong><em>操作某种终端设备的设备文件而已</em></strong>，这是UNIX风格的延续，这些设备文件对应的真实设备也就那么几种，比如显示器键盘套件，串口对面的超级终端，伪终端对面的SSH，Telnet等等。然后试着画出一个上面的图，基本就理清楚了。</p> 
<hr> 
<p>本文的最后，我来简单说下关于<strong><em>getty</em></strong>和<strong><em>login</em></strong>相关的东西。</p> 
<p>&emsp;&emsp;前面在讲终端发展历史的时候说到过，到了多终端时代，每一个终端必须绑定一个用户，只有登录成功的用户方可获得一个终端。因此当一个人站到一个终端面前并不意味着它就能在这个终端上操作计算机，他首先要做的就是登录。所谓的登录呢，就是输入用户名和密码，如果输入正确，则会给你一个<strong><em>Bash(或者别的Shell)</em></strong>让你操作计算机，如果输入不正确，则让你继续输入…</p> 
<p>&emsp;&emsp;<strong><em>getty</em></strong>给了让你登录并且继续输入的机会！<strong><em>init</em></strong>进程不断调用<strong><em>getty</em></strong>，然后<strong><em>getty</em></strong>会发起<strong><em>login</em></strong>让你登录，当你输入正确的用户名和密码后，<strong><em>ttyXYZ</em></strong>就是你的了，如果你是用SSH进行的<strong><em>login</em></strong>，那么你将得到一个叫做<strong><em>/dev/pts/X</em></strong>，如果你是在显示器键盘登录，你将得到<strong><em>/dev/tttX(X取决于当前的焦点终端)</em></strong>。</p> 
<p>&emsp;&emsp;所有这一切其实都是多终端以及多用户的产物，但归根结底其根源都在分时系统。在计算机最初被放在车间大小的屋子里的年代，可能把屋子的门禁做好以及将屋子外的鉴权系统做好显得比后来的多用户login更为重要，只有在后来，终端不再属于计算机了，终端与计算机分离了，用户也和终端分离了的时候，设计一套<strong><em>登录机制</em></strong>就显得尤为必要了，因为首先即便你把计算机锁在铁屋子里，只要终端在外面，那么计算机就毫无安全感可言，其次，你也不可能把终端全部锁在完全属于你控制的铁屋子里，特别是在TCP/IP出现以后，几乎所有的计算机都是互联互通的，这意味着<strong><em>任何一台计算机都可以作为其它任何一台另外的计算机的操作终端</em></strong>，任何外部的鉴权系统和物理保护在TCP/IP网络面前都堪比马其诺防线，看似固若金汤，实则百无一用。</p> 
]]></content:encoded>
    </item>
    
    <item>
      <title>Laravel 上传 Docx 文件，表单验证不通过</title>
      <link>https://w.toomore.us/posts/dev/how-to-validate-docx-file-in-laravel/</link>
      <pubDate>Wed, 16 Mar 2022 12:48:30 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/how-to-validate-docx-file-in-laravel/</guid>
      <description>今天客户反映，上传文件报错。
拿到客户的文件 xxxx.docx 自己测试，接口返回 file 必须是一个 jpeg, bmp, png, jpg, doc, docx, xls, xlsx, pdf 类型的文件。，表单验证没通过。
但是项目配置里面已经允许 docx 类型的文件了，为啥会提示文件类型不对。
打印了下文件的 mimeType，结果为 application/vnd.openxmlformats-officedocument.wordprocessingml.document。
了解了下 openxml：
Office Open XML（缩写：Open XML、OpenXML或OOXML），为由 Microsoft 开发的一种以 XML 为基础并以ZIP格式压缩的电子文件规范，支持文件、表格、备忘录、幻灯片等文件格式。
——openxml
既然以 ZIP 格式压缩，那给允许的文件类型里面加上 zip 试试。
试了一下，可以通过验证了。</description>
      <content:encoded><![CDATA[<p>今天客户反映，上传文件报错。</p>
<p>拿到客户的文件 <code>xxxx.docx</code> 自己测试，接口返回 <code>file 必须是一个 jpeg, bmp, png, jpg, doc, docx, xls, xlsx, pdf 类型的文件。</code>，表单验证没通过。</p>
<p>但是项目配置里面已经允许 <code>docx</code> 类型的文件了，为啥会提示文件类型不对。</p>
<p>打印了下文件的 <code>mimeType</code>，结果为 <code>application/vnd.openxmlformats-officedocument.wordprocessingml.document</code>。</p>
<p>了解了下 openxml：</p>
<blockquote>
<p>Office Open XML（缩写：Open XML、OpenXML或OOXML），为由 Microsoft 开发的一种以 XML 为基础并以<strong>ZIP格式</strong>压缩的电子文件规范，支持文件、表格、备忘录、幻灯片等文件格式。</p>
<p>——<cite><a href="https://zh.wikipedia.org/wiki/Office_Open_XML">openxml</a></cite></p>
</blockquote>
<p>既然以 ZIP 格式压缩，那给允许的文件类型里面加上 zip 试试。</p>
<p>试了一下，可以通过验证了。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>4-4 发送信号</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E5%9B%9B%E7%AB%A0%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7/4-4-%E5%8F%91%E9%80%81%E4%BF%A1%E5%8F%B7/</link>
      <pubDate>Tue, 15 Mar 2022 17:42:37 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E5%9B%9B%E7%AB%A0%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7/4-4-%E5%8F%91%E9%80%81%E4%BF%A1%E5%8F%B7/</guid>
      <description>发送信号的几种形式 kill -s 信号编号｜信号名字 进程PID 在程序中使用posix_kill 给一个指定的进程或是进程组发送信号 pcntl_alarm SIGALRM 在终端按下特殊键 ctrl+c、 ctrl+z、ctrl+\ 网络 SIGURG、SIGPIPE、SIGCHLD（当子进程结束的时候） pcntl_signal_dispatch pcntl_signal_dispatch，调用等待信号的处理器。
调用每个等待信号通过 pcntl_signal 安装的处理器。
posix_kill posix_kill，Send a signal to a process.
Send the signal to the process with the process identifier process_id.
kill， send signal to a process.
The kill() system call can be used to send any signal to any process group or process.
If pid is positive, then signal sig is sent to the process with the ID specified by pid.</description>
      <content:encoded><![CDATA[<h3 id="发送信号的几种形式">发送信号的几种形式</h3>
<ol>
<li>kill -s 信号编号｜信号名字  进程PID</li>
<li>在程序中使用posix_kill 给一个指定的进程或是进程组发送信号</li>
<li>pcntl_alarm SIGALRM</li>
<li>在终端按下特殊键 ctrl+c、 ctrl+z、ctrl+\</li>
<li>网络 SIGURG、SIGPIPE、SIGCHLD（当子进程结束的时候）</li>
</ol>
<h3 id="pcntl_signal_dispatch">pcntl_signal_dispatch</h3>
<p><a href="https://www.php.net/manual/zh/function.pcntl-signal-dispatch.php">pcntl_signal_dispatch</a>，调用等待信号的处理器。</p>
<p>调用每个等待信号通过 <a href="https://www.php.net/manual/zh/function.pcntl-signal.php">pcntl_signal</a> 安装的处理器。</p>
<h3 id="posix_kill">posix_kill</h3>
<p><a href="https://www.php.net/manual/zh/function.posix-kill">posix_kill</a>，Send a signal to a process.</p>
<p>Send the signal to the process with the process identifier process_id.</p>
<p><a href="https://man7.org/linux/man-pages/man2/kill.2.html">kill</a>， send signal to a process.</p>
<p>The kill() system call can be used to send any signal to any process group or process.</p>
<p>If pid is positive, then signal sig is sent to the process with the ID specified by pid.</p>
<p>If pid equals 0, then sig is sent to every process in the process group of the calling process.</p>
<p>If pid equals -1, then sig is sent to every process for which the calling process has permission to send signals, except for process 1 (init), but see below.</p>
<p>If pid is less than -1, then sig is sent to every process in the process group whose ID is -pid.</p>
<p>If sig is 0, then no signal is sent, but existence and permission checks are still performed; this can be used to check for the existence of a process ID or process group ID that the caller is permitted to signal.</p>
<p>For a process to have permission to send a signal, it must either</p>
<p>be privileged (under Linux: have the CAP_KILL capability in the</p>
<p>user namespace of the target process), or the real or effective</p>
<p>user ID of the sending process must equal the real or saved set-</p>
<p>user-ID of the target process.  In the case of SIGCONT, it</p>
<p>suffices when the sending and receiving processes belong to the</p>
<p>same session.</p>
<p>示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">pcntl_signal</span>(<span style="color:#a6e22e">SIGINT</span>, <span style="color:#66d9ef">function</span>($signo){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid %d 接收到 %d 信号</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), $signo);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">pcntl_signal</span>(<span style="color:#a6e22e">SIGALRM</span>,<span style="color:#66d9ef">function</span>($signo){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;pid %d 接收到 %d 信号</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,<span style="color:#a6e22e">posix_getpid</span>(),$signo);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// 创建的子进程都是兄弟进程，父进程ID,组ID都一样
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>$mapPid <span style="color:#f92672">=</span> [];
</span></span><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> ($pid<span style="color:#f92672">&gt;</span><span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    $mapPid[] <span style="color:#f92672">=</span> $pid;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($pid<span style="color:#f92672">&gt;</span><span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        $mapPid[] <span style="color:#f92672">=</span> $pid;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">pcntl_signal_dispatch</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">//1)pid&gt;0
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            <span style="color:#75715e">//$pid 进程的标识PID
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            <span style="color:#75715e">//$sig 信号的编号｜信号的名字
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            <span style="color:#a6e22e">posix_kill</span>($mapPid[<span style="color:#ae81ff">0</span>],<span style="color:#a6e22e">SIGINT</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">// 2)pid=0 就会向进程组中的每个进程发送信号
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            <span style="color:#75715e">// posix_kill(0, SIGINT);
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">// 3) pid==-1 最好在自己的机器上
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            <span style="color:#75715e">// posix_kill(-1, SIGINT);
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">2</span>);
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">exit</span>(<span style="color:#ae81ff">0</span>);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// 这里是子进程的运行代码
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">while</span>(<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">pcntl_signal_dispatch</span>();
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;pid %d ppid=%d,pgid=%d doing...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,<span style="color:#a6e22e">posix_getpid</span>(),<span style="color:#a6e22e">posix_getppid</span>(),<span style="color:#a6e22e">posix_getpgrp</span>());
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h3 id="pcntl_alarm">pcntl_alarm</h3>
<p><a href="https://www.php.net/manual/zh/function.pcntl-alarm">pcntl_alarm</a>，创建一个计时器，在指定的秒数后向进程发送一个SIGALRM信号。每次对 pcntl_alarm() 的调用都会取消之前设置的alarm信号。</p>
<p>参数：
seconds</p>
<p>等待的秒数。如果seconds设置为0,将不会创建alarm信号。</p>
<p>示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">pcntl_signal</span>(<span style="color:#a6e22e">SIGALRM</span>,<span style="color:#66d9ef">function</span>($signo){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid %d 接收到 %d 信号</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), $signo);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// 时间到之后，这个定时就会被 清理掉
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">pcntl_alarm</span>(<span style="color:#ae81ff">3</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">pcntl_signal_dispatch</span>();
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;pid %d ppid=%d,pgid=%d doing...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,<span style="color:#a6e22e">posix_getpid</span>(),
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">posix_getppid</span>(),<span style="color:#a6e22e">posix_getpgrp</span>());
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$ php demo15.php
</span></span><span style="display:flex;"><span>pid <span style="color:#ae81ff">1098</span> ppid<span style="color:#f92672">=</span>25,pgid<span style="color:#f92672">=</span><span style="color:#ae81ff">1098</span> doing...
</span></span><span style="display:flex;"><span>pid <span style="color:#ae81ff">1098</span> ppid<span style="color:#f92672">=</span>25,pgid<span style="color:#f92672">=</span><span style="color:#ae81ff">1098</span> doing...
</span></span><span style="display:flex;"><span>pid <span style="color:#ae81ff">1098</span> ppid<span style="color:#f92672">=</span>25,pgid<span style="color:#f92672">=</span><span style="color:#ae81ff">1098</span> doing...
</span></span><span style="display:flex;"><span>pid <span style="color:#ae81ff">1098</span> 接收到 <span style="color:#ae81ff">14</span> 信号
</span></span><span style="display:flex;"><span>pid <span style="color:#ae81ff">1098</span> ppid<span style="color:#f92672">=</span>25,pgid<span style="color:#f92672">=</span><span style="color:#ae81ff">1098</span> doing...
</span></span><span style="display:flex;"><span>pid <span style="color:#ae81ff">1098</span> ppid<span style="color:#f92672">=</span>25,pgid<span style="color:#f92672">=</span><span style="color:#ae81ff">1098</span> doing...
</span></span><span style="display:flex;"><span>pid <span style="color:#ae81ff">1098</span> ppid<span style="color:#f92672">=</span>25,pgid<span style="color:#f92672">=</span><span style="color:#ae81ff">1098</span> doing...
</span></span><span style="display:flex;"><span>pid <span style="color:#ae81ff">1098</span> ppid<span style="color:#f92672">=</span>25,pgid<span style="color:#f92672">=</span><span style="color:#ae81ff">1098</span> doing...
</span></span><span style="display:flex;"><span>pid <span style="color:#ae81ff">1098</span> ppid<span style="color:#f92672">=</span>25,pgid<span style="color:#f92672">=</span><span style="color:#ae81ff">1098</span> doing...
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>4-3 信号集</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E5%9B%9B%E7%AB%A0%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7/4-3-%E4%BF%A1%E5%8F%B7%E9%9B%86/</link>
      <pubDate>Tue, 15 Mar 2022 16:54:58 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E5%9B%9B%E7%AB%A0%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7/4-3-%E4%BF%A1%E5%8F%B7%E9%9B%86/</guid>
      <description>信号集 信号集是指信号的集合。
主程序可以选择阻塞某些信号，被阻塞的信号集称为阻塞信号集。
当进程阻塞了某个信号（通过 pcntl_sigpromask 来设置信号屏蔽字），如果在运行期间接收到了阻塞的信号时，这个信号的处理程序不会被执行，这个信号会放在被挂起的信号集里（信号未决集）。
sigpending PHP 没有实现这个函数。
examine pending signals.
sigpending() returns the set of signals that are pending for delivery to the calling thread (i.e., the signals which have been raised while blocked).
The mask of pending signals is returned in set.
pcntl_sigpromask pcntl_sigpromask 设置或检索阻塞信号，用来增加，删除或设置阻塞信号，具体行为 依赖于参数how。
pcntl_sigprocmask(int $how, array $set, array &amp;amp;$oldset = ?): bool 参数：
how：
设置 pcntl_sigprocmask()函数的行为。 可选值:
SIG_BLOCK: 把信号加入到当前阻塞信号中。 SIG_UNBLOCK: 从当前阻塞信号中移出信号。 SIG_SETMASK: 用给定的信号列表替换当前阻塞信号列表。 set：</description>
      <content:encoded><![CDATA[<p><img loading="lazy" src="../images/4-2-%E7%BC%96%E5%86%99%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7%E5%A4%84%E7%90%86%E7%A8%8B%E5%BA%8F/37d3659f048c259c093f70f995826b4fb4ca82b0995bb2b2cd6b1b6bf4311aaf.png" alt="中断处理过程示意图"  />
</p>
<h2 id="信号集">信号集</h2>
<p>信号集是指信号的集合。</p>
<p>主程序可以选择阻塞某些信号，被阻塞的信号集称为阻塞信号集。</p>
<p>当进程阻塞了某个信号（通过 <a href="https://www.php.net/manual/zh/function.pcntl-sigprocmask.php">pcntl_sigpromask</a> 来设置信号屏蔽字），如果在运行期间接收到了阻塞的信号时，这个信号的处理程序不会被执行，这个信号会放在被挂起的信号集里（信号未决集）。</p>
<h2 id="sigpending"><a href="https://man7.org/linux/man-pages/man2/sigpending.2.html">sigpending</a></h2>
<p>PHP 没有实现这个函数。</p>
<p>examine pending signals.</p>
<p>sigpending() returns the set of signals that are pending for delivery to the calling thread (i.e., the signals which have been raised while blocked).</p>
<p>The mask of pending signals is returned in set.</p>
<h2 id="pcntl_sigpromask">pcntl_sigpromask</h2>
<p><a href="https://www.php.net/manual/zh/function.pcntl-sigprocmask.php">pcntl_sigpromask</a> 设置或检索阻塞信号，用来增加，删除或设置阻塞信号，具体行为 依赖于参数how。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#a6e22e">pcntl_sigprocmask</span>(<span style="color:#a6e22e">int</span> $how, <span style="color:#66d9ef">array</span> $set, <span style="color:#66d9ef">array</span> <span style="color:#f92672">&amp;</span>$oldset <span style="color:#f92672">=</span> <span style="color:#f92672">?</span>)<span style="color:#f92672">:</span> <span style="color:#a6e22e">bool</span>
</span></span></code></pre></div><p>参数：</p>
<p>how：</p>
<p>设置 pcntl_sigprocmask()函数的行为。 可选值:</p>
<ul>
<li>SIG_BLOCK: 把信号加入到当前阻塞信号中。</li>
<li>SIG_UNBLOCK: 从当前阻塞信号中移出信号。</li>
<li>SIG_SETMASK: 用给定的信号列表替换当前阻塞信号列表。</li>
</ul>
<p>set：</p>
<p>信号列表。</p>
<p>oldset：</p>
<p>是一个输出参数，用来返回之前的阻塞信号列表数组。</p>
<p>返回值：</p>
<p>成功时返回 true， 或者在失败时返回 false。</p>
<p>示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">pcntl_signal</span>(<span style="color:#a6e22e">SIGINT</span>, <span style="color:#66d9ef">function</span>($signo){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid=%d 接收到了信号:%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">getmypid</span>(), $signo);
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// 设置进程的信号屏蔽字｜信号阻塞集
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>$sigset <span style="color:#f92672">=</span> [<span style="color:#a6e22e">SIGINT</span>, <span style="color:#a6e22e">SIGUSR1</span>];
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">pcntl_sigprocmask</span>(<span style="color:#a6e22e">SIG_BLOCK</span>, $sigset);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$i <span style="color:#f92672">=</span> <span style="color:#ae81ff">10</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span> ($i<span style="color:#f92672">--</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">pcntl_signal_dispatch</span>();
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid=%d do something...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">getmypid</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($i <span style="color:#f92672">==</span> <span style="color:#ae81ff">5</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;时间到，准备解除阻塞...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">//解除信号屏蔽
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">//$oldset 会返回之前阻塞的信号集｜信号屏蔽字
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#a6e22e">pcntl_sigprocmask</span>(<span style="color:#a6e22e">SIG_UNBLOCK</span>, [<span style="color:#a6e22e">SIGINT</span>,<span style="color:#a6e22e">SIGUSR1</span>], $oldset);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">print_r</span>($oldset);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$ php demo13.php 
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> <span style="color:#66d9ef">do</span> something...
</span></span><span style="display:flex;"><span>^C^Cpid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> <span style="color:#66d9ef">do</span> something...
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 按 ctrl + c  信号被屏蔽阻塞</span>
</span></span><span style="display:flex;"><span>^C^C^C^C^Cpid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> <span style="color:#66d9ef">do</span> something...
</span></span><span style="display:flex;"><span>^C^C^Cpid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> <span style="color:#66d9ef">do</span> something...
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> <span style="color:#66d9ef">do</span> something...
</span></span><span style="display:flex;"><span>时间到，准备解除阻塞...
</span></span><span style="display:flex;"><span>Array
</span></span><span style="display:flex;"><span><span style="color:#f92672">(</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">[</span>0<span style="color:#f92672">]</span> <span style="color:#f92672">=</span>&gt; <span style="color:#ae81ff">2</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">[</span>1<span style="color:#f92672">]</span> <span style="color:#f92672">=</span>&gt; <span style="color:#ae81ff">10</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> 接收到了信号:2
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> <span style="color:#66d9ef">do</span> something...
</span></span><span style="display:flex;"><span>^Cpid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> 接收到了信号:2
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 解除阻塞后，按 ctrl + c 接收到信号并处理</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> <span style="color:#66d9ef">do</span> something...
</span></span><span style="display:flex;"><span>^Cpid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> 接收到了信号:2
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> <span style="color:#66d9ef">do</span> something...
</span></span><span style="display:flex;"><span>^Cpid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> 接收到了信号:2
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> <span style="color:#66d9ef">do</span> something...
</span></span><span style="display:flex;"><span>^Cpid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> 接收到了信号:2
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span><span style="color:#ae81ff">2673</span> <span style="color:#66d9ef">do</span> something...
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>4-2 编写中断信号处理程序</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E5%9B%9B%E7%AB%A0%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7/4-2-%E7%BC%96%E5%86%99%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7%E5%A4%84%E7%90%86%E7%A8%8B%E5%BA%8F/</link>
      <pubDate>Tue, 15 Mar 2022 10:57:49 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E5%9B%9B%E7%AB%A0%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7/4-2-%E7%BC%96%E5%86%99%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7%E5%A4%84%E7%90%86%E7%A8%8B%E5%BA%8F/</guid>
      <description>pcntl_signal 信号处理函数 安装一个信号处理器。
说明：
pcntl_signal(int $signo, callback $handler, bool $restart_syscalls = true): bool 函数 pcntl_signal 为 signo 指定的信号安装一个新的信号处理器。
参数：
signo
信号编号。
handler
信号处理器可以是用户创建的函数或方法的名字，也可以是系统常量 SIG_IGN（译注：忽略信号处理程序）或SIG_DFL（默认信号处理程序）.
注意:
注意当你使用一个对象方法的时候，该对象的引用计数回增加使得它在你改变为其他处理或脚本结束之前是持久存在的。
restart_syscalls
指定当信号到达时系统调用重启是否可用。（译注：经查资料，此参数意为系统调用被信号打断时，系统调用是否从 开始处重新开始，但根据http://bugs.php.net/bug.php?id=52121，此参数存在bug无效。
成功时返回 true， 或者在失败时返回 false。
中断系统调用 当进程正在执行系统调用的时候，接收到中断信号，那么这个系统调用就会被中断，比如说进程正在写文件，无法恢复。
如果能恢复我们称为：可重入函数，否则就是非可重入函数。
若一个程序或副程序可以“在任意时刻被中断然后操作系统调度执行另一段代码，这段代码又使用了该副程序不会出错”，则称其为可重入（reentrant 或 re-entrant）的。即当该副程序正在运作时，执行线程可以再次进入并执行它，仍然可得到符合设计时所预期的结果。与多线程并发执行的线程安全不同，可重入强调对单一线程执行时重新进入同一个子程序仍然是安全的。
——可重入
一般在中断信号处理函数，不要写太多的业务逻辑。
我们经常把中断信号用于通知。
中断信号动作 每个信号都有相应的动作（信号处理程序）：
用户自定义的中断信号处理程序 SIG_DEF 系统默认动作（结果一般都会让进程终止或是停止，终止+core） 忽略 SIG_IGN ignore 进程启动的时候，信号的动作默认是系统行为，如果编写对应处理程序，会覆盖掉默认动作，有些信号不可以覆盖，例如 SIGKILL、SIGSTOP。
信号处理程序的继承 当父进程创建一个子进程的时候，子进程是继承父进程的中断信号处理程序的。
function sigHandler($signo) { fprintf(STDOUT, &amp;#34;pid = %d,我接收到一个信号：%d \n&amp;#34;, posix_getpid(), $signo); } pcntl_signal(SIGINT, &amp;#39;sigHandler&amp;#39;); pcntl_signal(SIGUSR2,SIG_IGN); // 忽略信号 // SIGKILL、SIGSTOP 信号是无法捕捉的，编写的信号处理程序不会执行 // pcntl_signal(SIGKILL, &amp;#39;sigHandler&amp;#39;); // pcntl_signal(SIGSTOP, &amp;#39;sigHandler&amp;#39;); $pid = pcntl_fork(); while (1) { pcntl_signal_dispatch(); fprintf(STDOUT, &amp;#34;pid = %d, main process doing something .</description>
      <content:encoded><![CDATA[<h3 id="pcntl_signal-信号处理函数"><a href="https://www.php.net/manual/zh/function.pcntl-signal">pcntl_signal</a> 信号处理函数</h3>
<p>安装一个信号处理器。</p>
<p>说明：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#a6e22e">pcntl_signal</span>(<span style="color:#a6e22e">int</span> $signo, <span style="color:#a6e22e">callback</span> $handler, <span style="color:#a6e22e">bool</span> $restart_syscalls <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>)<span style="color:#f92672">:</span> <span style="color:#a6e22e">bool</span>
</span></span></code></pre></div><p>函数 <a href="https://www.php.net/manual/zh/function.pcntl-signal">pcntl_signal</a> 为 signo 指定的信号安装一个新的信号处理器。</p>
<p>参数：</p>
<ol>
<li>
<p>signo</p>
<p>信号编号。</p>
</li>
<li>
<p>handler</p>
<p>信号处理器可以是用户创建的函数或方法的名字，也可以是系统常量 SIG_IGN（译注：忽略信号处理程序）或SIG_DFL（默认信号处理程序）.</p>
<p>注意:</p>
<p>注意当你使用一个对象方法的时候，该对象的引用计数回增加使得它在你改变为其他处理或脚本结束之前是持久存在的。</p>
</li>
<li>
<p>restart_syscalls</p>
<p>指定当信号到达时系统调用重启是否可用。（译注：经查资料，此参数意为系统调用被信号打断时，系统调用是否从 开始处重新开始，但根据http://bugs.php.net/bug.php?id=52121，此参数存在bug无效。</p>
</li>
</ol>
<p>成功时返回 true， 或者在失败时返回 false。</p>
<h3 id="中断系统调用">中断系统调用</h3>
<p>当进程正在执行系统调用的时候，接收到中断信号，那么这个系统调用就会被中断，比如说进程正在写文件，无法恢复。</p>
<p>如果能恢复我们称为：<a href="https://zh.wikipedia.org/wiki/%E5%8F%AF%E9%87%8D%E5%85%A5">可重入</a>函数，否则就是非可重入函数。</p>
<blockquote>
<p>若一个程序或副程序可以“在任意时刻被中断然后操作系统调度执行另一段代码，这段代码又使用了该副程序不会出错”，则称其为可重入（reentrant 或 re-entrant）的。即当该副程序正在运作时，执行线程可以再次进入并执行它，仍然可得到符合设计时所预期的结果。与多线程并发执行的线程安全不同，可重入强调对单一线程执行时重新进入同一个子程序仍然是安全的。</p>
<p>——<cite><a href="https://zh.wikipedia.org/wiki/%E5%8F%AF%E9%87%8D%E5%85%A5">可重入</a></cite></p>
</blockquote>
<p>一般在中断信号处理函数，不要写太多的业务逻辑。</p>
<p>我们经常把中断信号用于通知。</p>
<h3 id="中断信号动作">中断信号动作</h3>
<p>每个信号都有相应的动作（信号处理程序）：</p>
<ol>
<li>用户自定义的中断信号处理程序</li>
<li>SIG_DEF 系统默认动作（结果一般都会让进程终止或是停止，终止+core）</li>
<li>忽略 SIG_IGN ignore</li>
</ol>
<p>进程启动的时候，信号的动作默认是系统行为，如果编写对应处理程序，会覆盖掉默认动作，有些信号不可以覆盖，例如 SIGKILL、SIGSTOP。</p>
<h3 id="信号处理程序的继承">信号处理程序的继承</h3>
<p>当父进程创建一个子进程的时候，子进程是继承父进程的中断信号处理程序的。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">sigHandler</span>($signo)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid = %d,我接收到一个信号：%d </span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), $signo);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">pcntl_signal</span>(<span style="color:#a6e22e">SIGINT</span>, <span style="color:#e6db74">&#39;sigHandler&#39;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">pcntl_signal</span>(<span style="color:#a6e22e">SIGUSR2</span>,<span style="color:#a6e22e">SIG_IGN</span>); <span style="color:#75715e">// 忽略信号
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// SIGKILL、SIGSTOP 信号是无法捕捉的，编写的信号处理程序不会执行
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">// pcntl_signal(SIGKILL, &#39;sigHandler&#39;);
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">// pcntl_signal(SIGSTOP, &#39;sigHandler&#39;);
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>) {
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">pcntl_signal_dispatch</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid = %d, main process doing something ... </span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2072, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2073, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2072, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2073, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2072, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2073, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2072, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2073, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2072,我接收到一个信号：2 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2072, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2073, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2072, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2073, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2072, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2073, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2072, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2073,我接收到一个信号：2 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2073, main process doing something ...
</span></span></code></pre></div><p>子进程也可以重设信号处理程序。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">sigHandler</span>($signo)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid = %d,我接收到一个信号：%d </span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), $signo);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">pcntl_signal</span>(<span style="color:#a6e22e">SIGINT</span>, <span style="color:#e6db74">&#39;sigHandler&#39;</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (<span style="color:#ae81ff">0</span> <span style="color:#f92672">===</span> $pid) {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">pcntl_signal</span>(<span style="color:#a6e22e">SIGINT</span>, <span style="color:#66d9ef">function</span> ($signo)
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid = %d,我是子进程，我重设了信号处理程序：%d </span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), $signo);
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>) {
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">pcntl_signal_dispatch</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid = %d, main process doing something ... </span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2088, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2089, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2089, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2088, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2088,我接收到一个信号：2 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2088, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2089, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2088, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2089, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2088, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2089, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2088, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2089, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2088, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2089, main process doing something ... 
</span></span><span style="display:flex;"><span>pid <span style="color:#f92672">=</span> 2089,我是子进程，我重设了信号处理程序：2 
</span></span><span style="display:flex;"><span>...
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>2022-03-10 面试复盘</title>
      <link>https://w.toomore.us/posts/dev/20220310%E9%9D%A2%E8%AF%95%E5%A4%8D%E7%9B%98/</link>
      <pubDate>Fri, 11 Mar 2022 18:03:51 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/20220310%E9%9D%A2%E8%AF%95%E5%A4%8D%E7%9B%98/</guid>
      <description>笔试题 40分钟，A4纸手写。
好多年都没握过笔了。
MVC 中的 M, V, C 分别代表什么？
我的答案：
Model
View
Controller
分析：回答比较粗浅，只写出了完整的单词。
以下代码的运行结果
$value = FALSE; if (empty($value)) { echo &amp;#39;null&amp;#39;; } else { echo &amp;#39;have value&amp;#39;; } 我的回答：have value
正确答案：null
分析：对 empty 方法记忆模糊不清。
判断一个变量是否被认为是空的。当一个变量并不存在，或者它的值等同于false，那么它会被认为不存在。如果变量不存在的话，empty()并不会产生警告。
——empty
写出示例中日本电话号码的正则：03-1234-5678，06-1224-5989
我的回答：正则不熟悉，随便写了些。
正确答案：
改进：系统学习下正则，之前也学过，用的时候还是习惯去搜现成的表达式。归根结底还是没学会。
在线正则表达式 正则表达式 – 教程 | 菜鸟教程 正则表达式 - JavaScript | MDN 写出下面代码的运行结果：
$arr = [2, 3, 5, 8, 10, 9, 7, 5, 9]; // 2 3 5 8 10 9 7 5 9 // 0 1 2 3 4 5 6 7 8 // 0 5 // 1 8 // 2 9 // 3 9 // 4 数组没有下标为10的元素 null $num = 0; for ($i = 0; $i &amp;lt; 5; $i++) { $num += $arr[$arr[$i]]; } echo $num; 我的回答：31</description>
      <content:encoded><![CDATA[<h2 id="笔试题">笔试题</h2>
<p>40分钟，A4纸手写。</p>
<p>好多年都没握过笔了。</p>
<ol>
<li>
<p><code>MVC</code> 中的 M, V, C 分别代表什么？</p>
<p>我的答案：</p>
<p>Model</p>
<p>View</p>
<p>Controller</p>
<p>分析：回答比较粗浅，只写出了完整的单词。</p>
</li>
<li>
<p>以下代码的运行结果</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>    $value <span style="color:#f92672">=</span> <span style="color:#66d9ef">FALSE</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#66d9ef">empty</span>($value)) {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">echo</span> <span style="color:#e6db74">&#39;null&#39;</span>;
</span></span><span style="display:flex;"><span>    } <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">echo</span> <span style="color:#e6db74">&#39;have value&#39;</span>;
</span></span><span style="display:flex;"><span>    }
</span></span></code></pre></div><p>我的回答：have value</p>
<p>正确答案：null</p>
<p>分析：对 <a href="https://www.php.net/manual/zh/function.empty">empty</a> 方法记忆模糊不清。</p>
<blockquote>
<p>判断一个变量是否被认为是空的。当一个变量并不存在，或者它的值等同于false，那么它会被认为不存在。如果变量不存在的话，empty()并不会产生警告。</p>
<p>——<cite><a href="https://www.php.net/manual/zh/function.empty">empty</a></cite></p>
</blockquote>
</li>
<li>
<p>写出示例中日本电话号码的正则：03-1234-5678，06-1224-5989</p>
<p>我的回答：正则不熟悉，随便写了些。</p>
<p>正确答案：</p>
<p>改进：系统学习下正则，之前也学过，用的时候还是习惯去搜现成的表达式。归根结底还是没学会。</p>
<ul>
<li><a href="https://regex101.com/">在线正则表达式</a></li>
<li><a href="https://www.runoob.com/regexp/regexp-tutorial.html">正则表达式 – 教程 | 菜鸟教程</a></li>
<li><a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions">正则表达式 - JavaScript | MDN</a></li>
</ul>
</li>
<li>
<p>写出下面代码的运行结果：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>$arr <span style="color:#f92672">=</span> [<span style="color:#ae81ff">2</span>, <span style="color:#ae81ff">3</span>, <span style="color:#ae81ff">5</span>, <span style="color:#ae81ff">8</span>, <span style="color:#ae81ff">10</span>, <span style="color:#ae81ff">9</span>, <span style="color:#ae81ff">7</span>, <span style="color:#ae81ff">5</span>, <span style="color:#ae81ff">9</span>];
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// 2 3 5 8 10 9 7 5 9
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">// 0 1 2 3 4  5 6 7 8
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">// 0 5
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">// 1 8
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">// 2 9
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">// 3 9
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">// 4 数组没有下标为10的元素 null
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>$num <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> ($i <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>; $i <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">5</span>; $i<span style="color:#f92672">++</span>) { 
</span></span><span style="display:flex;"><span>    $num <span style="color:#f92672">+=</span> $arr[$arr[$i]];
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span> $num;
</span></span></code></pre></div><p>我的回答：31</p>
<p>实际情况：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>PHP Notice:  Undefined offset: <span style="color:#ae81ff">10</span> in /code/demo11.php on line <span style="color:#ae81ff">28</span>
</span></span></code></pre></div><p>分析：分析出来下标为 10 的数组元素不存在会报错，答案硬是给写出来了个数字。感觉自己太教条了，认为程序的目的是算出一个数字，不管咋都要得出个结果。</p>
</li>
<li>
<p>在 Linux 下，从当前文件夹及子目录中查找内容中包含 <code>old</code> 的文件：</p>
<p>我的答案：<code>find -R ./* | grep 'old'</code></p>
<p>正确答案：<code>grep -lr 'old'</code></p>
<p>分析：</p>
<p>虽然现在主力系统是 ubuntu，但是平常搜文件都是图形界面搜索，查找某个字符也是直接在 VSCode 中直接全局查找。</p>
<p>在终端查找的这些命令不熟悉，猜测是用 <code>find</code> 查找，结合用过的其他命令，拼凑了一个自己实际没用过的答案。</p>
<p>改进：熟悉常用的 Linux 命令。</p>
<ul>
<li><a href="https://man7.org/linux/man-pages/man1/find.1.html">find</a>，ps 这个我真不常用。</li>
<li><a href="https://man7.org/linux/man-pages/man1/grep.1.html">grep(1)</a>，<code>print lines that match patterns.</code> 在其他命令中捎带使用。比如： <code>cat ~/.bashrc | grep ssh</code>，不过笔试题这里用的是 <a href="https://man7.org/linux/man-pages/man1/grep.1p.html">grep(1p)</a>。</li>
<li><a href="https://man7.org/linux/man-pages/man1/grep.1p.html">grep(1p)</a>，<code>search a file for a pattern</code>。</li>
</ul>
</li>
<li>
<p>写一个方法，不使用 PHP 内置函数，翻转一个字符串：</p>
<p>我的答案：思路是把字符串分割成数组，然后重新排序，再拼回去。但是因为要用笔，纯手写，写了一通又划掉了。</p>
<p>回来以后写的答案：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">strReverse</span>(<span style="color:#a6e22e">string</span> $str <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;&#39;</span>)
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        $strs <span style="color:#f92672">=</span> <span style="color:#a6e22e">mb_str_split</span>($str);
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">implode</span>(<span style="color:#a6e22e">array_reverse</span>($strs));
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// 不知道这算不算使用内置函数
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">// 直接使用内置函数： strrev($str);
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">echo</span> <span style="color:#a6e22e">strReverse</span>(<span style="color:#e6db74">&#39;ni da ye de ...&#39;</span>);
</span></span></code></pre></div><p>分析：</p>
<p>当时也没想起来用 <a href="https://www.php.net/manual/zh/function.mb-str-split.php">mb_str_split</a> 分割字符串，实际项目中也没用上过这个函数。</p>
<p>想到的是 <a href="https://www.php.net/manual/zh/function.explode.php">explode</a>（实际是没办法按每个字符分割的），结果和 <a href="https://www.php.net/manual/zh/function.implode.php">implode</a> 老是搞混，写的是 <a href="https://www.php.net/manual/zh/function.implode.php">implode</a>。</p>
<p>数组翻转的函数名 <a href="https://www.php.net/manual/zh/function.array-reverse.php">array_reverse</a> 当时也没想起来，说实话 <a href="https://www.php.net/manual/zh/function.strrev">strrev</a> 我也没想起来，curd 的时候也没用上过。</p>
</li>
<li>
<p>写一个方法，不使用 PHP 内置函数，去重并打印数组中的数字：<code>$arr = [5, 6, 5, 8, 10, 6, 9, 20];</code>，打印结果为：<code>5 6 8 10 9 20</code>。</p>
<p>我的答案：虽然打印出来了，但是格式不对，中间没有空格。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>$arr <span style="color:#f92672">=</span> [<span style="color:#ae81ff">5</span>, <span style="color:#ae81ff">6</span>, <span style="color:#ae81ff">5</span>, <span style="color:#ae81ff">8</span>, <span style="color:#ae81ff">10</span>, <span style="color:#ae81ff">6</span>, <span style="color:#ae81ff">9</span>, <span style="color:#ae81ff">20</span>];
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$tmp <span style="color:#f92672">=</span> [];
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">foreach</span> ($arr <span style="color:#66d9ef">as</span> $k <span style="color:#f92672">=&gt;</span> $v) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#f92672">!</span><span style="color:#a6e22e">in_array</span>($v, $tmp)) {
</span></span><span style="display:flex;"><span>        $tmp[] <span style="color:#f92672">=</span> $v;
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">echo</span> $v;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>回来后改进：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>$arr <span style="color:#f92672">=</span> [<span style="color:#ae81ff">5</span>, <span style="color:#ae81ff">6</span>, <span style="color:#ae81ff">5</span>, <span style="color:#ae81ff">8</span>, <span style="color:#ae81ff">10</span>, <span style="color:#ae81ff">6</span>, <span style="color:#ae81ff">9</span>, <span style="color:#ae81ff">20</span>];
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$tmp <span style="color:#f92672">=</span> [];
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">foreach</span> ($arr <span style="color:#66d9ef">as</span> $k <span style="color:#f92672">=&gt;</span> $v) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#f92672">!</span><span style="color:#a6e22e">in_array</span>($v, $tmp)) {
</span></span><span style="display:flex;"><span>        $tmp[] <span style="color:#f92672">=</span> $v;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span> <span style="color:#a6e22e">implode</span>(<span style="color:#e6db74">&#39; &#39;</span>, $tmp);
</span></span></code></pre></div></li>
<li>
<p>写一个方法，获取文件 <code>somefile.log</code> 的文件扩展名：</p>
<p>这道题出的不太清晰，是先读文件获取文件的真实扩展名呢，还是直接从文件名获取扩展，时间要紧咱选个简单的。</p>
<p>我的答案：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">getExtention</span>(<span style="color:#a6e22e">string</span> $file)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">implode</span>(<span style="color:#e6db74">&#39;.&#39;</span>, $file)[<span style="color:#ae81ff">1</span>] <span style="color:#f92672">??</span> <span style="color:#e6db74">&#39;&#39;</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">explode</span>(<span style="color:#e6db74">&#39;.&#39;</span>, $file)[<span style="color:#ae81ff">1</span>] <span style="color:#f92672">??</span> <span style="color:#e6db74">&#39;&#39;</span>; <span style="color:#75715e">// 应该用 explode，因为记混了，用了 implode。
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">getExtention</span>(<span style="color:#e6db74">&#39;somefile.log&#39;</span>);
</span></span></code></pre></div><p>回来后尝试：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">getExtention</span>(<span style="color:#a6e22e">string</span> $file)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">explode</span>(<span style="color:#e6db74">&#39;.&#39;</span>, $file)[<span style="color:#ae81ff">1</span>] <span style="color:#f92672">??</span> <span style="color:#e6db74">&#39;&#39;</span>;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span> <span style="color:#a6e22e">getExtention</span>(<span style="color:#e6db74">&#39;somefile.log&#39;</span>);
</span></span></code></pre></div><hr>
<p>改进，当时没考虑到 <code>xxx.xxx.xx.log</code> 这种情况，经 <a href="https://learnku.com/articles/65976?#reply222278">大佬</a> 提醒，做如下改进：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">getExtention</span>(<span style="color:#a6e22e">string</span> $file)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    $res <span style="color:#f92672">=</span> <span style="color:#a6e22e">explode</span>(<span style="color:#e6db74">&#39;.&#39;</span>, $file);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">end</span>($res) <span style="color:#f92672">??</span> <span style="color:#e6db74">&#39;&#39;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// 这里为啥不像下边这样写呢？ 参见手册
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e">// return end(explode(&#39;.&#39;, $file)) ?? &#39;&#39;;
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span> <span style="color:#a6e22e">getExtention</span>(<span style="color:#e6db74">&#39;xxx.xxx.somefile.log&#39;</span>);
</span></span></code></pre></div><p><a href="https://www.php.net/manual/zh/function.end.php">end</a>，<code>end(array|object &amp;$array): mixed</code></p>
<p>将 array 的内部指针移动到最后一个单元并返回其值。</p>
<p>array 这个数组。 该数组是通过引用传递的，因为它会被这个函数修改。 这意味着你必须传入一个真正的变量，而不是函数返回的数组，因为只有真正的变量才能以引用传递。</p>
</li>
<li>
<p>什么是「数据库事务」和「存储过程」，两者有啥区别？</p>
<p>我的答案：事务，保证数据的原子性，方便回滚。存储过程没了解过，也没用过。</p>
<p>分析：心里明白一点，写的时候只记起来了原子性和回滚。</p>
<p>改进：</p>
<ul>
<li>
<p><a href="https://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BA%8B%E5%8A%A1">数据库事务</a>，（简称：事务）（英语：transaction）是数据库管理系统执行过程中的一个逻辑单位，由一个有限的数据库操作序列构成。</p>
<p>数据库事务通常包含了一个序列的对数据库的读/写操作。包含有以下两个目的：</p>
<ol>
<li>
<p>为数据库操作序列提供了一个从失败中恢复到正常状态的方法，同时提供了数据库即使在异常状态下仍能保持一致性的方法。</p>
</li>
<li>
<p>当多个应用程序在并发访问数据库时，可以在这些应用程序之间提供一个隔离方法，以防止彼此的操作互相干扰。</p>
</li>
</ol>
<p>当事务被提交给了数据库管理系统（DBMS），则DBMS需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中，如果事务中有的操作没有成功完成，则事务中的所有操作都需要滚，回到事务执行前的状态；同时，该事务对数据库或者其他事务的执行无影响，所有的事务都好像在独立的运行。</p>
<p>ACID性质:</p>
<ul>
<li>原子性（Atomicity）：事务作为一个整体被执行，包含在其中的对数据库的操作要么全部被执行，要么都不执行。</li>
<li>一致性（Consistency）：事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。</li>
<li>隔离性（Isolation）：多个事务并发执行时，一个事务的执行不应影响其他事务的执行。</li>
<li>持久性（Durability）：已被提交的事务对数据库的修改应该永久保存在数据库中。</li>
</ul>
</li>
<li>
<p><a href="https://zh.wikipedia.org/wiki/%E5%AD%98%E5%82%A8%E7%A8%8B%E5%BA%8F">存储过程</a>，又称存储程序（英语：Stored Procedure），是在数据库存储复杂程序，以便外部程序调用的数据库对象，可以视为数据库的一种函数或子程序。</p>
<p>优点：</p>
<ul>
<li>存储过程可封装，并隐藏复杂的商业逻辑。</li>
<li>存储过程可以回传值，并可以接受参数。</li>
<li>存储过程无法使用 SELECT 指令执行，因为它是子程序，与查看表、资料表或用户定义函数不同。</li>
<li>存储过程可以用在资料检验，强制实行商业逻辑等。</li>
</ul>
<p>缺点：</p>
<ul>
<li>存储过程，往往定制于特定的数据库上，因为支持的编程语言不同。当切换到其他厂商的数据库系统时，需要重写原有的存储过程。</li>
<li>存储过程的性能调校与撰写，受限于各种数据库系统。</li>
</ul>
</li>
</ul>
</li>
<li>
<p>数据库索引和关联查询、插入一条数据、删除符合条件的数据。</p>
<p>没啥可说的，这块没啥问题。</p>
</li>
</ol>
<h2 id="人事面试">人事面试</h2>
<p>查户口</p>
<p>Q. 自己创业散漫惯了，能不能适应固定上班的节奏?之前也有创业失败的，来干了几天不适应走了。</p>
<p>A. 可以，创业也是按时上下班，作息规律。</p>
<p>Q. 客户是日本的要求非常严格，做什么都要文档先行（日语文档），跟国内开发流程不一样，能不能接受？</p>
<p>A. 可以，这有啥接受不了的。</p>
<p>Q. 有啥优点？</p>
<p>A. 做过的项目比较多，客户简单描述一下就能精准理解客户需求。</p>
<p>HR. 客户是日本的要求非常严格，你这优点没用。（WTH？）</p>
<p>Q. 期望薪资多少？</p>
<p>A. 回答完以后，人事有点惊讶。（ps 跟这个岗位写的也没差多少）</p>
<p>其他的没啥可总结的。</p>
<h2 id="技术面试">技术面试</h2>
<p>涉及技术方面的提问：</p>
<p>Q. 设计模式：</p>
<p>A. 知道的几个设计模式名称说了下，让具体讲一下，咱确实不清楚。</p>
<p>Q. 索引为啥使用 B+ tree？</p>
<p>A. 这玩意也没自己研究过。</p>
<blockquote>
<p>B+ 树是一种树数据结构，通常用于数据库和操作系统的文件系统中。B+ 树的特点是能够保持数据稳定有序，其插入与修改拥有较稳定的对数时间复杂度。B+ 树元素自底向上插入，这与二叉树恰好相反。</p>
<p>B+ 树在节点访问时间远远超过节点内部访问时间的时候，比可作为替代的实现有着实在的优势。这通常在多数节点在次级存储比如硬盘中的时候出现。通过最大化在每个内部节点内的子节点的数目减少树的高度，平衡操作不经常发生，而且效率增加了。这种价值得以确立通常需要每个节点在次级存储中占据完整的磁盘块或近似的大小。</p>
<p>B+ 背后的想法是内部节点可以有在预定范围内的可变量目的子节点。因此，B+ 树不需要像其他自平衡二叉查找树那样经常的重新平衡。对于特定的实现在子节点数目上的低和高边界是固定的。</p>
<p>B+ 树的创造者 Rudolf Bayer 没有解释B代表什么。最常见的观点是B代表平衡(balanced)，因为所有的叶子节点在树中都在相同的级别上。B也可能代表Bayer，或者是波音（Boeing），因为他曾经工作于波音科学研究实验室。</p>
<p>—— <cite><a href="https://zh.wikipedia.org/wiki/B%2B%E6%A0%91">B+树</a></cite></p>
</blockquote>
<blockquote>
<p>首先需要澄清的一点是，MySQL 跟 B+ 树没有直接的关系，真正与 B+ 树有关系的是 MySQL 的默认存储引擎 InnoDB，MySQL 中存储引擎的主要作用是负责数据的存储和提取，除了 InnoDB 之外，MySQL 中也支持 MyISAM 作为表的底层存储引擎。</p>
<ul>
<li>哈希虽然能够提供 O(1) 的单数据行操作性能，但是对于范围查询和排序却无法很好地支持，最终导致全表扫描；</li>
<li>B 树能够在非叶节点中存储数据，但是这也导致在查询连续数据时可能会带来更多的随机 I/O，而 B+ 树的所有叶节点可以通过指针相互连接，能够减少顺序遍历时产生的额外随机 I/O；</li>
</ul>
<p>—— <cite><a href="https://draveness.me/whys-the-design-mysql-b-plus-tree/">为什么 MySQL 使用 B+ 树</a></cite></p>
</blockquote>
<p>Q. 索引什么情况下失效？</p>
<p>A. like 查询左右匹配的时候，其他的跟字段查询的顺序有关，现在好像是智能打的不影响了。</p>
<p><img loading="lazy" src="../images/20220310%E9%9D%A2%E8%AF%95%E5%A4%8D%E7%9B%98/aa8021109885a96aac280d2525365512f5bd7d8b66855116781e9baa828db105.png" alt="一张图搞懂MySQL的索引失效"  />
</p>
<p><a href="https://segmentfault.com/a/1190000021464570">一张图搞懂MySQL的索引失效</a></p>
<p>Q. Redis 在哪些地方应用过：</p>
<p>A. 会话存储，任务队列。</p>
<p>&hellip;</p>
<p>其他记不清了。</p>
<h2 id="后续">后续</h2>
<p>面试完，让等通知，就知道没戏了。</p>
<p>上午约了个回家顺路的初创小公司面试，老板说下午开始就居家办公了，没下文了。</p>
<p>一路走回去，碰到个天桥呆坐了几十分钟。</p>
<p>想想自己也是废了。</p>
<hr>
<h2 id="顺手拍了几张照片">顺手拍了几张照片：</h2>
<p><img loading="lazy" src="../images/interview/6.jpeg" alt="点穴会所"  />
</p>
<p>点穴会所</p>
<p><img loading="lazy" src="../images/interview/8.jpeg" alt="看鹅"  />
</p>
<p>城墙边，护城河，春风吹水起轻波。帅的哥，不帅的哥，一起呆呆看河里鹅。</p>
<blockquote>
<p>这一张图片转自这里，带走了我一天的沮丧。</p>
<p>——<cite><a href="https://www.douban.com/note/827037837/?_i=5009908SMxjCK8">《在西安》蟠桃叔的日常随拍第一季</a></cite></p>
<p>原微信公众号文章作者已经删除了，刚又搜索了一下，竟然找到了原作者的豆瓣，所以把豆瓣链接更新上来。</p>
<p>——<cite>2023-09-18 12:19:52</cite></p>
</blockquote>
<p><img loading="lazy" src="../images/interview/1.jpeg" alt="火车站天桥0"  />
</p>
<p>15、16年的时候，每天骑自行车回家（单程12.5KM），都会停到这里看看火车。</p>
<p>现在都快骑不动了。</p>
<p><img loading="lazy" src="../images/interview/7.jpeg" alt="火车站天桥1"  />
</p>
<p><img loading="lazy" src="../images/interview/2.jpeg" alt="火车站天桥2"  />
</p>
<p>你们坐那儿在思考什么？</p>
<p><img loading="lazy" src="../images/interview/3.jpeg" alt="火车站天桥3"  />
</p>
<p>我坐这儿在思考什么？</p>
<p><img loading="lazy" src="../images/interview/4.jpeg" alt="火车站天桥上4"  />
</p>
<p>建成不久火车站北广场</p>
<p><img loading="lazy" src="../images/interview/5.jpeg" alt="大红灯笼高高挂"  />
</p>
<p>大华1935的仿旧餐馆</p>
<hr>
<p>哪位大佬需要人？能不能捞我一把？</p>
<p>干活很给力的。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>4-1 什么是中断信号（软中断）</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E5%9B%9B%E7%AB%A0%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7/4-1-%E4%BB%80%E4%B9%88%E6%98%AF%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7/</link>
      <pubDate>Wed, 09 Mar 2022 11:27:09 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E5%9B%9B%E7%AB%A0%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7/4-1-%E4%BB%80%E4%B9%88%E6%98%AF%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7/</guid>
      <description>中断信号 指软件中断信号，简称软中断。
中断信号处理程序（信号处理函数，信号捕捉函数）完以后，就会返回继续执行主程序。
中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。最初引入硬件中断，只是出于性能上的考量。如果计算机系统没有中断，则处理器与外部设备通信时，它必须在向该设备发出指令后进行忙等待（Busy waiting），反复轮询该设备是否完成了动作并返回结果。这就造成了大量处理器周期被浪费。
引入中断以后，当处理器发出设备请求后就可以立即返回以处理其他任务，而当设备完成动作后，发送中断信号给处理器，后者就可以再回过头获取处理结果。这样，在设备进行处理的周期内，处理器可以执行其他一些有意义的工作，而只付出一些很小的切换所引发的时间代价。后来被用于CPU外部与内部紧急事件的处理、机器故障的处理、时间控制等多个方面，并产生通过软件方式进入中断处理（软中断）的概念。
——中断
中断尽管可以提高计算机处理性能，但过于密集的中断请求／响应反而会影响系统性能。这类情形被称作中断风暴（interrupt storm）。
中断处理过程示意图
中断源 就是产生中断信号的单元。
在终端按下按键产生的中断信号 ctrl+c, ctrl+z, ctrl+\ 硬件异常 在终端使用 kill 来发送中断信号 posix_kill / kill(2) 函数、pcntl_alarm / alarm(2)函数 软件产生的中断信号 SIGURG [TCP/IP],SIGALRM 中断响应 对信号的处理。
忽略 执行中断处理函数（捕捉信号执行信号处理函数） 执行系统默认 signal ===&amp;gt; 动作[忽略，默认，执行用户编写好的信号处理函数] 中断返回 中断服务程序运行完之后返回。
信号对进程的影响：
直接让进程终止
让进程停止
SIGCONT 可以唤醒进程到前台继续运行
demo11.php
&amp;lt;?php echo posix_getpid(); while (1){ ; } 发送 SIGSTOP 让进程停止之后
[1] Killed php demo11.php [2] Killed php demo11.php [3]+ Stopped php demo11.php $jobs [1]+ Stopped php demo11.</description>
      <content:encoded><![CDATA[<h3 id="中断信号">中断信号</h3>
<p>指软件中断信号，简称软中断。</p>
<p>中断信号处理程序（信号处理函数，信号捕捉函数）完以后，就会返回继续执行主程序。</p>
<blockquote>
<p>中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。最初引入硬件中断，只是出于性能上的考量。如果计算机系统没有中断，则处理器与外部设备通信时，它必须在向该设备发出指令后进行忙等待（Busy waiting），反复轮询该设备是否完成了动作并返回结果。这就造成了大量处理器周期被浪费。</p>
<p>引入中断以后，当处理器发出设备请求后就可以立即返回以处理其他任务，而当设备完成动作后，发送中断信号给处理器，后者就可以再回过头获取处理结果。这样，在设备进行处理的周期内，处理器可以执行其他一些有意义的工作，而只付出一些很小的切换所引发的时间代价。后来被用于CPU外部与内部紧急事件的处理、机器故障的处理、时间控制等多个方面，并产生通过软件方式进入中断处理（软中断）的概念。</p>
<p>——<cite><a href="https://zh.wikipedia.org/wiki/%E4%B8%AD%E6%96%B7">中断</a></cite></p>
</blockquote>
<p>中断尽管可以提高计算机处理性能，但过于密集的中断请求／响应反而会影响系统性能。这类情形被称作中断风暴（interrupt storm）。</p>
<p><img loading="lazy" src="../images/4-1-%E4%BB%80%E4%B9%88%E6%98%AF%E4%B8%AD%E6%96%AD%E4%BF%A1%E5%8F%B7/5ee8b5b1e4ce121eecba6a3583cc7ee86cc656ed041331d4b62907f9c1455348.png" alt="中断处理过程示意图"  />
</p>
<p>中断处理过程示意图</p>
<h3 id="中断源">中断源</h3>
<p>就是产生中断信号的单元。</p>
<ol>
<li>在终端按下按键产生的中断信号 <kbd>ctrl</kbd>+<kbd>c</kbd>, <kbd>ctrl</kbd>+<kbd>z</kbd>, <kbd>ctrl</kbd>+<kbd>\</kbd></li>
<li>硬件异常</li>
<li>在终端使用 <a href="https://man7.org/linux/man-pages/man1/kill.1.html">kill</a> 来发送中断信号</li>
<li><a href="https://www.php.net/manual/zh/function.posix-kill.php">posix_kill</a> / <a href="https://man7.org/linux/man-pages/man2/kill.2.html">kill(2)</a> 函数、<a href="https://www.php.net/manual/zh/function.pcntl-alarm.php">pcntl_alarm</a> / <a href="https://man7.org/linux/man-pages/man2/alarm.2.html">alarm(2)</a>函数</li>
<li>软件产生的中断信号 SIGURG [TCP/IP],SIGALRM</li>
</ol>
<h3 id="中断响应">中断响应</h3>
<p>对信号的处理。</p>
<ol>
<li>忽略</li>
<li>执行中断处理函数（捕捉信号执行信号处理函数）</li>
<li>执行系统默认 signal ===&gt; 动作[忽略，默认，执行用户编写好的信号处理函数]</li>
</ol>
<h3 id="中断返回">中断返回</h3>
<p>中断服务程序运行完之后返回。</p>
<p>信号对进程的影响：</p>
<ol>
<li>
<p>直接让进程终止</p>
</li>
<li>
<p>让进程停止</p>
<p>SIGCONT 可以唤醒进程到前台继续运行</p>
<p>demo11.php</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span> <span style="color:#a6e22e">posix_getpid</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>    ;
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>发送 SIGSTOP 让进程停止之后</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#f92672">[</span>1<span style="color:#f92672">]</span>   Killed                  php demo11.php
</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>2<span style="color:#f92672">]</span>   Killed                  php demo11.php
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>3<span style="color:#f92672">]</span>+  Stopped                 php demo11.php
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$jobs
</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>1<span style="color:#f92672">]</span>+  Stopped                 php demo11.php
</span></span></code></pre></div><blockquote>
<p>[1]、[2]、[3] 为任务编号</p>
</blockquote>
<p>ctrl+z 它会让进程丢到后台去停止。</p>
</li>
</ol>
<h3 id="几个常用的中断信号">几个常用的中断信号</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>功能描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>SIGTSTP</td>
<td>交互停止信号，终端挂起键 ctrl+z 终端驱动产生此信号  [终端停止符] 终止+core</td>
</tr>
<tr>
<td>SIGTERM</td>
<td>可以被捕捉，让程序先清理一些工作再终止。[终止]</td>
</tr>
<tr>
<td>SIGSTOP</td>
<td>作业控制信号，也是停止一个进程，跟 SIGTSTP 一样</td>
</tr>
<tr>
<td>SIGQUIT</td>
<td>退出键 CTRL+\ 终端驱动程序产生此信号，同时产生core文件 [终端退出符]</td>
</tr>
<tr>
<td>SIGINT</td>
<td>中断键 delete/ ctrl+c  [终端中断符]</td>
</tr>
<tr>
<td>SIGCHLD</td>
<td>子进程终止时返回</td>
</tr>
<tr>
<td>SIGUSR1 ,SIGUSR2</td>
<td>用户自定义信号</td>
</tr>
<tr>
<td>SIGKILL SIGSTOP</td>
<td>不能被捕捉及忽略的,主要用于让进程可靠的终止和停止</td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    
    <item>
      <title>3-7 进程查看</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-7-%E8%BF%9B%E7%A8%8B%E6%9F%A5%E7%9C%8B/</link>
      <pubDate>Tue, 08 Mar 2022 15:20:35 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-7-%E8%BF%9B%E7%A8%8B%E6%9F%A5%E7%9C%8B/</guid>
      <description>一个程序启动之后就是一个进程，进程的数据在内存中，包括正文段和数据段，内存中的一些数据也会写入到proc文件系统中。
$ ll /proc/ total 4 dr-xr-xr-x 447 root root 0 Mar 8 06:31 ./ drwxr-xr-x 1 root root 4096 Mar 1 07:45 ../ dr-xr-xr-x 9 root root 0 Mar 8 11:43 1/ dr-xr-xr-x 9 root root 0 Mar 8 11:47 12/ dr-xr-xr-x 9 root root 0 Mar 8 11:47 21/ dr-xr-xr-x 9 root root 0 Mar 8 11:47 22/ dr-xr-xr-x 9 root root 0 Mar 8 11:47 23/ dr-xr-xr-x 9 root root 0 Mar 8 11:47 24/ dr-xr-xr-x 9 root root 0 Mar 8 11:47 3252/ dr-xr-xr-x 9 laradock laradock 0 Mar 8 11:47 499/ dr-xr-xr-x 9 root root 0 Mar 8 11:47 983/ top top - display Linux processes.</description>
      <content:encoded><![CDATA[<p>一个程序启动之后就是一个进程，进程的数据在内存中，包括正文段和数据段，内存中的一些数据也会写入到proc文件系统中。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$ ll /proc/
</span></span><span style="display:flex;"><span>total <span style="color:#ae81ff">4</span>
</span></span><span style="display:flex;"><span>dr-xr-xr-x <span style="color:#ae81ff">447</span> root     root        <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 06:31 ./
</span></span><span style="display:flex;"><span>drwxr-xr-x   <span style="color:#ae81ff">1</span> root     root     <span style="color:#ae81ff">4096</span> Mar  <span style="color:#ae81ff">1</span> 07:45 ../
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">9</span> root     root        <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:43 1/
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">9</span> root     root        <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:47 12/
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">9</span> root     root        <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:47 21/
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">9</span> root     root        <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:47 22/
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">9</span> root     root        <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:47 23/
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">9</span> root     root        <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:47 24/
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">9</span> root     root        <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:47 3252/
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">9</span> laradock laradock    <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:47 499/
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">9</span> root     root        <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:47 983/
</span></span></code></pre></div><h3 id="top"><a href="https://man7.org/linux/man-pages/man1/top.1.html">top</a></h3>
<p>top - display Linux processes.</p>
<p>The top program provides a dynamic real-time view of a running system.</p>
<p>It can display system summary information as well as a list of processes or threads currently being managed by the Linuxkernel.</p>
<p>The types of system summary information shown and the types, order and size of information displayed for processes are all user configurable and that configuration can be made persistent across restarts.</p>
<p>The program provides a limited interactive interface for process manipulation as well as a much more extensive interface for personal configuration  &ndash;  encompassing every aspect of its operation.</p>
<p>And while top is referred to throughout thisdocument, you are free to name the program anything you wish.</p>
<p>That new name, possibly an alias, will then be reflected on top&rsquo;s display and used when reading and writing a configuration file.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>top - 23:28:59 up 13:13,  <span style="color:#ae81ff">1</span> user,  load average: 0.30, 1.20, 1.61
</span></span><span style="display:flex;"><span>任务: <span style="color:#ae81ff">386</span> total,   <span style="color:#ae81ff">1</span> running, <span style="color:#ae81ff">385</span> sleeping,   <span style="color:#ae81ff">0</span> stopped,   <span style="color:#ae81ff">0</span> zombie
</span></span><span style="display:flex;"><span>%Cpu<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span>:  2.8 us,  1.7 sy,  0.1 ni, 95.3 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
</span></span><span style="display:flex;"><span>MiB Mem :   5855.6 total,    664.6 free,   3875.4 used,   1315.7 buff/cache
</span></span><span style="display:flex;"><span>MiB Swap:    976.0 total,    364.7 free,    611.3 used.   1379.6 avail Mem 
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>进程号 USER      PR  NI    VIRT    RES    SHR    %CPU  %MEM     TIME+ COMMAND                                                                        
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">7305</span>  wanger    <span style="color:#ae81ff">20</span>   <span style="color:#ae81ff">0</span>  <span style="color:#ae81ff">4956504</span>   <span style="color:#ae81ff">454380</span> <span style="color:#ae81ff">52432</span> S  4.6   7.6  28:24.62 gnome-shell
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span></code></pre></div><h3 id="pstree-查看-linux-进程间的关系显示进程树"><a href="https://man7.org/linux/man-pages/man1/pstree.1.html">pstree</a> 查看 Linux 进程间的关系，显示进程树。</h3>
<p>pstree shows running processes as a tree.</p>
<p>The tree is rooted at either pid or init if pid is omitted.</p>
<p>If a user name is specified, all process trees rooted at processes owned by that user are shown.</p>
<p><code>pstree -ap</code>：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>    ├─sshd,9408
</span></span><span style="display:flex;"><span>    │   └─sshd,444836    
</span></span><span style="display:flex;"><span>    │       └─bash,444875
</span></span><span style="display:flex;"><span>    │           └─pstree,444893 -ap
</span></span></code></pre></div><h3 id="ps"><a href="https://man7.org/linux/man-pages/man1/ps.1.html">ps</a></h3>
<p>ps displays information about a selection of the active processes.</p>
<p>If you want a repetitive update of the selection and the displayed information, use top instead.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$ ps ejx
</span></span><span style="display:flex;"><span>   PPID     PID    PGID     SID TTY        TPGID STAT   UID   TIME COMMAND
</span></span><span style="display:flex;"><span>      <span style="color:#ae81ff">0</span>       <span style="color:#ae81ff">1</span>       <span style="color:#ae81ff">1</span>       <span style="color:#ae81ff">1</span> pts/0          <span style="color:#ae81ff">1</span> Ss+      <span style="color:#ae81ff">0</span>   0:00 /usr/bin/python3 -u /sbin/my_init PATH<span style="color:#f92672">=</span>/usr/local/sbin:/usr/local/bin:/usr/sbin:/us
</span></span><span style="display:flex;"><span>      <span style="color:#ae81ff">1</span>      <span style="color:#ae81ff">12</span>      <span style="color:#ae81ff">12</span>       <span style="color:#ae81ff">1</span> pts/0          <span style="color:#ae81ff">1</span> S        <span style="color:#ae81ff">0</span>   0:01 /usr/sbin/syslog-ng --pidfile /var/run/syslog-ng.pid -F --no-caps LC_ALL<span style="color:#f92672">=</span>en_US.UTF-
</span></span><span style="display:flex;"><span>      <span style="color:#ae81ff">1</span>      <span style="color:#ae81ff">21</span>       <span style="color:#ae81ff">1</span>       <span style="color:#ae81ff">1</span> pts/0          <span style="color:#ae81ff">1</span> S+       <span style="color:#ae81ff">0</span>   0:00 /usr/bin/runsvdir -P /etc/service AST_VERSION<span style="color:#f92672">=</span>1.0.10 BLACKFIRE_CLIENT_ID<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;&lt;client_i
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">     21      22      22      22 ?             -1 Ss       0   0:00 runsv cron AST_VERSION=1.0.10 BLACKFIRE_CLIENT_ID=&#34;</span>&lt;client_id&gt;<span style="color:#e6db74">&#34; BLACKFIRE_CLIENT_TO
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">     21      23      23      23 ?             -1 Ss       0   0:00 runsv sshd AST_VERSION=1.0.10 BLACKFIRE_CLIENT_ID=&#34;</span>&lt;client_id&gt;<span style="color:#e6db74">&#34; BLACKFIRE_CLIENT_TO
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">     22      24      22      22 ?             -1 S        0   0:00 /usr/sbin/cron -f NPM_FETCH_RETRY_MINTIMEOUT=10000 LANGUAGE=en_US.UTF-8 NPM_FETCH_R
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">      0     983     983     983 pts/1       3354 Ss       0   0:00 bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">    983    3354    3354     983 pts/1       3354 R+       0   0:00 ps ejx LC_ALL=en_US.UTF-8 NVM_DIR=/home/laradock/.nvm LS_COLORS=no=00:fi=00:di=01;3
</span></span></span></code></pre></div><p>Linux 系统中一般会把进程/线程称为任务Task。
TTY 是一个物理终端｜伪终端pts/0 ssh / telnet</p>
<h3 id="proc文件系统"><a href="https://www.man7.org/linux/man-pages/man5/proc.5.html">proc</a>文件系统</h3>
<p>process information pseudo-filesystem.（进程信息伪文件系统）</p>
<p>The proc filesystem is a pseudo-filesystem which provides an interface to kernel data structures.  It is commonly mounted at /proc.</p>
<p>Typically, it is mounted automatically by the system, but it can also be mounted manually using a command such as:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>mount -t proc proc /proc
</span></span></code></pre></div><p>Most of the files in the proc filesystem are read-only, but some files are writable, allowing kernel variables to be changed.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>/proc/983# ll
</span></span><span style="display:flex;"><span>total <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">9</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 ./
</span></span><span style="display:flex;"><span>dr-xr-xr-x <span style="color:#ae81ff">460</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 06:31 ../
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 arch_status
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">2</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 attr/
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 autogroup
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 auxv
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 cgroup
</span></span><span style="display:flex;"><span>--w-------   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 clear_refs
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 cmdline
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 comm
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 coredump_filter
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 cpu_resctrl_groups
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 cpuset
</span></span><span style="display:flex;"><span>lrwxrwxrwx   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 cwd -&gt; /proc/983/
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 environ
</span></span><span style="display:flex;"><span>lrwxrwxrwx   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 exe -&gt; /bin/bash*
</span></span><span style="display:flex;"><span>dr-x------   <span style="color:#ae81ff">2</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 fd/
</span></span><span style="display:flex;"><span>dr-x------   <span style="color:#ae81ff">2</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 fdinfo/
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 gid_map
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 io
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 limits
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 loginuid
</span></span><span style="display:flex;"><span>dr-x------   <span style="color:#ae81ff">2</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 map_files/
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 maps
</span></span><span style="display:flex;"><span>-rw-------   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 mem
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 mountinfo
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 mounts
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 mountstats
</span></span><span style="display:flex;"><span>dr-xr-xr-x  <span style="color:#ae81ff">53</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 net/
</span></span><span style="display:flex;"><span>dr-x--x--x   <span style="color:#ae81ff">2</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 ns/
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 numa_maps
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 oom_adj
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 oom_score
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 oom_score_adj
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 pagemap
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 patch_state
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 personality
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 projid_map
</span></span><span style="display:flex;"><span>lrwxrwxrwx   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 root -&gt; //
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 sched
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 schedstat
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 sessionid
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 setgroups
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 smaps
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 smaps_rollup
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 stack
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 stat
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 statm
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 status
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 syscall
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">3</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 task/
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 timens_offsets
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 timers
</span></span><span style="display:flex;"><span>-rw-rw-rw-   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 timerslack_ns
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 uid_map
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">8</span> 11:56 wchan
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>3-6 SUID特权进程</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-6-suid%E7%89%B9%E6%9D%83%E8%BF%9B%E7%A8%8B/</link>
      <pubDate>Tue, 08 Mar 2022 10:19:25 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-6-suid%E7%89%B9%E6%9D%83%E8%BF%9B%E7%A8%8B/</guid>
      <description>SUID、SGID 概念 The Unix access rights flags setuid and setgid (short for &amp;ldquo;set user ID&amp;rdquo; and &amp;ldquo;set group ID&amp;rdquo;) allow users to run an executable with the file system permissions of the executable&amp;rsquo;s owner or group respectively and to change behaviour in directories. They are often used to allow users on a computer system to run programs with temporarily（暂时、临时） elevated（提高） privileges in order to perform a specific task. While the assumed user id or group id privileges provided are not always elevated, at a minimum they are specific.</description>
      <content:encoded><![CDATA[<h3 id="suidsgid-概念">SUID、SGID 概念</h3>
<blockquote>
<p>The Unix access rights flags setuid and setgid (short for &ldquo;set user ID&rdquo; and &ldquo;set group ID&rdquo;) allow users to run an executable with the file system permissions of the executable&rsquo;s owner or group respectively and to change behaviour in directories. They are often used to allow users on a computer system to run programs with temporarily（暂时、临时） elevated（提高） privileges in order to perform a specific task. While the assumed user id or group id privileges provided are not always elevated, at a minimum they are specific.</p>
<p>The flags setuid and setgid are needed for tasks that require different privileges than what the user is normally granted, such as the ability to alter system files or databases to change their login password. Some of the tasks that require additional privileges may not immediately be obvious, though, such as the ping command, which must send and listen for control packets on a network interface.</p>
<p>——<cite><a href="https://en.wikipedia.org/wiki/Setuid">setuid</a></cite></p>
</blockquote>
<p>效果：</p>
<p>The setuid and setgid flags have different effects, depending on whether they are applied to a file, to a directory or binary executable or non binary executable file. The setuid and setgid flags have an effect only on binary executable files and not on scripts (e.g., Bash, Perl, Python).</p>
<p>set user ID,set group ID 设置用户ID,设置组ID。</p>
<p>设置了 setuid 的程序就是一个特权程序了，启动之后就是一个特权进程。</p>
<p>当特殊标志 <code>s</code> 这个字符出现在文件拥有者的 <code>x</code> 权限位的时候就叫 setuid,简称SUID，或SUID特殊权限。</p>
<p>例如：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$ ls -al /usr/bin/passwd 
</span></span><span style="display:flex;"><span>-rwsr-xr-x <span style="color:#ae81ff">1</span> root root <span style="color:#ae81ff">68208</span> 7月  <span style="color:#ae81ff">15</span>  <span style="color:#ae81ff">2021</span> /usr/bin/passwd
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$ file /usr/bin/passwd 
</span></span><span style="display:flex;"><span>/usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version <span style="color:#ae81ff">1</span> <span style="color:#f92672">(</span>SYSV<span style="color:#f92672">)</span>, dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID<span style="color:#f92672">[</span>sha1<span style="color:#f92672">]=</span>6af93256cb810d90b2f96fc052b05b43b954f5b2, <span style="color:#66d9ef">for</span> GNU/Linux 3.2.0, stripped
</span></span></code></pre></div><h3 id="suidsgid用途">SUID,SGID用途</h3>
<p>一般，以 root 启动的程序都是超级进程，是一些重要的服务程序。</p>
<p>有时候我们经常是以普通用户来执行程序的，例如 www 用户。</p>
<p>但有时候普通进程需要访问一些特殊的资源，这时就需要提升权限来访问。</p>
<p>例如：linux 下 <a href="https://man7.org/linux/man-pages/man5/shadow.5.html">shadow</a> 文件（包含系统用户密码信息），普通用户是无法查看，修改，删除的。但是 root 可以。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>laradock@3a6c2da5a07b:/var/www$ cat /etc/shadow
</span></span><span style="display:flex;"><span>cat: /etc/shadow: Permission denied
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>laradock@3a6c2da5a07b:/var/www$ ls -al /etc/shadow
</span></span><span style="display:flex;"><span>-rw-r----- <span style="color:#ae81ff">1</span> root shadow <span style="color:#ae81ff">557</span> Jan <span style="color:#ae81ff">21</span> 16:07 /etc/shadow
</span></span></code></pre></div><p>普通用户 laradock 可以通过 <code>/usr/bin/passwd</code> 这个 ELF 可执行文件修改 <code>/etc/shadow</code> 文件，因为普通用户拥有 <code>/usr/bin/passwd</code> 的可执行权限，并且 <code>/usr/bin/passwd</code> 是 SUID 特权程序，拥有 <code>/etc/shadow</code> 的读写权限。</p>
<h3 id="如何设置-suid">如何设置 SUID</h3>
<p>在可执行文件的权限 <code>x</code> 位上设置 chmod u/g/o + s elf file</p>
<p>在编写特权进程时，提权访问资源之后一定要把权限改回来。</p>
<p>PHP 示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$file <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pwd.txt&#34;</span>;
</span></span><span style="display:flex;"><span>$uid <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_getuid</span>();
</span></span><span style="display:flex;"><span>$euid <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_geteuid</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;uid=%d,euid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, $uid, $euid);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// 这样设置是不行的
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">// 为啥不行？
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">// Set the effective user ID of the current process. This is a privileged function and needs appropriate privileges (usually root) on the system to be able to perform this function.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">posix_setuid</span>($uid);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">posix_seteuid</span>($euid);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$uid <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_getuid</span>();
</span></span><span style="display:flex;"><span>$euid <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_geteuid</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;uid=%d,euid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, $uid, $euid);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">posix_access</span>($file,<span style="color:#a6e22e">POSIX_W_OK</span>)){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;我能修改...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span>    $fd <span style="color:#f92672">=</span> <span style="color:#a6e22e">fopen</span>($file,<span style="color:#e6db74">&#34;a&#34;</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fwrite</span>($fd,<span style="color:#e6db74">&#34;php is the best ?</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fclose</span>($fd);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}<span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;我不能修改此文件...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p><a href="https://www.php.net/manual/zh/function.posix-access.php">posix_access</a>/<a href="https://man7.org/linux/man-pages/man2/access.2.html">access</a> 检查用户是否对指定文件拥有某个权限。</p>
<p>提权前：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$ php demo10.php
</span></span><span style="display:flex;"><span>uid<span style="color:#f92672">=</span>1000,euid<span style="color:#f92672">=</span><span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span>uid<span style="color:#f92672">=</span>1000,euid<span style="color:#f92672">=</span><span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span>我不能修改此文件...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$ cat pwd.txt
</span></span></code></pre></div><p><code>chmod u+s /usr/bin/php</code> 提权后：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$ php demo10.php
</span></span><span style="display:flex;"><span>uid<span style="color:#f92672">=</span>1000,euid<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>uid<span style="color:#f92672">=</span>0,euid<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>我能修改...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$ cat pwd.txt 
</span></span><span style="display:flex;"><span>php is the best ?
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>3-5多进程编写</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-5%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E5%86%99/</link>
      <pubDate>Mon, 07 Mar 2022 12:15:30 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-5%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E5%86%99/</guid>
      <description>多进程编写需要清楚的几个问题 创建了几个进程？
每个进程 $count 是多少？
每个进程从哪个地方开始运行代码的？
fork 之后，每个进程的变量 $i, $count 的值是多少 ？
每个进程运行到哪一行语句结束？
示例一： 代码 &amp;lt;?php $count = 10; for ($i = 0; $i &amp;lt; 2; $i++){ $pid = pcntl_fork(); // step1-1 parent 创建子进程 child-1: count = 10, i = 0 // step3-1 cpu 调度 parent 创建子进程 child-2: count = 100, i = 1 // step5-1 cpu 调度 child-1 创建子进程 child-3: count = 11, i = 1 if ($pid == 0){ $count += 1; // step1-2 child-1 执行：count = 11, i = 1 // step4 child-2 执行: count = 101, i = 2 // child-2 最终结果：count = 101 // step6 child-3 执行：count = 12, i = 2 } else { $count *= 10; // step2 cpu 调度 parent：count = 100, i = 1 // step3-2 cpu 调度 parent：count = 1000, i = 2 for循环退出 // parent 最终结果：count = 1000 // step5-2 cpu 调度 child-1：count = 110, i = 2 // child-1 最终结果：count = 110 } } while(1){ fprintf(STDOUT, &amp;#34;pid=%d,count=%d\n&amp;#34;, posix_getpid(), $count); sleep(3); } 分析： step1-1 parent 创建子进程 child-1：count = 10, i = 0</description>
      <content:encoded><![CDATA[<h2 id="多进程编写需要清楚的几个问题">多进程编写需要清楚的几个问题</h2>
<ol>
<li>
<p>创建了几个进程？</p>
</li>
<li>
<p>每个进程 $count 是多少？</p>
</li>
<li>
<p>每个进程从哪个地方开始运行代码的？</p>
</li>
<li>
<p>fork 之后，每个进程的变量 $i, $count 的值是多少 ？</p>
</li>
<li>
<p>每个进程运行到哪一行语句结束？</p>
</li>
</ol>
<h3 id="示例一">示例一：</h3>
<h4 id="代码">代码</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$count <span style="color:#f92672">=</span> <span style="color:#ae81ff">10</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> ($i <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>; $i <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">2</span>; $i<span style="color:#f92672">++</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// step1-1  parent           创建子进程 child-1: count = 10, i = 0
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e">// step3-1  cpu 调度 parent  创建子进程 child-2: count = 100, i = 1
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e">// step5-1  cpu 调度 child-1 创建子进程 child-3: count = 11,  i = 1
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        $count <span style="color:#f92672">+=</span> <span style="color:#ae81ff">1</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// step1-2 child-1 执行：count = 11,   i = 1
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">// step4   child-2 执行: count = 101,  i = 2
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">//         child-2 最终结果：count = 101
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">// step6   child-3 执行：count = 12,   i = 2 
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    } <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        $count <span style="color:#f92672">*=</span> <span style="color:#ae81ff">10</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// step2   cpu 调度 parent：count = 100,   i = 1
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">// step3-2 cpu 调度 parent：count = 1000,  i = 2     for循环退出
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">//         parent 最终结果：count = 1000
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">// step5-2 cpu 调度 child-1：count = 110,    i = 2
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">//         child-1 最终结果：count = 110
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span>(<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid=%d,count=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), $count);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">3</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h4 id="分析">分析：</h4>
<ul>
<li>
<p>step1-1  parent  创建子进程 child-1：count = 10,     i = 0</p>
</li>
<li>
<p>step1-2  child-1 执行：count = 11,     i = 1</p>
</li>
<li>
<p>step2    cpu 调度 parent：count = 100,    i = 1</p>
</li>
<li>
<p>step3-1  cpu 调度 parent  创建子进程 child-2: count = 100, i = 1</p>
</li>
<li>
<p>step3-2 cpu 调度 parent：count = 1000,  i = 2 for循环退出</p>
<p>parent 最终结果：count=1000</p>
</li>
<li>
<p>step4   child-2 执行: count = 101,  i = 2</p>
<p>child-2 最终结果：count = 101</p>
</li>
<li>
<p>step5-1 cpu 调度 child-1 创建子进程 child-3: count = 11,  i = 1</p>
</li>
<li>
<p>step5-2 cpu 调度 child-1：count = 110,    i = 2</p>
<p>child-1 最终结果：count = 110</p>
</li>
<li>
<p>step6   child-3 执行：count = 12,   i = 2</p>
</li>
</ul>
<h4 id="运行结果">运行结果：</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>1801,count<span style="color:#f92672">=</span><span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>1803,count<span style="color:#f92672">=</span><span style="color:#ae81ff">101</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>1802,count<span style="color:#f92672">=</span><span style="color:#ae81ff">110</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>1804,count<span style="color:#f92672">=</span><span style="color:#ae81ff">12</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span></code></pre></div><h4 id="进程间关系">进程间关系：</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>    ├─bash,80
</span></span><span style="display:flex;"><span>    │   └─php,1801 demo9.php
</span></span><span style="display:flex;"><span>    │       ├─php,1802 demo9.php
</span></span><span style="display:flex;"><span>    │       │   └─php,1804 demo9.php
</span></span><span style="display:flex;"><span>    │       └─php,1803 demo9.php
</span></span></code></pre></div><h3 id="示例二">示例二</h3>
<h4 id="代码-1">代码</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$count <span style="color:#f92672">=</span> <span style="color:#ae81ff">10</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> ($i <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>; $i <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">2</span>; $i<span style="color:#f92672">++</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// step1-1  parent           创建子进程 child-1: count = 10, i = 0
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e">// step3-1 cpu 调度 child-1  创建子进程 child-2： count = 11,   i = 1
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        $count <span style="color:#f92672">+=</span> <span style="color:#ae81ff">1</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// step1-2 child-1 执行：count = 11,   i = 1
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">// step4   cpu 调度 child-2 创建子进程 child-2： count = 12,   i = 2
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    } <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        $count <span style="color:#f92672">*=</span> <span style="color:#ae81ff">10</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">break</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// step2   cpu 调度 parent：count = 100, i = 0  break 跳出循环
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">//         parent 最终结果：count = 100
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// step3-2 cpu 调度 child-1：count = 110, i = 2  break 跳出循环
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">//         parent 最终结果：count = 110
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span>(<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid=%d,count=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), $count);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">3</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h4 id="分析-1">分析</h4>
<ul>
<li>
<p>step1-1  parent           创建子进程 child-1: count = 10, i = 0</p>
</li>
<li>
<p>step1-2 child-1 执行：count = 11,   i = 1</p>
</li>
<li>
<p>step2   cpu 调度 parent：count = 100, i = 0  break 跳出循环</p>
<p>parent 最终结果：count = 100</p>
</li>
<li>
<p>step3-1 cpu 调度 child-1  创建子进程 child-2： count = 11,   i = 1</p>
</li>
<li>
<p>step3-2 cpu 调度 child-1：count = 110, i = 2  break 跳出循环</p>
<p>parent 最终结果：count = 110</p>
</li>
<li>
<p>step4   cpu 调度 child-2 创建子进程 child-2： count = 12,   i = 2</p>
</li>
</ul>
<h4 id="运行结果-1">运行结果</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>1962,count<span style="color:#f92672">=</span><span style="color:#ae81ff">100</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>1963,count<span style="color:#f92672">=</span><span style="color:#ae81ff">110</span>
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>1964,count<span style="color:#f92672">=</span><span style="color:#ae81ff">12</span>
</span></span></code></pre></div><h4 id="进程间关系-1">进程间关系</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>  ├─bash,80
</span></span><span style="display:flex;"><span>  │   └─php,1962 demo9.php
</span></span><span style="display:flex;"><span>  │       └─php,1963 demo9.php
</span></span><span style="display:flex;"><span>  │           └─php,1964 demo9.php
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>3-4进程调度</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-4%E8%BF%9B%E7%A8%8B%E8%B0%83%E5%BA%A6/</link>
      <pubDate>Sat, 05 Mar 2022 22:20:09 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-4%E8%BF%9B%E7%A8%8B%E8%B0%83%E5%BA%A6/</guid>
      <description>pcntl_fork 创建了一个子进程，这个时候就会存在父进程和子进程，cpu先调度哪个进程？
pcntl 封装了可以控制进程优先级的函数 pcntl_setpriority（setpriority），修改任意进程的优先级，pcntl_getpriority（getpriority）获取任意进程的优先级。
进程的观察命令：top
top - 23:28:59 up 13:13, 1 user, load average: 0.30, 1.20, 1.61 任务: 386 total, 1 running, 385 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.8 us, 1.7 sy, 0.1 ni, 95.3 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st MiB Mem : 5855.6 total, 664.6 free, 3875.4 used, 1315.7 buff/cache MiB Swap: 976.0 total, 364.7 free, 611.3 used. 1379.6 avail Mem 进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND 7305 wanger 20 0 4956504 454380 52432 S 4.</description>
      <content:encoded><![CDATA[<p><a href="https://www.php.net/manual/zh/function.pcntl-fork.php">pcntl_fork</a> 创建了一个子进程，这个时候就会存在父进程和子进程，cpu先调度哪个进程？</p>
<p>pcntl 封装了可以控制进程优先级的函数 <a href="https://www.php.net/manual/zh/function.pcntl-setpriority">pcntl_setpriority</a>（<a href="https://man7.org/linux/man-pages/man2/setpriority.2.html">setpriority</a>），修改任意进程的优先级，<a href="https://www.php.net/manual/zh/function.pcntl-getpriority.php">pcntl_getpriority</a>（<a href="https://man7.org/linux/man-pages/man2/getpriority.2.html">getpriority</a>）获取任意进程的优先级。</p>
<p>进程的观察命令：<a href="https://man7.org/linux/man-pages/man1/top.1.html">top</a></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>top - 23:28:59 up 13:13,  <span style="color:#ae81ff">1</span> user,  load average: 0.30, 1.20, 1.61
</span></span><span style="display:flex;"><span>任务: <span style="color:#ae81ff">386</span> total,   <span style="color:#ae81ff">1</span> running, <span style="color:#ae81ff">385</span> sleeping,   <span style="color:#ae81ff">0</span> stopped,   <span style="color:#ae81ff">0</span> zombie
</span></span><span style="display:flex;"><span>%Cpu<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span>:  2.8 us,  1.7 sy,  0.1 ni, 95.3 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
</span></span><span style="display:flex;"><span>MiB Mem :   5855.6 total,    664.6 free,   3875.4 used,   1315.7 buff/cache
</span></span><span style="display:flex;"><span>MiB Swap:    976.0 total,    364.7 free,    611.3 used.   1379.6 avail Mem 
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>进程号 USER      PR  NI    VIRT    RES    SHR    %CPU  %MEM     TIME+ COMMAND                                                                        
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">7305</span>  wanger    <span style="color:#ae81ff">20</span>   <span style="color:#ae81ff">0</span>  <span style="color:#ae81ff">4956504</span>   <span style="color:#ae81ff">454380</span> <span style="color:#ae81ff">52432</span> S  4.6   7.6  28:24.62 gnome-shell
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span></code></pre></div><p>在 Linux 系统中，一般把进程/线程称为任务Task。</p>
<ul>
<li>
<p>PR priority 进程的优先级</p>
</li>
<li>
<p>NI nice 进程的nice值 nice值越小，则优先级越高</p>
</li>
</ul>
<p>进程的nice越小，则进程的PR优先级越高，cpu就先运行这个进程。</p>
<p>示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$nice <span style="color:#f92672">=</span> $argv[<span style="color:#ae81ff">1</span>];
</span></span><span style="display:flex;"><span>$start <span style="color:#f92672">=</span> <span style="color:#a6e22e">time</span>();
</span></span><span style="display:flex;"><span>$count <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> ($pid <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;child process pid=%d,nice=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), <span style="color:#a6e22e">pcntl_getpriority</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">pcntl_setpriority</span>($nice, <span style="color:#a6e22e">getmypid</span>(), <span style="color:#a6e22e">PRIO_PROCESS</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;child process pid=%d,nice=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), <span style="color:#a6e22e">pcntl_getpriority</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        $count<span style="color:#f92672">++</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">time</span>() <span style="color:#f92672">-</span> $start <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">5</span>){
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">break</span>;
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}<span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;parent process pid=%d,nice=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), <span style="color:#a6e22e">pcntl_getpriority</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// pcntl_setpriority($nice, getmypid(), PRIO_PROCESS);
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;parent process pid=%d,nice=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), <span style="color:#a6e22e">pcntl_getpriority</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        $count<span style="color:#f92672">++</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">time</span>() <span style="color:#f92672">-</span> $start <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">5</span>){
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">break</span>;
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid=%d,nice=%d,count=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), <span style="color:#a6e22e">pcntl_getpriority</span>(), $count);
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>3-3进程exec</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-3%E8%BF%9B%E7%A8%8Bexec/</link>
      <pubDate>Sat, 05 Mar 2022 12:18:18 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-3%E8%BF%9B%E7%A8%8Bexec/</guid>
      <description>pcntl_exec 函数用来执行一个程序，它内部的系统调用是 execve
一般的用法是父进程先创建一个子进程，然后子进程调用这个函数,正文段（代码段）+ 数据段会被新程序替换，它的一些属性会继承父进程，PID并没有发生变化。
execve() executes the program referred to by pathname. This causes the program that is currently being run by the calling process to be replaced with a new program, with newly initialized stack, heap, and (initialized and uninitialized) data segments.
pathname must be either a binary executable, or a script starting with a line of the form:
#!interpreter [optional-arg]
——execve
示例：
demo7.php
&amp;lt;?php function showID($str) { $pid = posix_getpid(); fprintf( STDOUT, &amp;#34;%s pid=%d,ppid=%d,gpid=%d,sid=%d,uid=%d,gid=%d\n&amp;#34;, $str, $pid, posix_getppid(), posix_getpgrp(), posix_getsid($pid), posix_getuid(), posix_getgid() ); } showID(&amp;#34;parent:&amp;#34;); $pid = pcntl_fork(); if (0 == $pid) { pcntl_exec(&amp;#39;/usr/bin/php&amp;#39;, [&amp;#39;demo2.</description>
      <content:encoded><![CDATA[<p><a href="https://www.php.net/manual/zh/function.pcntl-exec">pcntl_exec</a> 函数用来执行一个程序，它内部的系统调用是 <a href="https://man7.org/linux/man-pages/man2/execve.2.html">execve</a></p>
<p>一般的用法是父进程先创建一个子进程，然后子进程调用这个函数,正文段（代码段）+ 数据段会被新程序替换，它的一些属性会继承父进程，PID并没有发生变化。</p>
<blockquote>
<p>execve() executes the program referred to by pathname.  This causes the program that is currently being run by the calling process to be replaced with a new program, with newly initialized stack, heap, and (initialized and uninitialized) data segments.</p>
<p>pathname must be either a binary executable, or a script starting
with a line of the form:</p>
<p>#!interpreter [optional-arg]</p>
<p>——<cite><a href="https://man7.org/linux/man-pages/man2/execve.2.html">execve</a></cite></p>
</blockquote>
<p>示例：</p>
<p><code>demo7.php</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">showID</span>($str)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_getpid</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">STDOUT</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;%s pid=%d,ppid=%d,gpid=%d,sid=%d,uid=%d,gid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,
</span></span><span style="display:flex;"><span>        $str,
</span></span><span style="display:flex;"><span>        $pid,
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">posix_getppid</span>(),
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">posix_getpgrp</span>(),
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">posix_getsid</span>($pid),
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">posix_getuid</span>(),
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">posix_getgid</span>()
</span></span><span style="display:flex;"><span>    );
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">showID</span>(<span style="color:#e6db74">&#34;parent:&#34;</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (<span style="color:#ae81ff">0</span> <span style="color:#f92672">==</span> $pid) {
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">pcntl_exec</span>(<span style="color:#e6db74">&#39;/usr/bin/php&#39;</span>, [<span style="color:#e6db74">&#39;demo2.php&#39;</span>, <span style="color:#e6db74">&#39;a&#39;</span>, <span style="color:#e6db74">&#39;b&#39;</span>, <span style="color:#e6db74">&#39;c&#39;</span>]);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">echo</span> <span style="color:#e6db74">&#34;hello world&#34;</span>; <span style="color:#75715e">// 不会执行，
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$exitPid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_wait</span>($status);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> ($exitPid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;exit pid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,$exitPid);
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p><code>demo2.php</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">showID</span>($str)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_getpid</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">STDOUT</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;%s pid=%d,ppid=%d,gpid=%d,sid=%d,uid=%d,gid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,
</span></span><span style="display:flex;"><span>        $str,
</span></span><span style="display:flex;"><span>        $pid,
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">posix_getppid</span>(),
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">posix_getpgrp</span>(),
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">posix_getsid</span>($pid),
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">posix_getuid</span>(),
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">posix_getgid</span>()
</span></span><span style="display:flex;"><span>    );
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">showId</span>(<span style="color:#e6db74">&#39;child:&#39;</span>);
</span></span></code></pre></div><p>运行结果：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ php demo7.php 
</span></span><span style="display:flex;"><span>parent: pid<span style="color:#f92672">=</span>1465,ppid<span style="color:#f92672">=</span>59,gpid<span style="color:#f92672">=</span>1465,sid<span style="color:#f92672">=</span>59,uid<span style="color:#f92672">=</span>1000,gid<span style="color:#f92672">=</span><span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span>child: pid<span style="color:#f92672">=</span>1466,ppid<span style="color:#f92672">=</span>1465,gpid<span style="color:#f92672">=</span>1465,sid<span style="color:#f92672">=</span>59,uid<span style="color:#f92672">=</span>1000,gid<span style="color:#f92672">=</span><span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span>exit pid<span style="color:#f92672">=</span><span style="color:#ae81ff">1466</span>
</span></span></code></pre></div><p>通过 <code>strace -f -s 65500 -o demo7.log php demo7.php</code> 查看系统调用：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#ae81ff">2227</span>  execve<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;/usr/bin/php&#34;</span>, <span style="color:#f92672">[</span><span style="color:#e6db74">&#34;php&#34;</span>, <span style="color:#e6db74">&#34;demo7.php&#34;</span><span style="color:#f92672">]</span>, 0x7ffeba4701b0 /* <span style="color:#ae81ff">53</span> vars */<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>// 创建子进程
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2227</span>  clone<span style="color:#f92672">(</span>child_stack<span style="color:#f92672">=</span>NULL, flags<span style="color:#f92672">=</span>CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr<span style="color:#f92672">=</span>0x7f08921d7c50<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">2228</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2227</span>  getpid<span style="color:#f92672">()</span>                          <span style="color:#f92672">=</span> <span style="color:#ae81ff">2227</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2227</span>  getppid<span style="color:#f92672">()</span>                         <span style="color:#f92672">=</span> <span style="color:#ae81ff">2225</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2227</span>  getpgrp<span style="color:#f92672">()</span>                         <span style="color:#f92672">=</span> <span style="color:#ae81ff">2225</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2227</span>  getsid<span style="color:#f92672">(</span>2227<span style="color:#f92672">)</span>                      <span style="color:#f92672">=</span> <span style="color:#ae81ff">59</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2227</span>  getuid<span style="color:#f92672">()</span>                          <span style="color:#f92672">=</span> <span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2227</span>  getgid<span style="color:#f92672">()</span>                          <span style="color:#f92672">=</span> <span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2227</span>  write<span style="color:#f92672">(</span>1, <span style="color:#e6db74">&#34;parent: pid=2227,ppid=2225,gpid=2225,sid=59,uid=1000,gid=1000\n&#34;</span>, 62<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">62</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>// 运行 demo2.php
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2228</span>  execve<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;/usr/bin/php&#34;</span>, <span style="color:#f92672">[</span><span style="color:#e6db74">&#34;/usr/bin/php&#34;</span>, <span style="color:#e6db74">&#34;demo2.php&#34;</span>, <span style="color:#e6db74">&#34;a&#34;</span>, <span style="color:#e6db74">&#34;b&#34;</span>, <span style="color:#e6db74">&#34;c&#34;</span><span style="color:#f92672">]</span>, 0x555801030e70 /* <span style="color:#ae81ff">53</span> vars */<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2228</span>  getpid<span style="color:#f92672">()</span>                          <span style="color:#f92672">=</span> <span style="color:#ae81ff">2228</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2228</span>  getppid<span style="color:#f92672">()</span>                         <span style="color:#f92672">=</span> <span style="color:#ae81ff">2227</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2228</span>  getpgrp<span style="color:#f92672">()</span>                         <span style="color:#f92672">=</span> <span style="color:#ae81ff">2225</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2228</span>  getsid<span style="color:#f92672">(</span>2228<span style="color:#f92672">)</span>                      <span style="color:#f92672">=</span> <span style="color:#ae81ff">59</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2228</span>  getuid<span style="color:#f92672">()</span>                          <span style="color:#f92672">=</span> <span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2228</span>  getgid<span style="color:#f92672">()</span>                          <span style="color:#f92672">=</span> <span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">2228</span>  write<span style="color:#f92672">(</span>1, <span style="color:#e6db74">&#34;child: pid=2228,ppid=2227,gpid=2225,sid=59,uid=1000,gid=1000\n&#34;</span>, 61<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">61</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>3-2进程退出和回收</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-2%E8%BF%9B%E7%A8%8B%E9%80%80%E5%87%BA%E5%92%8C%E5%9B%9E%E6%94%B6/</link>
      <pubDate>Fri, 04 Mar 2022 15:58:53 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-2%E8%BF%9B%E7%A8%8B%E9%80%80%E5%87%BA%E5%92%8C%E5%9B%9E%E6%94%B6/</guid>
      <description>进程的退出 PHP 进程退出的几种情况 运行到最后一行语句
运行时遇到 return
运行时遇到 exit() 函数的时候
程序异常的时候
进程接收到中断信号
正常结束、异常结束（跟信号有关），不管以何种方式退出，都有一个终止状态码。
僵尸进程 僵尸进程（zombie process）：指子进程已结束，但是父进程还没有使用 wait（pcntl_wait）/pcntl_waitpid（waitpid） 来回收。
进程结束时并不会真的退出，还会驻留在内存中，父进程需要通过 wait 「pcntl_wait」函数来获取进程的终止状态码，同时该函数会释放终止进程的内存空间。否则容易造成僵尸进程过多，占用大量内存空间。
wait 函数挂起当前进程的执行直到一个子进程退出或接收到一个信号要求中断当前进程或调用一个信号处理函数。如果一个子进程在调用此函数时已经退出（俗称僵尸进程），此函数立刻返回。子进程使用的所有系统资源将被释放。关于 wait 在您系统上工作的详细规范请查看您系统的 wait（2）手册。
——pcntl_wait
示例：
&amp;lt;?php $pid = pcntl_fork(); if (0 === $pid) { fprintf(STDOUT, &amp;#34;我是子进程，pid = %d，运行完我就没事啦。\n&amp;#34;, posix_getpid()); } else { fprintf(STDOUT, &amp;#34;我是父进程，pid = %d。\n&amp;#34;, posix_getpid()); sleep(1); while (1) { # code... ; } } 运行结果：
php demo5.php 我是父进程，pid = 1282。 我是子进程，pid = 1283，运行完我就没事啦。 进程状态：
laradock@3a6c2da5a07b:/var/www$ ps exj PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 807 1282 1282 807 pts/2 1282 R+ 1000 0:15 php demo5.</description>
      <content:encoded><![CDATA[<h2 id="进程的退出">进程的退出</h2>
<h3 id="php-进程退出的几种情况">PHP 进程退出的几种情况</h3>
<ol>
<li>
<p>运行到最后一行语句</p>
</li>
<li>
<p>运行时遇到 <code>return</code></p>
</li>
<li>
<p>运行时遇到 <code>exit()</code> 函数的时候</p>
</li>
<li>
<p>程序异常的时候</p>
</li>
<li>
<p>进程接收到中断信号</p>
</li>
</ol>
<p>正常结束、异常结束（跟信号有关），不管以何种方式退出，都有一个终止状态码。</p>
<h3 id="僵尸进程">僵尸进程</h3>
<p>僵尸进程（zombie process）：指子进程已结束，但是父进程还没有使用 <a href="https://man7.org/linux/man-pages/man2/wait.2.html">wait</a>（<a href="https://www.php.net/manual/zh/function.pcntl-wait">pcntl_wait</a>）/<a href="https://www.php.net/manual/zh/function.pcntl-waitpid.php">pcntl_waitpid</a>（<a href="https://man7.org/linux/man-pages/man2/waitpid.2.html">waitpid</a>） 来回收。</p>
<p>进程结束时并不会真的退出，还会驻留在内存中，父进程需要通过 <a href="https://man7.org/linux/man-pages/man2/wait.2.html">wait</a> 「<a href="https://www.php.net/manual/zh/function.pcntl-wait">pcntl_wait</a>」函数来获取进程的终止状态码，同时该函数会释放终止进程的内存空间。否则容易造成僵尸进程过多，占用大量内存空间。</p>
<blockquote>
<p>wait 函数挂起当前进程的执行直到一个子进程退出或接收到一个信号要求中断当前进程或调用一个信号处理函数。如果一个子进程在调用此函数时已经退出（俗称僵尸进程），此函数立刻返回。子进程使用的所有系统资源将被释放。关于 wait 在您系统上工作的详细规范请查看您系统的 <a href="https://man7.org/linux/man-pages/man2/wait.2.html">wait</a>（2）手册。</p>
<p>——<cite><a href="https://www.php.net/manual/zh/function.pcntl-wait">pcntl_wait</a></cite></p>
</blockquote>
<p>示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (<span style="color:#ae81ff">0</span> <span style="color:#f92672">===</span> $pid) {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;我是子进程，pid = %d，运行完我就没事啦。</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>());
</span></span><span style="display:flex;"><span>} <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;我是父进程，pid = %d。</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>());
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>) {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># code...
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        ;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>运行结果：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>php demo5.php
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>我是父进程，pid <span style="color:#f92672">=</span> 1282。
</span></span><span style="display:flex;"><span>我是子进程，pid <span style="color:#f92672">=</span> 1283，运行完我就没事啦。
</span></span></code></pre></div><p>进程状态：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>laradock@3a6c2da5a07b:/var/www$ ps exj
</span></span><span style="display:flex;"><span>   PPID     PID    PGID     SID TTY        TPGID STAT   UID   TIME COMMAND
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">807</span>    <span style="color:#ae81ff">1282</span>    <span style="color:#ae81ff">1282</span>     <span style="color:#ae81ff">807</span> pts/2       <span style="color:#ae81ff">1282</span> R+    <span style="color:#ae81ff">1000</span>   0:15 php demo5.php LC_ALL<span style="color:#f92672">=</span>en_US.UTF-8 NVM_DIR<span style="color:#f92672">=</span>/home/laradock/.nvm LS_COLORS<span style="color:#f92672">=</span>no<span style="color:#f92672">=</span>00:fi<span style="color:#f92672">=</span>00:
</span></span><span style="display:flex;"><span>   <span style="color:#ae81ff">1282</span>    <span style="color:#ae81ff">1283</span>    <span style="color:#ae81ff">1282</span>     <span style="color:#ae81ff">807</span> pts/2       <span style="color:#ae81ff">1282</span> Z+    <span style="color:#ae81ff">1000</span>   0:00 <span style="color:#f92672">[</span>php<span style="color:#f92672">]</span> &lt;defunct&gt; // 僵尸进程
</span></span></code></pre></div><h3 id="进程产生的文件">进程产生的文件</h3>
<p>一个进程运行时，会在 <code>/proc/PID</code> 目录产生文件。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>laradock@3a6c2da5a07b:/proc/1282$ ll
</span></span><span style="display:flex;"><span>total <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">9</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 ./
</span></span><span style="display:flex;"><span>dr-xr-xr-x <span style="color:#ae81ff">447</span> root     root     <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 07:56 ../
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 arch_status
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">2</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 attr/
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 autogroup
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 auxv
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 cgroup
</span></span><span style="display:flex;"><span>--w-------   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 clear_refs
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 cmdline
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 comm
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 coredump_filter
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 cpu_resctrl_groups
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 cpuset
</span></span><span style="display:flex;"><span>lrwxrwxrwx   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 cwd -&gt; /var/www/hugoBlog/content/posts/dev/liunx下php多进程编程/code/
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 environ
</span></span><span style="display:flex;"><span>lrwxrwxrwx   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 exe -&gt; /usr/bin/php7.4*
</span></span><span style="display:flex;"><span>dr-x------   <span style="color:#ae81ff">2</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 fd/
</span></span><span style="display:flex;"><span>dr-x------   <span style="color:#ae81ff">2</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 fdinfo/
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 gid_map
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 io
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 limits
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 loginuid
</span></span><span style="display:flex;"><span>dr-x------   <span style="color:#ae81ff">2</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 map_files/
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 maps
</span></span><span style="display:flex;"><span>-rw-------   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 mem
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 mountinfo
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 mounts
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 mountstats
</span></span><span style="display:flex;"><span>dr-xr-xr-x  <span style="color:#ae81ff">53</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 net/
</span></span><span style="display:flex;"><span>dr-x--x--x   <span style="color:#ae81ff">2</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 ns/
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 numa_maps
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 oom_adj
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 oom_score
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 oom_score_adj
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 pagemap
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 patch_state
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 personality
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 projid_map
</span></span><span style="display:flex;"><span>lrwxrwxrwx   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 root -&gt; //
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 sched
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 schedstat
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 sessionid
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 setgroups
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 smaps
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 smaps_rollup
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 stack
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 stat
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 statm
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 status
</span></span><span style="display:flex;"><span>-r--------   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 syscall
</span></span><span style="display:flex;"><span>dr-xr-xr-x   <span style="color:#ae81ff">3</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 task/
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 timens_offsets
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 timers
</span></span><span style="display:flex;"><span>-rw-rw-rw-   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 timerslack_ns
</span></span><span style="display:flex;"><span>-rw-r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 uid_map
</span></span><span style="display:flex;"><span>-r--r--r--   <span style="color:#ae81ff">1</span> laradock laradock <span style="color:#ae81ff">0</span> Mar  <span style="color:#ae81ff">4</span> 09:00 wchan
</span></span></code></pre></div><p>如果我们开发一个守护进程的web项目，开启了大量的子进程，并且没有回收，那么服务器的内存和存储空间可能会被挤满，所以必须回收。</p>
<h2 id="进程的回收">进程的回收</h2>
<h3 id="调用-pcntl_wait-函数会产生的几种情况">调用 <code>pcntl_wait</code> 函数会产生的几种情况</h3>
<ol>
<li>
<p>如果没有子进程，可能会返回错误</p>
</li>
<li>
<p>如果子进程还没有结束，就会阻塞父进程</p>
<p>示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (<span style="color:#ae81ff">0</span> <span style="color:#f92672">===</span> $pid) {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;我是子进程，pid = %d，运行完我就没事啦。</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>());
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>) {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># code...
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// exit(256); // 0 = 成功、-1 = 失败（返回255）、最大值 255、超过 255 返回 0
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>} <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;我是父进程，pid = %d。</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    $exitPid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_wait</span>($status);
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($exitPid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;pid=%d,子进程已经挂了，它的终止状态码：%d,并且已经完全释放了它所占用的资源...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, $pid, <span style="color:#a6e22e">pcntl_wexitstatus</span>($status));
</span></span><span style="display:flex;"><span>    }<span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;wait error...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">while</span>(<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;我在打印...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">3</span>);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>运行结果：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>laradock@3a6c2da5a07b:$ php demo5.php
</span></span><span style="display:flex;"><span>我是父进程，pid <span style="color:#f92672">=</span> 1652。
</span></span><span style="display:flex;"><span>我是子进程，pid <span style="color:#f92672">=</span> 1653，运行完我就没事啦
</span></span><span style="display:flex;"><span>... // 子进程没结束，父进程被阻塞
</span></span></code></pre></div><p>进程状态：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>laradock@3a6c2da5a07b:/proc$ ps -exj
</span></span><span style="display:flex;"><span>    PPID     PID    PGID     SID TTY        TPGID STAT   UID   TIME COMMAND
</span></span><span style="display:flex;"><span>       <span style="color:#ae81ff">0</span>     <span style="color:#ae81ff">333</span>      <span style="color:#ae81ff">333</span>     <span style="color:#ae81ff">333</span> pts/1       <span style="color:#ae81ff">1655</span> Ss    <span style="color:#ae81ff">1000</span>   0:00 bash PATH<span style="color:#f92672">=</span>/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado
</span></span><span style="display:flex;"><span>       <span style="color:#ae81ff">0</span>     <span style="color:#ae81ff">807</span>      <span style="color:#ae81ff">807</span>     <span style="color:#ae81ff">807</span> pts/2       <span style="color:#ae81ff">1652</span> Ss    <span style="color:#ae81ff">1000</span>   0:00 bash PATH<span style="color:#f92672">=</span>/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado
</span></span><span style="display:flex;"><span>     <span style="color:#ae81ff">807</span>     <span style="color:#ae81ff">1652</span>     <span style="color:#ae81ff">1652</span>    <span style="color:#ae81ff">807</span> pts/2       <span style="color:#ae81ff">1652</span> S+    <span style="color:#ae81ff">1000</span>   0:00 php demo5.php LC_ALL<span style="color:#f92672">=</span>en_US.UTF-8 NVM_DIR<span style="color:#f92672">=</span>/home/laradock/.nvm LS_COLORS<span style="color:#f92672">=</span>no<span style="color:#f92672">=</span>00:fi<span style="color:#f92672">=</span>00:
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">1652</span>     <span style="color:#ae81ff">1653</span>     <span style="color:#ae81ff">1652</span>    <span style="color:#ae81ff">807</span> pts/2       <span style="color:#ae81ff">1652</span> R+    <span style="color:#ae81ff">1000</span>   0:08 php demo5.php LC_ALL<span style="color:#f92672">=</span>en_US.UTF-8 NVM_DIR<span style="color:#f92672">=</span>/home/laradock/.nvm LS_COLORS<span style="color:#f92672">=</span>no<span style="color:#f92672">=</span>00:fi<span style="color:#f92672">=</span>00:
</span></span></code></pre></div></li>
<li>
<p>给函数传递第三个参数 <code>option</code> 可以让父进程不阻塞</p>
</li>
</ol>
<p>示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (<span style="color:#ae81ff">0</span> <span style="color:#f92672">===</span> $pid) {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;我是子进程，pid = %d，运行完我就没事啦。</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">3</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">exit</span>(<span style="color:#ae81ff">10</span>);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span>(<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;我是父进程，pid = %d。</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    $exitPid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_wait</span>($status, <span style="color:#a6e22e">WNOHANG</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($exitPid <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;pid=%d,子进程已经挂了，它的终止状态码：%d,并且已经完全释放了它所占用的资源...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, $pid, <span style="color:#a6e22e">pcntl_wexitstatus</span>($status));
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">break</span>;
</span></span><span style="display:flex;"><span>    }<span style="color:#66d9ef">else</span> <span style="color:#66d9ef">if</span> (<span style="color:#ae81ff">0</span> <span style="color:#f92672">===</span> $exitPid) {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;我在打印1...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span>    } <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>        $no <span style="color:#f92672">=</span> <span style="color:#a6e22e">posix_errno</span>();
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;wait error... %s</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_strerror</span>($no));
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;我在打印2...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;父进程，pid = %d，结束。</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>());
</span></span></code></pre></div><p>运行结果：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>laradock@3a6c2da5a07b:$ php demo5.php
</span></span><span style="display:flex;"><span>我是父进程，pid <span style="color:#f92672">=</span> 1952。
</span></span><span style="display:flex;"><span>我在打印1...
</span></span><span style="display:flex;"><span>我在打印2...
</span></span><span style="display:flex;"><span>我是子进程，pid <span style="color:#f92672">=</span> 1953，运行完我就没事啦。
</span></span><span style="display:flex;"><span>我是父进程，pid <span style="color:#f92672">=</span> 1952。
</span></span><span style="display:flex;"><span>我在打印1...
</span></span><span style="display:flex;"><span>我在打印2...
</span></span><span style="display:flex;"><span>我是父进程，pid <span style="color:#f92672">=</span> 1952。
</span></span><span style="display:flex;"><span>我在打印1...
</span></span><span style="display:flex;"><span>我在打印2...
</span></span><span style="display:flex;"><span>我是父进程，pid <span style="color:#f92672">=</span> 1952。
</span></span><span style="display:flex;"><span>我在打印1...
</span></span><span style="display:flex;"><span>我在打印2...
</span></span><span style="display:flex;"><span>我是父进程，pid <span style="color:#f92672">=</span> 1952。
</span></span><span style="display:flex;"><span>pid<span style="color:#f92672">=</span>1953,子进程已经挂了，它的终止状态码：10,并且已经完全释放了它所占用的资源...
</span></span><span style="display:flex;"><span>父进程，pid <span style="color:#f92672">=</span> 1952，结束。
</span></span></code></pre></div><h2 id="判断进程的退出方式">判断进程的退出方式</h2>
<p>可以通过函数判断进程的退出方式，获取终止状态码和中断信号编号。</p>
<p><a href="https://www.php.net/manual/zh/function.posix-kill">posix_kill</a>（<a href="https://man7.org/linux/man-pages/man1/kill.1.html">kill</a>）：是用来发送一个中断信号（给进程或者一个进程组）。</p>
<p>示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span> <span style="color:#a6e22e">posix_getpid</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> ($pid<span style="color:#f92672">==</span><span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">while</span>(<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;pid=%d child process do...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,<span style="color:#a6e22e">posix_getpid</span>());
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">2</span>);
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// return;
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    }
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    $pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_wait</span>($status,<span style="color:#a6e22e">WNOHANG</span>);<span style="color:#75715e">//让父进程以非阻塞方式运行
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;exit pid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,$pid);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> ($pid<span style="color:#f92672">&gt;</span><span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// 正常退出
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">pcntl_wifexited</span>($status)){
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;正常退出：exit pid=%d,exit-status=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,$pid,<span style="color:#a6e22e">pcntl_wexitstatus</span>($status));
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">//中断退出
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">else</span> <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">pcntl_wifsignaled</span>($status)){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;中断退出1：exit pid=%d,SIGNUM=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,$pid,<span style="color:#a6e22e">pcntl_wtermsig</span>($status));
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// 一般是发送SIGSTOP SIGTSTP 要让进程停止
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#75715e">// 以阻塞方式回收，才能生效 $pid = pcntl_wait($status,WNOHANG);
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">else</span> <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">pcntl_wifstopped</span>($status)){
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;中断退出2：exit pid=%d,SIGNUM=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,$pid,<span style="color:#a6e22e">pcntl_wstopsig</span>($status));
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>,<span style="color:#e6db74">&#34;PID=%d father process...</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>,<span style="color:#a6e22e">posix_getpid</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">3</span>);
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>中断信号有自己的信号编号和对应的信号名字，信号编号是以非负数值来表示，信号名字是以SIG开头的，可以通过 <code>kill -l</code> 查看中断信号列表。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>3-1进程标识与fork</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-1%E8%BF%9B%E7%A8%8B%E6%A0%87%E8%AF%86%E4%B8%8Efork/</link>
      <pubDate>Mon, 28 Feb 2022 17:02:33 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/3-1%E8%BF%9B%E7%A8%8B%E6%A0%87%E8%AF%86%E4%B8%8Efork/</guid>
      <description>进程标识 一个程序被加载到内存中运行，系统会为这个进程分配相应的标识信息，比如 pid,ppid,uid,euid,pgid,sid,gid,egid&amp;hellip;
进程查看命令 pstree 可看出进程间的关系 父子，兄弟； ps -exj ps -aux ps &amp;hellip; PID PPID PGID UID TTY STAT TIME COMMAND
laradock@3a6c2da5a07b:/var/www$ ps exj PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 0 24 24 24 pts/1 495 Ss 1000 0:00 bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado 24 495 495 24 pts/1 495 R+ 1000 13:37 php demo4.php LC_ALL=en_US.UTF-8 NVM_DIR=/home/laradock/.nvm LS_COLORS=no=00:fi=00: 0 496 496 496 pts/2 1051 Ss 1000 0:00 bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado 496 1051 1051 496 pts/2 1051 R+ 1000 0:00 ps exj LC_ALL=en_US.</description>
      <content:encoded><![CDATA[<h2 id="进程标识">进程标识</h2>
<p>一个程序被加载到内存中运行，系统会为这个进程分配相应的标识信息，比如 pid,ppid,uid,euid,pgid,sid,gid,egid&hellip;</p>
<h3 id="进程查看命令">进程查看命令</h3>
<ul>
<li>pstree    可看出进程间的关系 父子，兄弟；</li>
<li>ps -exj</li>
<li>ps -aux</li>
<li>ps</li>
<li>&hellip;</li>
</ul>
<p>PID PPID PGID UID TTY STAT TIME COMMAND</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>laradock@3a6c2da5a07b:/var/www$ ps exj
</span></span><span style="display:flex;"><span>   PPID     PID    PGID     SID TTY        TPGID STAT   UID   TIME COMMAND
</span></span><span style="display:flex;"><span>      <span style="color:#ae81ff">0</span>      <span style="color:#ae81ff">24</span>      <span style="color:#ae81ff">24</span>      <span style="color:#ae81ff">24</span> pts/1        <span style="color:#ae81ff">495</span> Ss    <span style="color:#ae81ff">1000</span>   0:00 bash PATH<span style="color:#f92672">=</span>/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado
</span></span><span style="display:flex;"><span>     <span style="color:#ae81ff">24</span>     <span style="color:#ae81ff">495</span>     <span style="color:#ae81ff">495</span>      <span style="color:#ae81ff">24</span> pts/1        <span style="color:#ae81ff">495</span> R+    <span style="color:#ae81ff">1000</span>  13:37 php demo4.php LC_ALL<span style="color:#f92672">=</span>en_US.UTF-8 NVM_DIR<span style="color:#f92672">=</span>/home/laradock/.nvm LS_COLORS<span style="color:#f92672">=</span>no<span style="color:#f92672">=</span>00:fi<span style="color:#f92672">=</span>00:
</span></span><span style="display:flex;"><span>      <span style="color:#ae81ff">0</span>     <span style="color:#ae81ff">496</span>     <span style="color:#ae81ff">496</span>     <span style="color:#ae81ff">496</span> pts/2       <span style="color:#ae81ff">1051</span> Ss    <span style="color:#ae81ff">1000</span>   0:00 bash PATH<span style="color:#f92672">=</span>/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">496</span>    <span style="color:#ae81ff">1051</span>    <span style="color:#ae81ff">1051</span>     <span style="color:#ae81ff">496</span> pts/2       <span style="color:#ae81ff">1051</span> R+    <span style="color:#ae81ff">1000</span>   0:00 ps exj LC_ALL<span style="color:#f92672">=</span>en_US.UTF-8 NVM_DIR<span style="color:#f92672">=</span>/home/laradock/.nvm LS_COLORS<span style="color:#f92672">=</span>no<span style="color:#f92672">=</span>00:fi<span style="color:#f92672">=</span>00:di<span style="color:#f92672">=</span>01;<span style="color:#ae81ff">3</span>
</span></span></code></pre></div><h3 id="进程状态码">进程状态码</h3>
<ul>
<li>D    uninterruptible sleep (usually IO)</li>
<li>I    Idle kernel thread</li>
<li>R    running or runnable (on run queue)</li>
<li>S    interruptible sleep (waiting for an event to complete)</li>
<li>T    stopped by job control signal</li>
<li>t    stopped by debugger during the tracing</li>
<li>W    paging (not valid since the 2.6.xx kernel)</li>
<li>X    dead (should never be seen)</li>
<li>Z    defunct (&ldquo;zombie&rdquo;) process, terminated but not reaped by its parent</li>
</ul>
<h3 id="打印进程标识">打印进程标识</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>());                  <span style="color:#75715e">// 进程自己的标识   PID
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;ppid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getppid</span>());                <span style="color:#75715e">// 父进程的标识     PPID
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pgid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpgrp</span>());                <span style="color:#75715e">// 进程组长标识     PGID
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;sid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getsid</span>(<span style="color:#a6e22e">posix_getpid</span>()));    <span style="color:#75715e">// 会话标识         SID
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;uid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getuid</span>());                  <span style="color:#75715e">// 用户标识         UID    当前登录用户，实际用户id
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;gid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getgid</span>());                  <span style="color:#75715e">// 组ID            GID
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;euid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_geteuid</span>());                <span style="color:#75715e">// 有效用户id       EUID
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;egid=%d</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getegid</span>());                <span style="color:#75715e">// 有效组id         EUID
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>pid<span style="color:#f92672">=</span><span style="color:#ae81ff">506</span>
</span></span><span style="display:flex;"><span>ppid<span style="color:#f92672">=</span><span style="color:#ae81ff">37</span>
</span></span><span style="display:flex;"><span>pgid<span style="color:#f92672">=</span><span style="color:#ae81ff">506</span>
</span></span><span style="display:flex;"><span>sid<span style="color:#f92672">=</span><span style="color:#ae81ff">37</span>
</span></span><span style="display:flex;"><span>uid<span style="color:#f92672">=</span><span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span>gid<span style="color:#f92672">=</span><span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span>euid<span style="color:#f92672">=</span><span style="color:#ae81ff">1000</span>
</span></span><span style="display:flex;"><span>egid<span style="color:#f92672">=</span><span style="color:#ae81ff">1000</span>
</span></span></code></pre></div><h2 id="fork">fork</h2>
<p><a href="https://www.php.net/manual/zh/function.pcntl-fork.php">pcntl_fork</a></p>
<p><a href="https://man7.org/linux/man-pages/man2/fork.2.html">fork</a></p>
<p>执行过程：</p>
<p>demo4.php</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>(); <span style="color:#75715e">// 父进程从这里开始运行
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;pid=%d run here </span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>()); <span style="color:#75715e">// 子进程从这里开始运行；
</span></span></span></code></pre></div><ul>
<li>shell 终端输入 <code>php demo4.php</code>；</li>
<li>父进程执行 <code>pcntl_fork</code> 函数；</li>
<li>函数执行成功之后，创建一个子进程，「子进程会复制父进程的代码段和数据段」；</li>
<li>父进程继续执行 <code>fprintf(STDOUT, &quot;pid=%d run here \n&quot;, posix_getpid());</code> 父进程结束；</li>
<li>子进程开始执行 <code>fprintf(STDOUT, &quot;pid=%d run here \n&quot;, posix_getpid());</code>，子进程结束。</li>
</ul>
<p>执行顺序</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#75715e">// fork
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;我现在的标识是：%d </span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>());
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$pid <span style="color:#f92672">=</span> <span style="color:#a6e22e">pcntl_fork</span>(); <span style="color:#75715e">// 父进程从这里开始运行
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;</span><span style="color:#ae81ff">\$</span><span style="color:#e6db74">pid=%d </span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, $pid); <span style="color:#75715e">// 子进程从这里开始运行；
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (<span style="color:#ae81ff">0</span> <span style="color:#f92672">==</span> $pid) {
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// 子进程
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;我是子进程我先来，pid=%d, ppid=%d, </span><span style="color:#ae81ff">\$</span><span style="color:#e6db74">pid=%d run here </span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), <span style="color:#a6e22e">posix_getppid</span>(), $pid);
</span></span><span style="display:flex;"><span>} <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// 父进程
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">2</span>); <span style="color:#75715e">// 父进程睡眠让子进程先运行
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fprintf</span>(<span style="color:#a6e22e">STDOUT</span>, <span style="color:#e6db74">&#34;我是父进程我断后，pid=%d, ppid=%d, </span><span style="color:#ae81ff">\$</span><span style="color:#e6db74">pid=%d run here </span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>, <span style="color:#a6e22e">posix_getpid</span>(), <span style="color:#a6e22e">posix_getppid</span>(), $pid);
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>我现在的标识是：2463 
</span></span><span style="display:flex;"><span>$pid<span style="color:#f92672">=</span><span style="color:#ae81ff">2464</span> 
</span></span><span style="display:flex;"><span>$pid<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span> 
</span></span><span style="display:flex;"><span>我是子进程我先来，pid<span style="color:#f92672">=</span>2464, ppid<span style="color:#f92672">=</span>2463, $pid<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span> run here 
</span></span><span style="display:flex;"><span>我是父进程我断后，pid<span style="color:#f92672">=</span>2463, ppid<span style="color:#f92672">=</span>1381, $pid<span style="color:#f92672">=</span><span style="color:#ae81ff">2464</span> run here 
</span></span></code></pre></div><p>当父进程调用 <code>pcntl_fork</code> 函数之后，创建出子进程，这个时候就有2个进程；</p>
<p>哪个进程先运行是无法确定的，进程调度由系统决定；</p>
<p>通常都是父进程先运行，子进程后运行，如果说父进程先运行，先结束，这个时候子进程就没有父亲，成为了孤儿进程，会被1号进程接管；</p>
<p>变成孤儿进程的后果就是：子进程跑到后台运行，不在前台运行；</p>
<p>所以我们一般让父进程后结束，先让子进程先运行；</p>
<p>当子进程被创建后，它会复制父进程的相关数据「是写时复制 <a href="https://zh.wikipedia.org/zh-cn/%E5%AF%AB%E5%85%A5%E6%99%82%E8%A4%87%E8%A3%BD">COW copy on write</a>」，父、子进是使用同一块内存空间；</p>
<p>当子进程要修改内存空间时，这个时候，系统会复制新的内存空间给子进程修改；</p>
<p>子进程得到的数据: $pid，它得到的结果是0；</p>
<p>子进程先结束，父进程后结束，这种情况一般来说是正常的，父进程应该回收子进程；</p>
<p>子进程结束时还会生成一些数据，比如说状态码等其它信息，并没有完全释放，需要父进程回收。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>2-3解释器文件</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%8C%E7%AB%A0%E8%BF%9B%E7%A8%8B%E7%8E%AF%E5%A2%83/2-3%E8%A7%A3%E9%87%8A%E5%99%A8%E6%96%87%E4%BB%B6/</link>
      <pubDate>Fri, 18 Feb 2022 20:41:06 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%8C%E7%AB%A0%E8%BF%9B%E7%A8%8B%E7%8E%AF%E5%A2%83/2-3%E8%A7%A3%E9%87%8A%E5%99%A8%E6%96%87%E4%BB%B6/</guid>
      <description>解释器文件 解释器文件，是一种文本文件，例如 PHP 写的解释器文件 demo.php。
#!/usr/bin/php &amp;lt;?php echo &amp;#39;Hello World!&amp;#39; chmod u+x demo.php 赋予可执行权限，即可直接以 ./demo.php 执行。
解释器，是可执行文件 ELF，例如 /usr/bin/php。
bash 进程启动过程 bash 进程是如何创建的？ 直接在 centos、ubuntu等终端直接登录，由 login 服务开启 bash 进程。
通过网络方式登录到 shell 终端，由 sshd 服务开启 bash 进程。
sshd 服务默认监听 22 端口。
进程观察的几个命令：
pstree 查看 Linux 进程间的关系，显示进程树。
pstree -ap：
├─sshd,9408 │ └─sshd,444836 │ └─bash,444875 │ └─pstree,444893 -ap ctrl+c 产生一个中断信号，退出当前终端正在执行的进程。
ctrl+z 把当前台进程丢到后台去暂停。
strace，跟踪系统调用和信号。
通过 strace -f -s 65500 -p 9408 -o ssh.log 追踪 pid = 9408 的 sshd 进程的系统调用，来分析 bash 进程是如何创建的。</description>
      <content:encoded><![CDATA[<h2 id="解释器文件">解释器文件</h2>
<p>解释器文件，是一种文本文件，例如 PHP 写的解释器文件 <code>demo.php</code>。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#75715e">#!/usr/bin/php
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span> <span style="color:#e6db74">&#39;Hello World!&#39;</span>
</span></span></code></pre></div><p><code>chmod u+x demo.php</code> 赋予可执行权限，即可直接以 <code>./demo.php</code> 执行。</p>
<p>解释器，是可执行文件 ELF，例如 <code>/usr/bin/php</code>。</p>
<h2 id="bash-进程启动过程">bash 进程启动过程</h2>
<h3 id="bash-进程是如何创建的">bash 进程是如何创建的？</h3>
<ol>
<li>
<p>直接在 centos、ubuntu等终端直接登录，由 login 服务开启 bash 进程。</p>
</li>
<li>
<p>通过网络方式登录到 shell 终端，由 <a href="https://www.ssh.com/academy/ssh/sshd">sshd</a> 服务开启 bash 进程。</p>
<p>sshd 服务默认监听 22 端口。</p>
</li>
</ol>
<p>进程观察的几个命令：</p>
<ol>
<li>
<p><a href="https://man7.org/linux/man-pages/man1/pstree.1.html">pstree</a> 查看 Linux 进程间的关系，显示进程树。</p>
<p><code>pstree -ap</code>：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>    ├─sshd,9408
</span></span><span style="display:flex;"><span>    │   └─sshd,444836    
</span></span><span style="display:flex;"><span>    │       └─bash,444875
</span></span><span style="display:flex;"><span>    │           └─pstree,444893 -ap
</span></span></code></pre></div><p><kbd>ctrl</kbd>+<kbd>c</kbd> 产生一个中断信号，退出当前终端正在执行的进程。</p>
<p><kbd>ctrl</kbd>+<kbd>z</kbd> 把当前台进程丢到后台去暂停。</p>
</li>
<li>
<p><a href="https://man7.org/linux/man-pages/man1/strace.1.html">strace</a>，跟踪系统调用和信号。</p>
<p>通过 <code>strace -f -s 65500 -p 9408 -o ssh.log</code> 追踪 pid = 9408 的 <code>sshd</code> 进程的系统调用，来分析 bash 进程是如何创建的。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">9408</span> attached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">447115</span> attached
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">447151</span> attached
</span></span><span style="display:flex;"><span>^Cstrace: Process <span style="color:#ae81ff">9408</span> detached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">447115</span> detached
</span></span><span style="display:flex;"><span>strace: Process <span style="color:#ae81ff">447143</span> detached
</span></span></code></pre></div><p>ssh.log 部分内容：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#ae81ff">9408</span>  <span style="color:#66d9ef">select</span><span style="color:#f92672">(</span>95, <span style="color:#f92672">[</span>3<span style="color:#f92672">]</span>, NULL, NULL, NULL<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span> <span style="color:#f92672">(</span>in <span style="color:#f92672">[</span>3<span style="color:#f92672">])</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">9408</span>  accept<span style="color:#f92672">(</span>3, <span style="color:#f92672">{</span>sa_family<span style="color:#f92672">=</span>AF_INET, sin_port<span style="color:#f92672">=</span>htons<span style="color:#f92672">(</span>4143<span style="color:#f92672">)</span>, sin_addr<span style="color:#f92672">=</span>inet_addr<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;1xx.1x9.xx3.1xx&#34;</span><span style="color:#f92672">)}</span>, <span style="color:#f92672">[</span>128-&gt;16<span style="color:#f92672">])</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">4</span>
</span></span><span style="display:flex;"><span>// accept 用来接收一个 socket 客户端连接
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">9408</span>  clone<span style="color:#f92672">(</span>child_stack<span style="color:#f92672">=</span>NULL, flags<span style="color:#f92672">=</span>CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr<span style="color:#f92672">=</span>0x7f1fc4482210<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">447115</span>
</span></span><span style="display:flex;"><span>// clone <span style="color:#f92672">=</span> fork 用来创建一个子进程
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">447115</span> execve<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;/usr/sbin/sshd&#34;</span>, <span style="color:#f92672">[</span><span style="color:#e6db74">&#34;/usr/sbin/sshd&#34;</span>, <span style="color:#e6db74">&#34;-D&#34;</span>, <span style="color:#e6db74">&#34;-R&#34;</span><span style="color:#f92672">]</span>, 0x55d325ea09c0 /* <span style="color:#ae81ff">7</span> vars */<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>// execve 用来执行一个程序
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">447115</span> clone<span style="color:#f92672">(</span>child_stack<span style="color:#f92672">=</span>NULL, flags<span style="color:#f92672">=</span>CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">447143</span> set_robust_list<span style="color:#f92672">(</span>0x7fa0e70b0220, <span style="color:#ae81ff">24</span> &lt;unfinished ...&gt;
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">447115</span> &lt;... clone resumed&gt;, child_tidptr<span style="color:#f92672">=</span>0x7fa0e70b0210<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">447143</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">447143</span> &lt;... set_robust_list resumed&gt;<span style="color:#f92672">)</span>   <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>// 创建子进程 <span style="color:#ae81ff">447143</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">447143</span> execve<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;/bin/bash&#34;</span>, <span style="color:#f92672">[</span><span style="color:#e6db74">&#34;-bash&#34;</span><span style="color:#f92672">]</span>, 0x563bf3853680 /* <span style="color:#ae81ff">25</span> vars */<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>// 执行 bash 程序
</span></span></code></pre></div><p>a. 通过 <a href="https://man7.org/linux/man-pages/man2/accept.2.html">accept</a> 接收 ssh 客户端连接；</p>
<p>b. 通过 <a href="https://man7.org/linux/man-pages/man2/clone.2.html">clone</a> 创建一个子进程；</p>
<p>c. 通过 <a href="https://man7.org/linux/man-pages/man2/execve.2.html">execve</a> 执行 sshd 程序；</p>
<p>d. 创建一个子进程；</p>
<p>e. 执行 bash 程序。</p>
</li>
</ol>
<h2 id="解释器文件在-bash-中运行的过程">解释器文件在 bash 中运行的过程</h2>
<p>通过 <code>strace -f -s 65500 -o demo_with_php.log php demo3.php</code> 追踪 <code>php demo3.php</code> 形式的运行过程：</p>
<p><code>demo_with_php.log</code> 部分内容：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>// system call
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">505</span>   execve<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;/usr/bin/php&#34;</span>, <span style="color:#f92672">[</span><span style="color:#e6db74">&#34;php&#34;</span>, <span style="color:#e6db74">&#34;demo3.php&#34;</span><span style="color:#f92672">]</span>, 0x7ffdaed67dc0 /* <span style="color:#ae81ff">53</span> vars */<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>// 打开解释器文件
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">505</span>   openat<span style="color:#f92672">(</span>AT_FDCWD, <span style="color:#e6db74">&#34;demo3.php&#34;</span>, O_RDONLY<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">3</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>// 读取解释器文件
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">505</span>   read<span style="color:#f92672">(</span>3, <span style="color:#e6db74">&#34;#!/usr/bin/php\n&lt;?php\n\necho \&#34;Hello World!\&#34;;\n&#34;</span>, 4096<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">43</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>// 解释执行
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">505</span>   close<span style="color:#f92672">(</span>3<span style="color:#f92672">)</span>                          <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">505</span>   write<span style="color:#f92672">(</span>1, <span style="color:#e6db74">&#34;Hello World!&#34;</span>, 12<span style="color:#f92672">)</span>      <span style="color:#f92672">=</span> <span style="color:#ae81ff">12</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">505</span>   close<span style="color:#f92672">(</span>0<span style="color:#f92672">)</span>                          <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span></code></pre></div><p>通过 <code>strace -f -s 65500 -o demo.log php demo3.php</code> 追踪 <code>php demo3.php</code> 形式的运行过程：</p>
<p><code>demo.log</code> 部分内容：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>// execve 函数在载入文件的时候，一般是当做 ELF 可执行文件载入，读取 ELF Header。
</span></span><span style="display:flex;"><span>// 如果不是 ELF 文件，就当做解释器文件读取文件的第一行，得到解释器的完整路径。
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">596</span>   execve<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;./demo3.php&#34;</span>, <span style="color:#f92672">[</span><span style="color:#e6db74">&#34;./demo3.php&#34;</span><span style="color:#f92672">]</span>, 0x7ffd6a87e5f8 /* <span style="color:#ae81ff">53</span> vars */<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>// 打开解释器文件
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">596</span>   openat<span style="color:#f92672">(</span>AT_FDCWD, <span style="color:#e6db74">&#34;./demo3.php&#34;</span>, O_RDONLY<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">3</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>// 解释执行
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">596</span>   read<span style="color:#f92672">(</span>3, <span style="color:#e6db74">&#34;#!/usr/bin/php\n&lt;?php\n\necho \&#34;Hello World!\&#34;;\n&#34;</span>, 4096<span style="color:#f92672">)</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">43</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">596</span>   close<span style="color:#f92672">(</span>3<span style="color:#f92672">)</span>                          <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">596</span>   write<span style="color:#f92672">(</span>1, <span style="color:#e6db74">&#34;Hello World!&#34;</span>, 12<span style="color:#f92672">)</span>      <span style="color:#f92672">=</span> <span style="color:#ae81ff">12</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">596</span>   close<span style="color:#f92672">(</span>0<span style="color:#f92672">)</span> 
</span></span></code></pre></div><p><img loading="lazy" src="../images/2-3%E8%A7%A3%E9%87%8A%E5%99%A8%E6%96%87%E4%BB%B6/c50953c2a4ce26b457fe82e3d555013b5a43cdb976a431477866a7682fc424a2.png" alt="解释器文件在 bash 中运行的过程"  />
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>2-2命令行参数与环境参数表</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%8C%E7%AB%A0%E8%BF%9B%E7%A8%8B%E7%8E%AF%E5%A2%83/2-2%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E4%B8%8E%E7%8E%AF%E5%A2%83%E8%A1%A8/</link>
      <pubDate>Thu, 17 Feb 2022 20:19:26 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%8C%E7%AB%A0%E8%BF%9B%E7%A8%8B%E7%8E%AF%E5%A2%83/2-2%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E4%B8%8E%E7%8E%AF%E5%A2%83%E8%A1%A8/</guid>
      <description>命令行参数 php 两种请求方式：
浏览器请求过程：
http://127.0.0.1/demo2.php
浏览器访问 &amp;mdash;&amp;gt; tcp 协议请求 &amp;mdash;&amp;gt; Apache/Nginx[集成环境]web服务器 &amp;mdash;&amp;gt; php-fpm 服务
cli 请求：
php demo2.php a b c d
cli 是直接在终端调用 php 解释器。
其中 [a,b,c,d] 就叫命令行参数。
环境参数表 当前 bash 进程调用 execve 函数传递进来的参数。
print_r(getenv()); </description>
      <content:encoded><![CDATA[<h2 id="命令行参数">命令行参数</h2>
<p>php 两种请求方式：</p>
<ol>
<li>
<p>浏览器请求过程：</p>
<p>http://127.0.0.1/demo2.php</p>
<p>浏览器访问 &mdash;&gt; tcp 协议请求 &mdash;&gt; Apache/Nginx[集成环境]web服务器 &mdash;&gt; php-fpm 服务</p>
</li>
<li>
<p>cli 请求：</p>
<p><code>php demo2.php a b c d</code></p>
<p>cli 是直接在终端调用 php 解释器。</p>
<p>其中 [a,b,c,d] 就叫命令行参数。</p>
</li>
</ol>
<h2 id="环境参数表">环境参数表</h2>
<p>当前 bash 进程调用 execve 函数传递进来的参数。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>    <span style="color:#a6e22e">print_r</span>(<span style="color:#a6e22e">getenv</span>());
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>2-1程序与进程</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%8C%E7%AB%A0%E8%BF%9B%E7%A8%8B%E7%8E%AF%E5%A2%83/2-1%E7%A8%8B%E5%BA%8F%E4%B8%8E%E8%BF%9B%E7%A8%8B/</link>
      <pubDate>Wed, 16 Feb 2022 20:46:08 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/%E7%AC%AC%E4%BA%8C%E7%AB%A0%E8%BF%9B%E7%A8%8B%E7%8E%AF%E5%A2%83/2-1%E7%A8%8B%E5%BA%8F%E4%B8%8E%E8%BF%9B%E7%A8%8B/</guid>
      <description>什么是程序？ ELF 概念 程序（Program） 一般是指可执行文件，在Linux系统中它按 ELF 格式进行存储，并没有后缀可标识其文件类型，需要通过 file 命令来查看 ELF 文件的具体类型。
ELF 全称是 Executable Linkable Format （可执行与可链接格式），在计算机科学中，是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。是UNIX系统实验室（USL）作为应用程序二进制接口（Application Binary Interface，ABI）而开发和发布的，也是Linux的主要可执行文件格式。
ELF文件种类： EXEC 可执行文件
object code 目标代码文件
shared libraries 共享库文件
REL 可重定位文件
在Linux中为 xx.o xx.a，也称为静态库文件，其中 xx.o 称为目标文件，可被链接器链接成为可执行文件，静态库文件，动态库文件。
示例：php扩展中常用的动态库文件如curl,网络框架库如event.so socket扩展库sockets.so
c/c++项目程序员一般引用第三方的库函数都是使用第三方编译好的动态库或是静态库文件 .so, .a。
core dump 核心转储文件
存储进程产生的异常信息。是操作系统在进程收到某些信号而终止运行时，将此时进程地址空间的内容以及有关进程状态的其他信息写入一个磁盘文件。这种信息往往用于调试。
ELF 文件格式 ELF 文件信息是以 section 或 segment 来存储的。
每个 ELF 文件都由一个 ELF 首部和紧跟其后的文件数据部分组成。数据部分可以包含：
程序头表（Program header table）：描述 0 个或多个内存段信息
分段头表（Section header table）：描述 0 段或多段链接与重定位需要的数据
程序头表与分段头表引用的数据，比如 .text .data</description>
      <content:encoded><![CDATA[<h2 id="什么是程序">什么是程序？</h2>
<h3 id="elf-概念">ELF 概念</h3>
<p>程序（Program） 一般是指可执行文件，在Linux系统中它按 ELF 格式进行存储，并没有后缀可标识其文件类型，需要通过 <code>file</code> 命令来查看 ELF 文件的具体类型。</p>
<p><a href="https://en.wikipedia.org/wiki/Executable_and_Linkable_Format" title="维基百科-关于 ELF 的介绍">ELF</a> 全称是 Executable Linkable Format （可执行与可链接格式），在计算机科学中，是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。是UNIX系统实验室（USL）作为应用程序二进制接口（Application Binary Interface，ABI）而开发和发布的，也是Linux的主要可执行文件格式。</p>
<h3 id="elf文件种类">ELF文件种类：</h3>
<ol>
<li>
<p>EXEC 可执行文件</p>
</li>
<li>
<p>object code 目标代码文件</p>
</li>
<li>
<p>shared libraries 共享库文件</p>
</li>
<li>
<p>REL 可重定位文件</p>
<blockquote>
<p>在Linux中为 xx.o xx.a，也称为静态库文件，其中 xx.o 称为目标文件，可被链接器链接成为可执行文件，静态库文件，动态库文件。</p>
</blockquote>
<blockquote>
<p>示例：php扩展中常用的动态库文件如curl,网络框架库如event.so socket扩展库sockets.so</p>
</blockquote>
<blockquote>
<p>c/c++项目程序员一般引用第三方的库函数都是使用第三方编译好的动态库或是静态库文件 .so, .a。</p>
</blockquote>
</li>
<li>
<p>core dump 核心转储文件</p>
<blockquote>
<p>存储进程产生的异常信息。是操作系统在进程收到某些信号而终止运行时，将此时进程地址空间的内容以及有关进程状态的其他信息写入一个磁盘文件。这种信息往往用于调试。</p>
</blockquote>
</li>
</ol>
<h3 id="elf-文件格式">ELF 文件格式</h3>
<p>ELF 文件信息是以 section 或 segment 来存储的。</p>
<p>每个 ELF 文件都由一个 ELF 首部和紧跟其后的文件数据部分组成。数据部分可以包含：</p>
<ul>
<li>
<p>程序头表（Program header table）：描述 0 个或多个内存段信息</p>
</li>
<li>
<p>分段头表（Section header table）：描述 0 段或多段链接与重定位需要的数据</p>
</li>
<li>
<p>程序头表与分段头表引用的数据，比如 .text .data</p>
</li>
</ul>
<p>通过 <code>objdump -h zip.so</code> 查看分段头表信息。</p>
<p><img loading="lazy" src="../images/2-1%E7%A8%8B%E5%BA%8F%E4%B8%8E%E8%BF%9B%E7%A8%8B/55f30312e83c6923ba3218c368642d5ded6b576390dd004038bb7ff114d24b29.png" alt="ELF文件格式"  />
</p>
<h3 id="魔数-elf-标识码">魔数 ELF 标识码</h3>
<p>通过 <code>readelf -h /usr/local/bin/php</code> 查看 ELF 文件信息，其中的 Magic ：</p>
<pre tabindex="0"><code>Magic:      7f   45 4c 46 02              01                                01

ascii对照   DEL  E  L  F  02=364位/01=32位 字节序：01=小段字节序/02=大段字节序 ELF文件主版本号
</code></pre><h3 id="相关工具">相关工具</h3>
<ul>
<li>
<p>GNU Binutils 是用来处理许多格式的目标文件(包括elf文件)一整套的编程语言工具程序，包括readelf，objdump，objcopy, nm, strings, strip, as, ar。</p>
</li>
<li>
<p>readelf 显示 elf 文件</p>
</li>
<li>
<p>objdump 显示elf 和 object 格式文件，解码 elf 文件中高级语言语句所对应的机器语言语句段落，汇编语言语句段落。</p>
</li>
<li>
<p>nm显示elf文件中变量名和地址</p>
</li>
</ul>
<h2 id="什么是进程">什么是进程？</h2>
<h3 id="概念">概念</h3>
<p>进程（<a href="https://en.wikipedia.org/wiki/Process_(computing)" title="维基百科-关于 Process 的介绍">Process</a>），一个正被执行的程序就是一个进程，系统会给进程一个唯一的标识符：进程ID。</p>
<p>是指计算机中已执行的程序。进程曾经是分时系统的基本运作单位。在面向进程设计的系统（如早期的UNIX，Linux 2.4及更早的版本）中，进程是程序的基本执行实体；在面向线程设计的系统（如当代多数操作系统、Linux 2.6及更新的版本）中，进程本身不是基本执行单位，而是线程的容器。</p>
<p>程序本身只是指令、数据及其组织形式的描述，相当于一个名词，进程才是程序（那些指令和数据）的真正执行实例，可以想像说是现在进行式。</p>
<p>用户下达执进程式的命令后，就会产生进程。同一程序可产生多个进程（一对多关系），以允许同时有多位用户执行同一程序，却不会相冲突。进程需要一些资源才能完成工作，如CPU使用时间、存储器、文件以及I/O设备，且为依序逐一进行，也就是每个CPU核心任何时间内仅能执行一项进程。</p>
<p>进程与线程的区别：进程是计算机管理运进程序的一种方式，一个进程下可包含一个或者多个线程。线程可以理解为子进程。</p>
<h3 id="linux-系统如何启动一个程序">Linux 系统如何启动一个程序</h3>
<p><code>strace</code> 是Linux环境下的一款程序调试工具，用来监察一个应用程序所使用的系统调用及它所接收的系统信息。</p>
<p>程序加载器（program loader）调用 exec 系列函数，如 execve 来加载一个可执行文件，同时会给新程序传递命令行参数和环境参数表。</p>
<h3 id="php-解释器的工作原理">PHP 解释器的工作原理</h3>
<p><code>size</code> 可以用来查看 ELF 文件程序指令，程序的大小。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$size hugo 
</span></span><span style="display:flex;"><span>   text	   data	    bss	    dec	    hex	filename
</span></span><span style="display:flex;"><span>52813565	 838408	 346040	53998013	337f1bd	hugo
</span></span></code></pre></div><p>通过 <code>strace</code> 查看系统 PHP 解释器的系统调用来分析。</p>
<p><code>/usr/bin/php demo1.php</code></p>
<p><img loading="lazy" src="../images/2-1%E7%A8%8B%E5%BA%8F%E4%B8%8E%E8%BF%9B%E7%A8%8B/d2e54bc7afa970b1f60900dc8a4957016dac130e04a2bb8877c9db9e299d84b0.png" alt="PHP 解释器工作流程"  />
</p>
<p>PHP 解释器 ELF 可执行文件是经过编译链接之后生成的。</p>
<p><img loading="lazy" src="../images/2-1%E7%A8%8B%E5%BA%8F%E4%B8%8E%E8%BF%9B%E7%A8%8B/99486676b528805ffbe8346ddecfe5d2cbc0a137b85c0968b3afc8a3190af880.png" alt="PHP 解释器可执行文件"  />
</p>
<p>通过 <code>ldd /usr/bin/php</code> 查看 php 可执行文件所依赖的动态库（函数库）。</p>
<p>通过 <code>nm</code> 具体查看 ELF 文件中的函数以及变量的虚拟内存地址。</p>
<p>程序存储空间布局：</p>
<p><img loading="lazy" src="../images/2-1%E7%A8%8B%E5%BA%8F%E4%B8%8E%E8%BF%9B%E7%A8%8B/fadcc6f9bd6bb8d9c8ae355e94b15fcb3989abe579882cd581a5c61683157074.png" alt="程序存储空间布局"  />
</p>
<h3 id="进程的终止">进程的终止</h3>
<ul>
<li>
<p>运行到最后一行</p>
</li>
<li>
<p>遇到 exit、return</p>
</li>
<li>
<p>中断信号产生的异常退出</p>
</li>
</ul>
<p>可以通过 <code>echo $?</code> 查看退出状态码。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>1-1课程介绍</title>
      <link>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/1-%E8%AF%BE%E7%A8%8B%E4%BB%8B%E7%BB%8D/</link>
      <pubDate>Tue, 15 Feb 2022 21:30:12 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/liunx%E4%B8%8Bphp%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B/1-%E8%AF%BE%E7%A8%8B%E4%BB%8B%E7%BB%8D/</guid>
      <description>课程简介 本课程内容涵盖了 Linux 下 ELF 文件、进程、进程控制原语、进程调度算法、中断信号系统、Linux bash 进程与终端、进程、特权进程、守护进程、会话、进程间通信、UNIX域进程间通信、进程间同步、进程池等知识技术点。
课程测试环境 ubuntu 20.04
php 7.x
VScode
课程需要有哪些基础知识 PHP使用1年以上 能独立编译安装PHP和相关扩展 对Linux基础命令有所了解 不浮躁有足够的耐心学习知识 会使用翻译工具，爱百度google的同学^_^ 大其心，容天下之物；虚其心，受天下之善；平其心，论天下之事；潜其心，观天下之理；定其心，应天下之变。
——— 《呻吟语·卷二·乐集·修身》
如今新兴语言层出不穷，我还有必要学PHP？ 本套课程集中于 Linux 下多进程编程知识，虽然使用 PHP 来演示讲课，但在讲解中，会涉及到内核系统调用函数的说明，因为Linux内核系统调用对于所有的编程语言都是通用的。也就是说大家换一门其它编程语言，在本套课程所学到的知识都能完全应用到其它语言中，除非大家换了Linux操作系统，或是Linux操作系统的实现不使用C语言了。这也是本套课程的目标。让大家掌握方法以便能深入的研究 Linux 的 API（C 语言定义好的接口函数）。
go,python,nodejs,java,php rust,&amp;hellip;
不论应用使用何种编程语言，底层的系统调用函数完全一致。
例如 PHP 的 pcntl_fork 底层调用的系统函数：fork,clone
课程适合哪些人？ 以下列出几点小问题如果您感兴趣，则本套课程将非常适合您！
PHP 解释器是什么类型的文件？我怎么查看它？为什么我在终端执行 php index.php 它就执行了？从哪里开始执行的？到哪儿结束呢？
elf 文件;
通过 file /usr/bin/php 查看；
/www/server/php/80/bin/php: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5e0ab6a4e4cdb7a1da44a13c30661ecc8d7af995, for GNU/Linux 3.</description>
      <content:encoded><![CDATA[<h2 id="课程简介">课程简介</h2>
<p>本课程内容涵盖了 Linux 下 ELF 文件、进程、进程控制原语、进程调度算法、中断信号系统、Linux bash 进程与终端、进程、特权进程、守护进程、会话、进程间通信、UNIX域进程间通信、进程间同步、进程池等知识技术点。</p>
<h2 id="课程测试环境">课程测试环境</h2>
<ul>
<li>
<p>ubuntu 20.04</p>
</li>
<li>
<p>php 7.x</p>
</li>
<li>
<p>VScode</p>
</li>
</ul>
<h2 id="课程需要有哪些基础知识">课程需要有哪些基础知识</h2>
<ol>
<li>PHP使用1年以上</li>
<li>能独立编译安装PHP和相关扩展</li>
<li>对Linux基础命令有所了解</li>
<li>不浮躁有足够的耐心学习知识</li>
<li>会使用翻译工具，爱百度google的同学^_^</li>
</ol>
<blockquote>
<p>大其心，容天下之物；虚其心，受天下之善；平其心，论天下之事；潜其心，观天下之理；定其心，应天下之变。</p>
<p>——— <cite>《<a href="https://so.gushiwen.cn/guwen/bookv_46653FD803893E4F469FF7A7DBDB9BE0.aspx">呻吟语·卷二·乐集·修身</a>》</cite></p>
</blockquote>
<h2 id="如今新兴语言层出不穷我还有必要学php">如今新兴语言层出不穷，我还有必要学PHP？</h2>
<p>本套课程集中于 Linux 下多进程编程知识，虽然使用 PHP 来演示讲课，但在讲解中，会涉及到内核系统调用函数的说明，因为Linux内核系统调用对于所有的编程语言都是通用的。也就是说大家换一门其它编程语言，在本套课程所学到的知识都能完全应用到其它语言中，除非大家换了Linux操作系统，或是Linux操作系统的实现不使用C语言了。这也是本套课程的目标。让大家掌握方法以便能深入的研究 Linux 的 API（C 语言定义好的接口函数）。</p>
<blockquote>
<p>go,python,nodejs,java,php rust,&hellip;</p>
</blockquote>
<p>不论应用使用何种编程语言，底层的系统调用函数完全一致。</p>
<p>例如 PHP 的 <a href="https://www.php.net/manual/en/function.pcntl-fork.php">pcntl_fork</a> 底层调用的系统函数：<a href="https://man7.org/linux/man-pages/man2/fork.2.html">fork</a>,<a href="https://man7.org/linux/man-pages/man2/clone.2.html">clone</a></p>
<p><img loading="lazy" src="../images/3990f41dca109f39142f9b19870c83d02e3d455887c79cb60604699a22745261.png" alt="系统调用"  />
</p>
<h2 id="课程适合哪些人">课程适合哪些人？</h2>
<p>以下列出几点小问题如果您感兴趣，则本套课程将非常适合您！</p>
<ol>
<li>
<p>PHP 解释器是什么类型的文件？我怎么查看它？为什么我在终端执行 <code>php index.php</code> 它就执行了？从哪里开始执行的？到哪儿结束呢？</p>
<blockquote>
<p>elf 文件;</p>
<p>通过 <code>file /usr/bin/php</code> 查看；</p>
</blockquote>
<pre tabindex="0"><code>/www/server/php/80/bin/php: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5e0ab6a4e4cdb7a1da44a13c30661ecc8d7af995, for GNU/Linux 3.2.0, with debug_info, not stripped
</code></pre></li>
<li>
<p>我通过终端如 ssh 等连接我的阿里云 Linux centos8 时，系统做了什么？我在它的终端下输入 <code>php index．php</code> 或是其它命令时它干啥了？</p>
</li>
<li>
<p>为什么我在 <code>index.php</code> 文件中打印 <code>$argv</code> 参数时能打印出东西？</p>
</li>
<li>
<p>如果我启动 <code>php index.php</code> 之后，我退出终端时它是不是退出了？为什么？如果不想让它退出怎么办呢？为什么？</p>
<blockquote>
<p>退出了；</p>
<p>父进程结束，子进程也结束了；</p>
<p>守护进程，后台运行。</p>
</blockquote>
</li>
<li>
<p>僵尸进程是怎么产生的？对系统会有什么影响呢？我要怎么处理掉呢？我又如何查看呢？还有孤儿进程又是怎么产生的呢？它的父亲又是谁呢？</p>
</li>
<li>
<p>我启动 <code>php index.php</code> 之后，它的内存数据在哪里我可以查看呢？为什么要查看呢？</p>
</li>
<li>
<p>我启动 <code>php index.php</code> 之后，它调用系统哪些函数呢？我怎么查看呢？查到之后，我又如何知道这些系统函数是做什么的呢？其它编程语言如 Java，go 运行之后我又如何查看它内部调用哪些系统函数了呢？和 PHP 又有啥关系呢？</p>
</li>
<li>
<p>什么是控制终端，终端是干嘛的呢？跟我启动的 <code>php index.php</code> 进程有关系？？？还很大？？？</p>
</li>
<li>
<p>我启动多个进程以后，它们是啥关系呢？我要怎么控制每个进程呢？</p>
</li>
<li>
<p>程序启动之后，它的内存代码和数据段我在创建新进程的时候它是怎么复制的呢？为啥要复制呢？</p>
</li>
<li>
<p>我编写 Java 一个小程序，然后我 <code>javac xxx</code> 或是 <code>go run xxx</code> 它就运行了和 <code>php index.php</code> 一样吗【内部调用】？？？</p>
<blockquote>
<p>一样</p>
</blockquote>
</li>
<li>
<p>如果我想自己写一套多进程的服务器小项目，要运用到哪些知识点呢？ socket？tcp／ip？第一关多进程，实现跨进程间任务投递我要怎么实现呢？客户请求过来后，我要立马处理吗？我想自己动手搞一套网络通信框架要不要先搞清楚以上的问题呢？</p>
</li>
<li>
<p>我换语言了学完还能有用？？？</p>
<blockquote>
<p>么问题。</p>
</blockquote>
</li>
</ol>
<p>以上仅是本套课程的一部分问题哦。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>终极复盘</title>
      <link>https://w.toomore.us/posts/wealth/thinking/%E7%BB%88%E6%9E%81%E5%A4%8D%E7%9B%98/</link>
      <pubDate>Mon, 14 Feb 2022 22:23:36 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/wealth/thinking/%E7%BB%88%E6%9E%81%E5%A4%8D%E7%9B%98/</guid>
      <description>从这本《财富思维觉醒》书中得到的收获或启发都有哪些？（如果竟然没有任何明 显的收获或启发，你认为原因是什么？）
思维在这之前也被启发过很多次了，道理都懂，就是过不好这一生。究其原因，就是纸上谈兵，从来迈不出“行”的那一步。
做好做坏，先行动起来。
对比之前，自己的思维认知上都发生了哪些变化？已经在生活、工作中做出改变的地方有哪些？（如果竟然没有做出任何改变，你认为阻碍你落地行动的最大原因是什么？）
最大的原因可能是这几年创业一直没挣到钱，负债越来越多，疲于奔命。
请根据对本书内容的所思所想、结合自己目前的生活工作状态，为自己制定一份切 实可行的「财富人生」的落地方案吧，这也是你接下里要做出调整、改变、积累、一步步向前不断推进的路书。
找一份稳定的工作，先有收入再说，尽快解决负债。
业余时间学习财富知识、提升专业技能，开发一些能躺着赚钱的副产品。
如果这本书“化身成一个人”站在你的面前，现在你最想对他说些什么？
大佬，带带我。
目前你还有哪些需求——需要被支持、被满足？
怎么能快速解决个人债务问题？
你内心还有其他想说的话吗？什么都可以说~
不知道想说啥。
课程的终点，财富的起点。
“学”完了，该“习”了。
务必做到：
静下心来，没事的时候就琢磨之前学过的内容。然后要求自己去落地做出来，直到自己平日里的想法和做法，都是符合“富人之心”的。
要把自己训练成一个“对很多人都有可利用价值”的人；
并且有着至少一个可以持续很多年都被人需要、被人喜欢、被人支持和能够重复购买的商品；
直到最终为自己打造出一个自动赚钱机器，成为那个拥有“真正财产”的人。
所谓“法无定法”，只有我们有了好的“心法”，技法才能得以有效施展。犹如电视剧《天 道》（哈哈，我竟然看过电视剧原著《遥远的救世主》）中有说：有道无术、术尚可求。有术无道、止于术。
课程原文下载链接：白手起家-财富思维觉醒-2021版.pdf</description>
      <content:encoded><![CDATA[<ol>
<li>
<p>从这本《财富思维觉醒》书中得到的收获或启发都有哪些？（如果竟然没有任何明 显的收获或启发，你认为原因是什么？）</p>
<p>思维在这之前也被启发过很多次了，道理都懂，就是过不好这一生。究其原因，就是纸上谈兵，从来迈不出“行”的那一步。</p>
<p>做好做坏，先行动起来。</p>
</li>
<li>
<p>对比之前，自己的思维认知上都发生了哪些变化？已经在生活、工作中做出改变的地方有哪些？（如果竟然没有做出任何改变，你认为阻碍你落地行动的最大原因是什么？）</p>
<p>最大的原因可能是这几年创业一直没挣到钱，负债越来越多，疲于奔命。</p>
</li>
<li>
<p>请根据对本书内容的所思所想、结合自己目前的生活工作状态，为自己制定一份切 实可行的「财富人生」的落地方案吧，这也是你接下里要做出调整、改变、积累、一步步向前不断推进的路书。</p>
<p>找一份稳定的工作，先有收入再说，尽快解决负债。</p>
<p>业余时间学习财富知识、提升专业技能，开发一些能躺着赚钱的副产品。</p>
</li>
<li>
<p>如果这本书“化身成一个人”站在你的面前，现在你最想对他说些什么？</p>
<p>大佬，带带我。</p>
</li>
<li>
<p>目前你还有哪些需求——需要被支持、被满足？</p>
<p>怎么能快速解决个人债务问题？</p>
</li>
<li>
<p>你内心还有其他想说的话吗？什么都可以说~</p>
<p>不知道想说啥。</p>
</li>
</ol>
<p>课程的终点，财富的起点。</p>
<p>“学”完了，该“习”了。</p>
<p>务必做到：</p>
<p>静下心来，没事的时候就琢磨之前学过的内容。然后要求自己去落地做出来，直到自己平日里的想法和做法，都是符合“富人之心”的。</p>
<ul>
<li>
<p>要把自己训练成一个“对很多人都有可利用价值”的人；</p>
</li>
<li>
<p>并且有着至少一个可以持续很多年都被人需要、被人喜欢、被人支持和能够重复购买的商品；</p>
</li>
<li>
<p>直到最终为自己打造出一个自动赚钱机器，成为那个拥有“真正财产”的人。</p>
</li>
</ul>
<p>所谓“法无定法”，只有我们有了好的“心法”，技法才能得以有效施展。犹如电视剧《天
道》（哈哈，我竟然看过电视剧原著《遥远的救世主》）中有说：<strong>有道无术、术尚可求。有术无道、止于术</strong>。</p>
<hr>
<p>课程原文下载链接：<a href="../attachs/%E7%99%BD%E6%89%8B%E8%B5%B7%E5%AE%B6-%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92-2021%E7%89%88.pdf">白手起家-财富思维觉醒-2021版.pdf</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>第八章 传承篇</title>
      <link>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E5%85%AB%E7%AB%A0-%E4%BC%A0%E6%89%BF%E7%AF%87/</link>
      <pubDate>Sat, 12 Feb 2022 08:51:52 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E5%85%AB%E7%AB%A0-%E4%BC%A0%E6%89%BF%E7%AF%87/</guid>
      <description>财富积累的心法————开源节流。
“节流”是我们当下就可以做的，而“开源”则是后边通过努力才能做到的。
8.1 开源节流 “节流” 要重视节约金钱“能源”、减少铺张浪费。
节流其实在上节课已经聊了不少，只要“尽量清心寡欲”就可以了，把每月结余下来的钱 用于让自己增值、让钱生钱。
钱是我们用生命时间换来的。
金钱是我们拥有的一种可以用来创造更多价值的能量，并且是可以24小时不休息的替我们赚钱。
钱要么用来消费，要么用来投资。 在 创富成功之前，如果可以的话、你必须尽可能的把挣到的钱用作投资，而不是消费。
不管是投资自己的才能提升、还是投资能挣钱的项目，都是正确的用法。
特别注意：还没有学习掌握投资知识之前，建议更多的投资自己的能力提升上，让自己先变 得值钱。
只有这样使用金钱能量，才对得起我们对应付出的生命时间。
“开源” 想方设法增多金钱能量流到我们这里。
这样，我们在“减去必要的”生活消费后，才能有所结余、才能开始积累财产。
除了提升自己的才能、进而影响到更多的人、因此增加主动收入以外。我们还要重视通过股票投资的方式用钱生钱——这也是这个时代最适合我们普通人增加被动收入的方法。
8.2 股权投资 好处 为什么说买股票进行股权投资，是我们普通人最好的投资机会呢？
这是因为在中国有几千万家实名注册的公司，其中只有4000多家做到了成功上市。
这说明了这4000家上市公司是杀出重围的佼佼者、是胜利者、是中国几千万家公司里的超级精英班子。
不夸张的说，中国最好的商业模式、最挣钱的公司，差不多都在这了。
而且，由于上市公司股票交易的出现，我们手里结余的钱，现在竟然可以借鸡生蛋、用钱生钱了。
简而言之：
购买持有了优秀上市公司的股份，就等于是让中国最厉害的精英人才替我们经营公司、为我们效力。而我们躺着啥都不干、就可以坐享其成。
股票投资的底牌是——买股票就是买公司、做股东、分利润。
可以在4000多家上市公司里优中选优，只做各个行业中的优质企业、龙头企业的股东。
其他好处：
可以把我们的时间解放出来，从靠主动工作收入、变成投资产生的被动收入，因此有了更多时间做自己喜欢的事。
可以快速转移资金，从一个经营开始转下的公司、快速转移到另一家经营向上的公司。
可以通过资产的合理配置，不仅能有效降低资金的安全、更能使得投资收益稳定的持续增长。
股票投资——不仅是达到金钱自由的必经之路，更是富人们管理资产的重要方式、财富传承最好的载体。
不夸张的说，如果股票投资存在，那么这将是一个“永生行业”。
而对我们唯一的要求就是：学习看懂一家公司即可。（虽然不容易，但也没那么难）
靠谱吗？ 你现在是不是心里面在犯嘀咕呢？有着不少的疑惑？感觉买股票不就是炒股吗？周围的人都在赔钱啊，这玩意真的靠谱吗？
在股市挣不到钱的，绝大多数都是“没搞清楚股票是什么”的人；是没有正儿八经学习过正统投资知识的人、更是没有经得住贪婪诱惑的人；入场买股票带的是“赌博的心”，那结果必然是“赔钱的相”了。
如果一个人完全不知道自己究竟在买什么？为什么要买的时候，而轻易下注、下重注，就是赌博。
投资是一门手艺，是需要懂的投资之道、以及长期学习和实践才能掌握的赚钱技术。
只要我们坚定走投资正道，不投机倒把瞎买瞎卖，赔钱其实也挺不容易的，长期来看只不过是赚多赚少的区别而已。
8.3 神奇的复利 表格的第一列是投资的时长，第一行是投资年复合收益率（“利滚利”模式）。
5% 是银行理财产品的收益率，15% 是我们普通人稍加学习就有机会达到的收益率， 26% 是专业投资者的收益率（只要我们方法对也是有机会达到了）。
第1组数据：单笔投资 如果投资水平能达到年化复合收益率是 26% 的话，10年后本金将会翻10倍。
如果我们只是把钱买成 5% 收益率的银行理财产品，投资20年的收益率为2.65倍。
对于专业投资者来说只需要4年就达到了。即使收益率只有15%，也可以提前13年达到。
这也说明了一个事实——投资能力越强，资金翻倍速度越快。
第2组数据：定期追加 在第一组数据基础上，每年增加一个单位的投资金额，比如说第一年投资了10000元， 第二年、第三年……每年都增投10000元，数据就会变成这个样子。
同样是 26% 的年化收益率，第一组数据需要10年才能达到10倍、而在第二组数据里第 5年就达到了10倍，等于缩短了5年时间。</description>
      <content:encoded><![CDATA[<p>财富积累的心法————开源节流。</p>
<p>“节流”是我们当下就可以做的，而“开源”则是后边通过努力才能做到的。</p>
<h3 id="81-开源节流">8.1 开源节流</h3>
<h4 id="节流">“节流”</h4>
<p>要重视节约金钱“能源”、减少铺张浪费。</p>
<p>节流其实在上节课已经聊了不少，只要“尽量清心寡欲”就可以了，把每月结余下来的钱 用于让自己增值、让钱生钱。</p>
<p>钱是我们用生命时间换来的。</p>
<p><em><strong>金钱是我们拥有的一种可以用来创造更多价值的能量，并且是可以24小时不休息的替我们赚钱。</strong></em></p>
<p>钱要么用来消费，要么用来投资。 在
创富成功之前，如果可以的话、你必须尽可能的把挣到的钱用作投资，而不是消费。</p>
<p>不管是投资自己的才能提升、还是投资能挣钱的项目，都是正确的用法。</p>
<blockquote>
<p>特别注意：还没有学习掌握投资知识之前，建议更多的投资自己的能力提升上，让自己先变 得值钱。</p>
</blockquote>
<p>只有这样使用金钱能量，才对得起我们对应付出的生命时间。</p>
<h4 id="开源">“开源”</h4>
<p>想方设法增多金钱能量流到我们这里。</p>
<p>这样，我们在“减去必要的”生活消费后，才能有所结余、才能开始积累财产。</p>
<p>除了提升自己的才能、进而影响到更多的人、因此增加主动收入以外。我们还要重视通过股票投资的方式用钱生钱——这也是这个时代最适合我们普通人增加被动收入的方法。</p>
<h3 id="82-股权投资">8.2 股权投资</h3>
<h4 id="好处">好处</h4>
<p>为什么说买股票进行股权投资，是我们普通人最好的投资机会呢？</p>
<p>这是因为在中国有几千万家实名注册的公司，其中只有4000多家做到了成功上市。</p>
<p>这说明了这4000家上市公司是杀出重围的佼佼者、是胜利者、是中国几千万家公司里的超级精英班子。</p>
<p>不夸张的说，中国最好的商业模式、最挣钱的公司，差不多都在这了。</p>
<p>而且，由于上市公司股票交易的出现，我们手里结余的钱，现在竟然可以借鸡生蛋、用钱生钱了。</p>
<p>简而言之：</p>
<p>购买持有了优秀上市公司的股份，就等于是让中国最厉害的精英人才替我们经营公司、为我们效力。而我们躺着啥都不干、就可以坐享其成。</p>
<p>股票投资的底牌是——买股票就是买公司、做股东、分利润。</p>
<p>可以在4000多家上市公司里优中选优，只做各个行业中的优质企业、龙头企业的股东。</p>
<p>其他好处：</p>
<ul>
<li>
<p>可以把我们的时间解放出来，从靠主动工作收入、变成投资产生的被动收入，因此有了更多时间做自己喜欢的事。</p>
</li>
<li>
<p>可以快速转移资金，从一个经营开始转下的公司、快速转移到另一家经营向上的公司。</p>
</li>
<li>
<p>可以通过资产的合理配置，不仅能有效降低资金的安全、更能使得投资收益稳定的持续增长。</p>
</li>
</ul>
<p><em><strong>股票投资——不仅是达到金钱自由的必经之路，更是富人们管理资产的重要方式、财富传承最好的载体。</strong></em></p>
<p>不夸张的说，如果股票投资存在，那么这将是一个“永生行业”。</p>
<p>而对我们唯一的要求就是：学习看懂一家公司即可。（虽然不容易，但也没那么难）</p>
<h4 id="靠谱吗">靠谱吗？</h4>
<p><em><strong>你现在是不是心里面在犯嘀咕呢？有着不少的疑惑？感觉买股票不就是炒股吗？周围的人都在赔钱啊，这玩意真的靠谱吗？</strong></em></p>
<p>在股市挣不到钱的，绝大多数都是“没搞清楚股票是什么”的人；是没有正儿八经学习过正统投资知识的人、更是没有经得住贪婪诱惑的人；入场买股票带的是“赌博的心”，那结果必然是“赔钱的相”了。</p>
<p><strong>如果一个人完全不知道自己究竟在买什么？为什么要买的时候，而轻易下注、下重注，就是赌博。</strong></p>
<p>投资是一门手艺，是需要懂的投资之道、以及长期学习和实践才能掌握的赚钱技术。</p>
<p>只要我们坚定走投资正道，不投机倒把瞎买瞎卖，赔钱其实也挺不容易的，长期来看只不过是赚多赚少的区别而已。</p>
<h3 id="83-神奇的复利">8.3 神奇的复利</h3>
<p><img loading="lazy" src="../images/%E7%AC%AC%E5%85%AB%E7%AB%A0-%E4%BC%A0%E6%89%BF%E7%AF%87/5e0bd511a4ae5eca5d5468e0369afc7a8d9fba9f267e37fe23b70f111f3ac0fc.png" alt="复利计算表"  />
</p>
<p>表格的第一列是投资的时长，第一行是投资年复合收益率（“利滚利”模式）。</p>
<p><code>5%</code> 是银行理财产品的收益率，<code>15%</code> 是我们普通人稍加学习就有机会达到的收益率， <code>26%</code> 是专业投资者的收益率（只要我们方法对也是有机会达到了）。</p>
<h4 id="第1组数据单笔投资">第1组数据：<strong>单笔投资</strong></h4>
<p>如果投资水平能达到年化复合收益率是 26% 的话，<em>10年后本金将会翻10倍</em>。</p>
<p>如果我们只是把钱买成 5% 收益率的银行理财产品，<em>投资20年的收益率为2.65倍</em>。</p>
<p>对于专业投资者来说只需要4年就达到了。即使收益率只有15%，也可以提前13年达到。</p>
<p>这也说明了一个事实——<strong>投资能力越强，资金翻倍速度越快</strong>。</p>
<h4 id="第2组数据定期追加">第2组数据：<strong>定期追加</strong></h4>
<p>在第一组数据基础上，每年增加一个单位的投资金额，比如说第一年投资了10000元， 第二年、第三年……每年都增投10000元，数据就会变成这个样子。</p>
<p>同样是 26% 的年化收益率，第一组数据需要10年才能达到10倍、而在第二组数据里第 5年就达到了10倍，等于缩短了5年时间。</p>
<p>这就是我之前为啥强烈建议你“开源节流”的目的！</p>
<p>必须让自己每年都有工作结余的钱增加投资，如果不这么做，你很可能在欲望的驱使下成为一个月光族，达到财务自由的目标将会被成倍的拉长、甚至遥遥无期。</p>
<p>仔细看看第一和第二组数据，同样是每年投资10000元的情况下：（四舍五入）</p>
<ul>
<li>
<p>5%年复合收益率——在20年后增值3倍。每年定投1次、增值36倍。</p>
</li>
<li>
<p>15%年复合收益率——在20年后增值16倍。每年定投1次、增值119倍。</p>
</li>
<li>
<p>26%年复合收益率——在20年后增值102倍。每年定投1次、增值225倍。</p>
</li>
</ul>
<p>这就是“复利效应”结合持续增加本金的神奇魔力，不管你知不知道、信不信、利不利用，它就是在那默默的发挥着作用，被那些拥有财富思维的人所运用。</p>
<h4 id="第3组数据定期取出">第3组数据：<strong>定期取出</strong></h4>
<p>如果你投资了一笔钱，不仅不能每年追加资金，反而还要把投资收益中的一部分取出来花掉，比如说你每年要取出来20%拿去消费。</p>
<p>结果就会变成：</p>
<ul>
<li>
<p>5%年复合收益率——在7后变成穷光蛋。</p>
</li>
<li>
<p>15%年复合收益率——在10年后变成穷光蛋。</p>
</li>
<li>
<p>26%年复合收益率——本来3年就能翻倍，结果要在7年后才能翻倍，更何况这还要有着专业的投资水平才能达到呢。</p>
</li>
</ul>
<p><strong>在复利效应的影响 下，越是到后面、资金翻倍的速度越快</strong>。</p>
<h3 id="84-财富传承">8.4 财富传承</h3>
<p>通过不断学习提升自身能力，努力创造价值、为更多人提供帮助和服务、终于创富成功达到了财务自由的状态。</p>
<p>这时我们积累了一笔让我们能够衣食无忧的资金，然后又学会了通过股票投资的形式进行资金的管理和增值。 进而又会出现一个新的课题，那就是财富传承的问题。</p>
<p>“守业更比创业难”，创富，是自己努力就可以了。但要守住财富，却要靠子孙后代们的努力才行，如果缺乏教育上的认知和方法，结果往往就失控了。</p>
<p>“富不过三代”，父母不知道把最好的“财富思维”和富人之心传给孩子，反而把孩子娇惯成了“穷人之心”。在这个物欲加上快节奏时代，别说富三代、能维持30年都难。</p>
<p><strong>道德传家，十代以上，耕读传家次之，诗书传家又次之，富贵传家，不过三代</strong>。</p>
<blockquote>
<p>推荐看一部电影《活着》，看看葛大爷演的富贵和他爹、是怎么把他爷留下来的家产给败完 的。</p>
</blockquote>
<p>财富传承的核心在于——心，也就是在前面章节讲过的“富人之心”。</p>
<p>重要的是：自己要先做到、先成为一个活榜样。</p>
<p>进而才有机会把自己是如何“逆袭”的品质和能力传给孩子，让他们拥有承接财富的能力和德行，一代一代的传承下去。</p>
<h3 id="课后作业">课后作业</h3>
<ol>
<li>
<p>看完本篇关于“财富的积累、管理和传承”后，此刻你有什么样的感受和想法？</p>
<p>凭运气挣的钱，要凭实力还回去。拥有财富思维、掌握财富技巧、传承“富人之心”，才能将财富保持下去。</p>
</li>
<li>
<p>若是你很认同一朋的家族传承观念，那么接下来——你会为自己的家庭、乃至于家 族的崛起做些什么？凡事有舍才有得，你愿意为实现这一伟大目标而心甘情愿的放弃些什么？</p>
</li>
<li>
<p>你对本章内容哪些疑惑不解的地方？或是对本章内容有不认同的地方？</p>
<p>暂无</p>
</li>
</ol>
<hr>
<p>课程原文下载链接：<a href="../attachs/%E7%99%BD%E6%89%8B%E8%B5%B7%E5%AE%B6-%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92-2021%E7%89%88.pdf">白手起家-财富思维觉醒-2021版.pdf</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>第七章 自由篇</title>
      <link>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E4%B8%83%E7%AB%A0-%E8%87%AA%E7%94%B1%E7%AF%87/</link>
      <pubDate>Fri, 11 Feb 2022 17:21:11 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E4%B8%83%E7%AB%A0-%E8%87%AA%E7%94%B1%E7%AF%87/</guid>
      <description>本章做为《财务自由篇》的一个扩展，希望通过“我是如何看待和靠近终极自由的”，能够再给你多一些的帮助和启发。
也祝愿我们每个人都能早日觉悟、早日获得终极自由。
7.1 终极自由 个体终极自由包括三个方面：
身体上的自由 不仅可以去自己想去的任意地方，更是可以自由选择想做的事。自己的生命时间完全归 自己支配，彻底摆脱“不得已而为之”的无奈。
心灵上的自由 不仅克服了欲望上的贪婪，更是找到了自己的本心、知道自己是谁、更知道这辈子要做些什么。也因此开始变得更加追求精神上的享受、变得珍惜当下每一刻。
金钱上的自由 不仅能够很好的解决“生存问题”、不用再出卖生命时间去换钱。更是可以让我们更有信 心、更有底气的去追求想要实现的梦想。
其实早日实现金钱自由，还有更深刻的一层意义：
可以让我们“多活”很多年。
试想一下：老李在单位干到60岁才退休，虽然他并不喜欢所做的工作，但还是任劳任怨的坚 持了几十年。而老王自己创业30岁就实现财务自由，从此不再需要担心生存问题，每天都是 在做着他自己喜欢、很有激情的事情，真正的为自己而活。
从“为自己而活的时间”角度而言，老王是不是比老李多活了几十年？！
你是老李还是老王呢？ 我是隔壁老王 ;-)
其实想要达到真正的自由，说难也难、说容易也容易。
难的是，可能需要你改变多年形成的根深蒂固的价值观、和消费观。
容易的是，一旦你能有所认同、并下狠心要改变的时候、剩下的就是参考我说的去做——在创富的过程中一并调整自己的消费习惯，那么是很容易实现身心自由的。
7.2 自行觉悟 要想尽早获得终极自由，就必须琢磨清楚三个概念：“独立思考、清心寡欲、知足常乐”。然后再——想办法做到！
独立思考 脱离“羊群”、不能再被别“人”带着或赶着走了。
比如说：大众都在做什么、你也跟着做什么。大家最近都在关心什么、讨论什么，你也跟着节奏一块凑热闹。
如果你一直随波逐流、人云亦云，没有自己的长远规划、不为自己的理想目标而努力， 你就只能“被困在永恒的当下”。
当你开始不断的追问、拷问自己的时候，才是你真正觉醒的时候。
也只有你开始清醒过来，开始有了你自己的深入思考、有了更长远的想法、更有针对性的行动，进而才有可能得到你想要的结果，你才有机会——重获新生。
独立思考的目的是要——学会观察思考事物的多面性，这样才不会以 偏概全、或是被别有用心的人带偏了，或是被自己狭窄的认知给限制了一生。
清心寡欲 贪欲是导致我们大多数人“不自由、烦恼、痛苦”的主因。
也就是佛家说的五毒——“贪嗔痴慢疑”把我们的本心给屏障了、让我们看不到真相，所以才会迷失自我、浑浑噩噩的活着。
看看自己、再看看周围的人吧，是不是每天都活在：
攀比贪婪、焦虑恐慌、抱怨埋怨吐槽、愚痴是非不分、傲慢自大谁也不服”的状态里？ 却又不自知、不自省，更不接受自己是这样的人，对吗？
甚至还会找上一大堆理由来掩饰自己的“无明”，比如：
凭啥他们有，我就没有！我又不比他们差，别给我讲什么大道理，反正我是一定要买的！
凭啥他的比我的新、比我的好、比我有的还多啊！不行，我得超过他！
他不就是运气好、命好吗？他能力还没我强呢！给我个机会我一点都不会比他差！
别人不都这样吗？我买房、买车、买点轻奢品犒劳一下自己的努力，这不是很正 常？
不拼不行啊，以后花钱的地方多着呢！真心不敢停啊！
……
当一个人这么想的话，是不可能自由的，因为他 已经被贪欲困在永恒的当下了！生活中 确实有不少人已经资产千万、亿万了，可仍然觉得不够、没有安全感，每天就活在挣钱、挣钱、挣钱的状态里出不来。
要想改变现状，最简单有效的方法是——改变我们的心，从学会知足开始！
7.3 打开自由之锁 两个容易产生的争议。
人活着，如果没有一点欲望还活着啥意思啊？ 寡欲——不是说不能有任何欲望，而是要控制住好自己的欲望、不要过于贪婪就好。
其实人有欲望并不是什么坏事，关键是要学会管理好自己的欲望、引导欲望去追求更重要、更有价值的东西。
比如在《定位篇》里讲的那样： 你可以把自己的欲望和喜好上升一个很高的维度，转变成你的人生追求、变成你的事业。
这么做，不仅让你从一开始就是为自己而活、而且还活的很快乐、很充实，同时还有很大的机会因此创富成功、实现财富自由。
再比如说：还可以把欲望转到人生五福上，也是很值得我们花一辈子时间去追求的。
长寿：命不夭折、且福寿绵长；
富贵：钱财富足、且地位尊贵；
康宁：身体健康、且心灵安宁；
好德：宅心仁厚、且乐善好施；
善终：安详而逝、且无病无痛。</description>
      <content:encoded><![CDATA[<p>本章做为《财务自由篇》的一个扩展，希望通过“我是如何看待和靠近终极自由的”，能够再给你多一些的帮助和启发。</p>
<p>也祝愿我们每个人都能早日觉悟、早日获得终极自由。</p>
<h3 id="71-终极自由">7.1 终极自由</h3>
<p>个体终极自由包括三个方面：</p>
<ol>
<li>身体上的自由</li>
</ol>
<p>不仅可以去自己想去的任意地方，更是可以自由选择想做的事。自己的生命时间完全归
自己支配，彻底摆脱“不得已而为之”的无奈。</p>
<ol start="2">
<li>心灵上的自由</li>
</ol>
<p>不仅克服了欲望上的贪婪，更是找到了自己的本心、知道自己是谁、更知道这辈子要做些什么。也因此开始变得更加追求精神上的享受、变得珍惜当下每一刻。</p>
<ol start="3">
<li>金钱上的自由</li>
</ol>
<p>不仅能够很好的解决“生存问题”、不用再出卖生命时间去换钱。更是可以让我们更有信
心、更有底气的去追求想要实现的梦想。</p>
<blockquote>
<p>其实早日实现金钱自由，还有更深刻的一层意义：</p>
<p>可以让我们“多活”很多年。</p>
<p>试想一下：老李在单位干到60岁才退休，虽然他并不喜欢所做的工作，但还是任劳任怨的坚 持了几十年。而老王自己创业30岁就实现财务自由，从此不再需要担心生存问题，每天都是 在做着他自己喜欢、很有激情的事情，真正的为自己而活。</p>
<p>从“为自己而活的时间”角度而言，老王是不是比老李多活了几十年？！</p>
<p>你是老李还是老王呢？ <strong>我是隔壁老王</strong> ;-)</p>
</blockquote>
<p>其实想要达到真正的自由，说难也难、说容易也容易。</p>
<p>难的是，可能需要你改变多年形成的根深蒂固的价值观、和消费观。</p>
<p>容易的是，一旦你能有所认同、并下狠心要改变的时候、剩下的就是参考我说的去做——在创富的过程中一并调整自己的消费习惯，那么是很容易实现身心自由的。</p>
<h3 id="72-自行觉悟">7.2 自行觉悟</h3>
<p>要想尽早获得终极自由，就必须琢磨清楚三个概念：“<strong>独立思考、清心寡欲、知足常乐</strong>”。然后再——想办法做到！</p>
<h4 id="独立思考">独立思考</h4>
<p>脱离“羊群”、不能再被别“人”带着或赶着走了。</p>
<p>比如说：大众都在做什么、你也跟着做什么。大家最近都在关心什么、讨论什么，你也跟着节奏一块凑热闹。</p>
<p>如果你一直随波逐流、人云亦云，没有自己的长远规划、不为自己的理想目标而努力， 你就只能“被困在永恒的当下”。</p>
<p>当你开始不断的追问、拷问自己的时候，才是你真正觉醒的时候。</p>
<p>也只有你开始清醒过来，开始有了你自己的深入思考、有了更长远的想法、更有针对性的行动，进而才有可能得到你想要的结果，你才有机会——重获新生。</p>
<p>独立思考的目的是要——学会观察思考事物的多面性，这样才不会以 偏概全、或是被别有用心的人带偏了，或是被自己狭窄的认知给限制了一生。</p>
<h4 id="清心寡欲">清心寡欲</h4>
<p><strong>贪欲是导致我们大多数人“不自由、烦恼、痛苦”的主因。</strong></p>
<p>也就是佛家说的五毒——“贪嗔痴慢疑”把我们的本心给屏障了、让我们看不到真相，所以才会迷失自我、浑浑噩噩的活着。</p>
<p>看看自己、再看看周围的人吧，是不是每天都活在：</p>
<p><strong>攀比贪婪、焦虑恐慌、抱怨埋怨吐槽、愚痴是非不分、傲慢自大谁也不服”的状态里？ 却又不自知、不自省，更不接受自己是这样的人，对吗？</strong></p>
<p>甚至还会找上一大堆理由来掩饰自己的“无明”，比如：</p>
<ul>
<li>
<p>凭啥他们有，我就没有！我又不比他们差，别给我讲什么大道理，反正我是一定要买的！</p>
</li>
<li>
<p>凭啥他的比我的新、比我的好、比我有的还多啊！不行，我得超过他！</p>
</li>
<li>
<p>他不就是运气好、命好吗？他能力还没我强呢！给我个机会我一点都不会比他差！</p>
</li>
<li>
<p>别人不都这样吗？我买房、买车、买点轻奢品犒劳一下自己的努力，这不是很正
常？</p>
</li>
<li>
<p>不拼不行啊，以后花钱的地方多着呢！真心不敢停啊！</p>
</li>
<li>
<p>……</p>
</li>
</ul>
<p>当一个人这么想的话，是不可能自由的，因为他 已经被贪欲困在永恒的当下了！生活中 确实有不少人已经资产千万、亿万了，可仍然觉得不够、没有安全感，每天就活在挣钱、挣钱、挣钱的状态里出不来。</p>
<p>要想改变现状，最简单有效的方法是——改变我们的心，从学会知足开始！</p>
<h3 id="73-打开自由之锁">7.3 打开自由之锁</h3>
<p>两个容易产生的争议。</p>
<h4 id="人活着如果没有一点欲望还活着啥意思啊">人活着，如果没有一点欲望还活着啥意思啊？</h4>
<p>寡欲——不是说不能有任何欲望，而是要控制住好自己的欲望、不要过于贪婪就好。</p>
<p>其实人有欲望并不是什么坏事，关键是要学会管理好自己的欲望、引导欲望去追求更重要、更有价值的东西。</p>
<p>比如在《定位篇》里讲的那样： 你可以把自己的欲望和喜好上升一个很高的维度，转变成你的人生追求、变成你的事业。</p>
<p>这么做，不仅让你从一开始就是为自己而活、而且还活的很快乐、很充实，同时还有很大的机会因此创富成功、实现财富自由。</p>
<p>再比如说：还可以把欲望转到人生五福上，也是很值得我们花一辈子时间去追求的。</p>
<blockquote>
<p>长寿：命不夭折、且福寿绵长；</p>
<p>富贵：钱财富足、且地位尊贵；</p>
<p>康宁：身体健康、且心灵安宁；</p>
<p>好德：宅心仁厚、且乐善好施；</p>
<p>善终：安详而逝、且无病无痛。</p>
<p><cite>——《书经·洪范》</cite></p>
</blockquote>
<p>仔细琢磨一下这人生五福的含义，难道你不想成为一个被“五福加持”的人吗？你不想让自己的家人、乃至于族人都受到五福的庇佑吗？反正我想、也是我正在追求的。</p>
<h4 id="我明明现在什么都还没有拿什么知足拿什么满足啊难道要欺骗自己的真实感受吗">我明明现在什么都还没有，拿什么知足、拿什么满足啊？难道要欺骗自己的真实感受吗？</h4>
<p>活的好不好——在心、不在物。</p>
<p>举个比较极端点的生活状态，先感受一下再说。</p>
<p>如果你现在生活在一个战乱时期、兵荒马乱的，随时都可能有死掉的风险，这时你最关
心的是什么？</p>
<p>应该无非这3点吧：</p>
<ol>
<li>
<p>有口吃的、饿不死就行。至于可不可口、美不美味，不重要，对吗？</p>
</li>
<li>
<p>有件穿的衣服、不光着腚跑就行。至于好不好看、是不是牌子货，不重要，对吗？</p>
</li>
<li>
<p>有个住的地方、不被风吹雨打就行。至于房间大小、装修的是不是豪华，不重要，对吗？</p>
</li>
</ol>
<p>发现什么没有？</p>
<p>我们也只有“回到”艰苦的生存状态时，才更容易看清生活中的真相和假象，看清什么才是重要的、什么是没想象中那么重要的。也只有经常性的“忆苦思甜”，才能让我们的贪婪之车停下来。</p>
<p>在物质上，我们可以向“下”比，因此才容易让自己知足常乐。</p>
<p>在精神上，我们可以向“上”比，因此才容易让自己觉醒觉悟。</p>
<ol>
<li>
<p>吃的方面，简单一点、清淡一些，健康就好；</p>
</li>
<li>
<p>穿的方面，简单一点，干净一些，舒适就好；</p>
</li>
<li>
<p>住的方面，简单一点，整洁一些，心安就好；</p>
</li>
<li>
<p>行的方面，简单一点，节能一些，便捷就好；</p>
</li>
<li>
<p>育的方面，简单一点，内求一些，成长就好；</p>
</li>
<li>
<p>乐的方面，简单一点，纯粹一些，开心就好；</p>
</li>
<li>
<p>友的方面，简单一点，精简一些，交心就好；</p>
</li>
<li>
<p>事的方面，简单一点，取舍一些，享受就好。</p>
</li>
</ol>
<p>幸福在内、而非外。</p>
<p>简朴的生活，不仅让我们有了更多的时间关注内在精神上的追求、看到自己真正想要的是什么，有了更多时间去学习提升自我、去做自己喜欢的事情。更是可以把节俭下来的钱用作投资，而不再是消费消费再消费。</p>
<p>当我们开始这样想、这样做的时候，就已经算是踏上自由之路了。</p>
<p>对于物质需求：创富成功前、节俭，财务自由后、适度，凡事不要走极端。</p>
<p>财富的雪球能不能开始滚起来，就看你能不能做到——节流、开源。</p>
<h3 id="课后作业">课后作业</h3>
<ol>
<li>
<p>你认为限制自己无法获得自由、让自己放不下的东西都是些什么？思考下这些东西真的有自己认为的那么重要吗？</p>
<ul>
<li>
<p>想住豪宅、开豪车、让孩子接受好的教育。</p>
</li>
<li>
<p>有。O(∩_∩)O~</p>
</li>
</ul>
</li>
<li>
<p>接下来的你，会做出哪些调整？有的话请把你的计划详细写出来。</p>
<p>// TODO</p>
</li>
<li>
<p>大多数人认为——只有先获得金钱自由、先解决物质上的限制，才能获得身体的自由、去做自己喜欢的事。你能看出这种想法有什么问题吗？现在的你，是这样认为的吗？可以梳理一下自己对实现自由的想法、以及接下来要实现自由的做法，越详 详细越清晰、越好。</p>
<ul>
<li>
<p>自由在内、而非外。</p>
</li>
<li>
<p>不是。</p>
</li>
</ul>
<p>// TODO</p>
</li>
<li>
<p>你现在还有哪些疑惑不解的地方？或是对本章内容有不认同的地方？</p>
<p>暂无</p>
</li>
</ol>
<hr>
<p>课程原文下载链接：<a href="../attachs/%E7%99%BD%E6%89%8B%E8%B5%B7%E5%AE%B6-%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92-2021%E7%89%88.pdf">白手起家-财富思维觉醒-2021版.pdf</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>第六章 品牌篇</title>
      <link>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E5%85%AD%E7%AB%A0-%E5%93%81%E7%89%8C%E7%AF%87/</link>
      <pubDate>Fri, 11 Feb 2022 16:02:46 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E5%85%AD%E7%AB%A0-%E5%93%81%E7%89%8C%E7%AF%87/</guid>
      <description>我们从了解什么是“真正的财产”开始，搞清楚了积累财产的方向。
接着给自己装上了“富人之心”，明白了只有先积累自己的“才产”，才能让自己的价值产出越来越多、因此变得越来越值钱。
接着又了解了金钱是什么，知道了金钱是怎么来的、以及怎么让金钱更好的为我们服务，而不是成为金钱的奴隶。
然后又学会怎么找到了“贴合自己”的创富项目，知道了要尽快边学习边创作、拥有一个 能够给大众展示自己价值的作品。
一路走来，脑细胞死伤无数、头发脱落一地，终于来到了最后一关——打造自己的品牌。
我们每个人想要把“付出千辛万苦才掌握的才能”兑换成金钱利益上的回报，“出名”这一关是躲不掉的！不然没人知道你、没人信任你、没人支持你、都不买你的账，那之前的付出可不就白废了啊。
所以说，只有我们把品牌做好了——知道的人、信任和支持的人多了，利才会随之而来。
我们生活在这个物质丰裕的时代，有作品的人多不多？多如牛毛，对吗？那这其中，名气大的人多不多？屈指可数，对吗？！
同样是有作品的人，为啥只有1%、甚至1‰的人才成功成名了呢？
我猜，除了作品本身的能否满足受众需求之外，导致作品“默默无名”的主因，应该是——只有很少的人会“用心反复琢磨”应该怎么打造好自己的品牌。
6.1 好品牌的本质 具备“实用价值”——能够很好的解决受众的实际需求。
具备“情绪价值”——能够让我们用了感到舒服、感到开心、感到被关爱、感到它很 贴心、很懂我。
品牌背后是：“作品/产品”自身解决问题的价值、是创造者的价值观和人格魅力。
作品不过是做为“解决问题、价值释放”的载体、品牌不过是一个名字。
归根到底，还是要琢磨怎么把我们这个人做的更好，不断提高自身的“实用价值”和“情绪价值”。
做事先做人。
在我们所处的互联网商业时代，一个人的魅力大小、影响力的大小，不仅决定了身价，更是他可以快速变现的财产。
6.2 做好品牌 就是做好人 提升以下两点：
自己的“多技之长”越来越强、能把问题解决的越来越好。
“同理心”越来越强，能够多理解别人、多关心别人、多帮助别人。
平时多琢磨正事，凡事为别人多想一二、多做一二。
比如创作一篇文章：
会对人有用？真的能解决读者的一些问题？
会被人认可？有没有可能存在争议的地方？
会被人支持？让人感觉就是为帮助ta而写的
会被人喜欢？最起码不会讨人厌
会被人依赖？让人看了意犹未尽还想追着看
会让人震撼？让人忍不住推荐给朋友
想想看，若是我们真的做到了“对人有用、被人认可、支持、喜欢、依赖，忍不住推荐 给更多的人”，应该想不成名、想不成功都难吧！
因此，在品牌还没出名之前、甚至还没有作品的时候，最应该重视打造的是——更好的 自己、做个真正的好人。
6.3 做人坚决不能做什么 坚决不乱帮忙、瞎操心。
a. 不能在别人“没说需要”的时候、“没求助到我们”的时候，去主动帮忙，那样只会招人烦。
b. 别轻易用钱去帮人。
哪怕是再好的朋友、再亲的亲戚，也要慎重、慎重、再慎重。金钱是能量的一种，如果驾驭不了、或是没有智慧的拿去帮人，最后只会害人害己。
c. 啥叫瞎操心？
作为社会分工的一个螺丝钉，有事没事就在那讨论国家大事、国际形式。或是关心各种娱乐新闻做吃瓜群众……这就叫瞎操心。
除了把自己宝贵的生命时间白白流失掉、收获一点所谓的“谈资”，有何价值可言呢？
坚决不弄虚作假、掩饰自己的缺点和不足。
为了让我们从一开始就避开“总有一天会被人揭露、会被人打假”的风险。
只有我们做到了“真”，才能让我们经得起一切的质疑和推敲。
坚决不占任何人便宜，不管对方穷人还是富人、不管对方是陌生人还是熟悉的人。
吃亏才是福，这是大智慧。占小便宜早晚会吃大亏，这是小聪明，迟早聪明反被聪明误。
毫不吝啬的给予——正是富人、富足之心的表现。
6.4 用户是什么 想把品牌做好、做出名，就少不了受众用户这个主角。
一般认知，是流量？是数据？是消费者？是收割对象？如果谁这么想，我相信他是很难做好品牌 的，因为这种对用户的认知是不会得人心的，对吗？
真正的用户：
是一个个活生生的、有着真实情感需求的人；
是一群和我有着共同追求、志同道合的伙伴；
是需要我关心、需要我帮助的一个异地朋友；
是我要投入生命时间陪伴他一起成长的兄弟姐妹；
是塑造我、陪伴我、成就我非凡人生的家人。
这是一个层层递进的关系，对用户的认识越深刻，就越能激起我们内心无私的爱。带着这份无条件的爱，去帮助他们解决问题、带给他们快乐、从而走进他们的心。
也只有这样，爱才会回流向我们。</description>
      <content:encoded><![CDATA[<p>我们从了解什么是“真正的财产”开始，搞清楚了积累财产的方向。</p>
<p>接着给自己装上了“富人之心”，明白了只有先积累自己的“才产”，才能让自己的价值产出越来越多、因此变得越来越值钱。</p>
<p>接着又了解了金钱是什么，知道了金钱是怎么来的、以及怎么让金钱更好的为我们服务，而不是成为金钱的奴隶。</p>
<p>然后又学会怎么找到了“贴合自己”的创富项目，知道了要尽快边学习边创作、拥有一个 能够给大众展示自己价值的作品。</p>
<p>一路走来，脑细胞死伤无数、头发脱落一地，终于来到了最后一关——<strong>打造自己的品牌</strong>。</p>
<p>我们每个人想要把“付出千辛万苦才掌握的才能”兑换成金钱利益上的回报，“出名”这一关是躲不掉的！不然没人知道你、没人信任你、没人支持你、都不买你的账，那之前的付出可不就白废了啊。</p>
<p>所以说，只有我们把品牌做好了——知道的人、信任和支持的人多了，利才会随之而来。</p>
<p>我们生活在这个物质丰裕的时代，有作品的人多不多？多如牛毛，对吗？那这其中，名气大的人多不多？屈指可数，对吗？！</p>
<p>同样是有作品的人，为啥只有1%、甚至1‰的人才成功成名了呢？</p>
<p>我猜，除了作品本身的能否满足受众需求之外，导致作品“默默无名”的主因，应该是——<strong>只有很少的人会“用心反复琢磨”应该怎么打造好自己的品牌</strong>。</p>
<h3 id="61-好品牌的本质">6.1 好品牌的本质</h3>
<ol>
<li>
<p>具备“<strong>实用价值</strong>”——能够很好的解决受众的实际需求。</p>
</li>
<li>
<p>具备“<strong>情绪价值</strong>”——能够让我们用了感到舒服、感到开心、感到被关爱、感到它很 贴心、很懂我。</p>
</li>
</ol>
<p>品牌背后是：“作品/产品”自身解决问题的价值、是创造者的价值观和人格魅力。</p>
<p>作品不过是做为“解决问题、价值释放”的载体、品牌不过是一个名字。</p>
<p>归根到底，还是要琢磨怎么把我们这个人做的更好，不断提高自身的“<strong>实用价值</strong>”和“<strong>情绪价值</strong>”。</p>
<p>做事先做人。</p>
<p>在我们所处的互联网商业时代，一个人的魅力大小、影响力的大小，不仅决定了身价，更是他可以快速变现的财产。</p>
<h3 id="62-做好品牌-就是做好人">6.2 做好品牌 就是做好人</h3>
<p>提升以下两点：</p>
<ol>
<li>
<p>自己的“多技之长”越来越强、能把问题解决的越来越好。</p>
</li>
<li>
<p>“同理心”越来越强，能够多理解别人、多关心别人、多帮助别人。</p>
</li>
</ol>
<p>平时多琢磨正事，凡事为别人多想一二、多做一二。</p>
<p>比如创作一篇文章：</p>
<ul>
<li>
<p>会对人有用？真的能解决读者的一些问题？</p>
</li>
<li>
<p>会被人认可？有没有可能存在争议的地方？</p>
</li>
<li>
<p>会被人支持？让人感觉就是为帮助ta而写的</p>
</li>
<li>
<p>会被人喜欢？最起码不会讨人厌</p>
</li>
<li>
<p>会被人依赖？让人看了意犹未尽还想追着看</p>
</li>
<li>
<p>会让人震撼？让人忍不住推荐给朋友</p>
</li>
</ul>
<p>想想看，若是我们真的做到了“对人有用、被人认可、支持、喜欢、依赖，忍不住推荐 给更多的人”，应该想不成名、想不成功都难吧！</p>
<p>因此，在品牌还没出名之前、甚至还没有作品的时候，最应该重视打造的是——更好的 自己、做个真正的好人。</p>
<h3 id="63-做人坚决不能做什么">6.3 做人坚决不能做什么</h3>
<ol>
<li>
<p>坚决不乱帮忙、瞎操心。</p>
<p>a. 不能在别人“没说需要”的时候、“没求助到我们”的时候，去主动帮忙，那样只会招人烦。</p>
<p>b. 别轻易用钱去帮人。</p>
<p>哪怕是再好的朋友、再亲的亲戚，也要慎重、慎重、再慎重。金钱是能量的一种，如果驾驭不了、或是没有智慧的拿去帮人，最后只会害人害己。</p>
<p>c. 啥叫瞎操心？</p>
<p>作为社会分工的一个螺丝钉，有事没事就在那讨论国家大事、国际形式。或是关心各种娱乐新闻做吃瓜群众……这就叫瞎操心。</p>
<p>除了把自己宝贵的生命时间白白流失掉、收获一点所谓的“谈资”，有何价值可言呢？</p>
</li>
<li>
<p>坚决不弄虚作假、掩饰自己的缺点和不足。</p>
<p>为了让我们从一开始就避开“总有一天会被人揭露、会被人打假”的风险。</p>
<p>只有我们做到了“真”，才能让我们经得起一切的质疑和推敲。</p>
</li>
<li>
<p>坚决不占任何人便宜，不管对方穷人还是富人、不管对方是陌生人还是熟悉的人。</p>
<p><strong>吃亏才是福，这是大智慧。占小便宜早晚会吃大亏，这是小聪明，迟早聪明反被聪明误</strong>。</p>
<p><strong>毫不吝啬的给予——正是富人、富足之心的表现</strong>。</p>
</li>
</ol>
<h3 id="64-用户是什么">6.4 用户是什么</h3>
<p>想把品牌做好、做出名，就少不了受众用户这个主角。</p>
<p>一般认知，是流量？是数据？是消费者？是收割对象？如果谁这么想，我相信他是很难做好品牌
的，因为这种对用户的认知是不会得人心的，对吗？</p>
<p>真正的用户：</p>
<ul>
<li>
<p>是一个个活生生的、有着真实情感需求的人；</p>
</li>
<li>
<p>是一群和我有着共同追求、志同道合的伙伴；</p>
</li>
<li>
<p>是需要我关心、需要我帮助的一个异地朋友；</p>
</li>
<li>
<p>是我要投入生命时间陪伴他一起成长的兄弟姐妹；</p>
</li>
<li>
<p>是塑造我、陪伴我、成就我非凡人生的家人。</p>
</li>
</ul>
<p>这是一个层层递进的关系，对用户的认识越深刻，就越能激起我们内心无私的爱。带着这份无条件的爱，去帮助他们解决问题、带给他们快乐、从而走进他们的心。</p>
<p>也只有这样，爱才会回流向我们。</p>
<p>那时，才可能真的做到“对人有用、被人认可、支持、喜欢、依赖，忍不住推荐给 更多的人”的状态。</p>
<p>“富人之心”——<strong>创造价值、贡献给予、自利利他</strong>。</p>
<blockquote>
<p>以其无私，故能成其私；以其无欲，故能成其欲。</p>
<p><cite>——《道德经》</cite></p>
</blockquote>
<p>可惜的是，很多人都是反着做的。幸运的是，这反而是我们的机会。</p>
<p>希望有缘看到这里的朋友：</p>
<p>都能把以上财富思维变成自己的，通过不断的学习和提升、成为一个真正的好人，同时也能够早日拥有一个广为人知的好作品、好品牌。</p>
<h3 id="课后作业">课后作业</h3>
<ol>
<li>
<p>请觉察一下，自己身上有哪些不好的、可能招人烦的习性，并逐一列出。这么做是为了更好的了解自己、修正自己。（可以真诚的多问几个身边的人，请他们帮忙指出）</p>
<ul>
<li>
<p>瞎操心；</p>
</li>
<li>
<p>借钱给朋友，现在要不回来；</p>
</li>
<li>
<p>碰到朋友喜欢诉苦，负能量。</p>
</li>
</ul>
</li>
<li>
<p>请持续3~7天的时间，详细记录你每天的“生命时间”都具体消耗在了哪些地方？以及 对应不同的事件又分别投入了多少时间、并算出比例（包括吃喝拉撒睡）。然后再看一下这些不同的事件，哪些是在近期或未来会有价值回报的？哪些是无价值的生命浪费？你接下来会做出那些调整改变？</p>
<p>// TODO</p>
</li>
<li>
<p>找出生活中三个以上，你喜欢的好品牌名、和让你很讨厌的品牌名，并详细说出为什么？让你喜欢和让你讨厌的品牌服务或产品，哪些地方是你值得你学习效仿的、哪些地方是你要注意避免的？</p>
<p>喜欢的：</p>
<ul>
<li>小米，雷军个人影响力，产品物美价廉。</li>
</ul>
<p>不喜欢的：</p>
<ul>
<li>*度，移动端浏览器搜索结果，非要安装 app 才能看……</li>
</ul>
</li>
<li>
<p>你现在还有哪些疑惑不解的地方？或是对本章内容有不认同的地方？</p>
<p>暂无</p>
</li>
</ol>
<hr>
<p>课程原文下载链接：<a href="../attachs/%E7%99%BD%E6%89%8B%E8%B5%B7%E5%AE%B6-%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92-2021%E7%89%88.pdf">白手起家-财富思维觉醒-2021版.pdf</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>第五章 作品篇</title>
      <link>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E4%BA%94%E7%AB%A0-%E4%BD%9C%E5%93%81%E7%AF%87/</link>
      <pubDate>Fri, 11 Feb 2022 12:47:07 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E4%BA%94%E7%AB%A0-%E4%BD%9C%E5%93%81%E7%AF%87/</guid>
      <description>尽快提高自己的相关才能、先让自己变成一个“能对人有用、能把事做好”的人。然后再力求让自己的才能达到专业级水准，只有这样才有机会把自己的价值兑换成金钱。
通常我们看一个人值不值得关注、值不值得学习，会看他有没有自己的“作品”、有没有做出“成果”。
5.1 作品思维 以终为始 创造一个属于你自己的、对人有用的产品。
持续学习提升你的专项才能——解决相关问题的能力；
创造出属于你的、能解决他人重要问题的产品或作品；
吸引尽量多的受众看到你、关注你、了解你、信任你、支持你、依赖你。
5.2 以教为学 快速起步 教是最好的学“教学相长”才是学习成长最快的方法。
把每天学到的“有用内容”、它又能“解决什么问题”，通过写文章总结的方式发到 网上、分享给可能需要的人。通过持续不断的输出价值、传递价值，慢慢吸引读者。
把自己的学习成长笔记，作为人生的第一部作品。
你要让有这类需求的人看了后、觉得对他很有用、甚至感觉就是为他写的，这样才能让他产生共鸣和信任、并因此产生想要关注你的想法。
你最终的作品或产品，一定要达到这个效果、才能称得上有价值的，才有可能带给你想 要的成果。
5.3 学会正确学习 为什么学要学习？学以致用。
「学」：
要先了解理论知识、理解所学内容是做什么的？不是做什么的？有什么用？都能用在 哪？又应该怎么做是对的？怎么做是错的？有什么注意事项？等等相关一系列问题。
这是要通过“学”来搞清楚、搞明白。
「习」：
学了之后，要经过大量的练习、不断修正遇到的问题，直到正确熟练掌握、达到理想状态。
知识和方法本身是没用的，因此我们知道的再多也是没用的。只有当知识符合了一个 条件“用的上时候”它才会变的有用、有价值。
只为用而学、而习——这才是正确的学习方法。
5.4 创富从写作落地 毫不夸张的说，拥有强悍的文字表达能力，将会是我们一辈子最大的贴身财富。
不管是我们看的书、听的课、还是看的影视剧，这些一切形式的内容创造背后，都少不了通过文字写作来构思作品。
最内核的写作方法——就是原本要用嘴说的话，换成文字的形式而已。
只要你能用自己的话、以最简单的表达方式，把想要表达的【重点内容】说清楚、讲明白。让那些外行人都能听的懂、学得会。
写作技巧： 用“心”分享。
多站在读者的角度想一想，他究竟想要的是什么？我能不能满足他的需求？ 只有我们发自真心的去关爱他、希望他好的时候，我们写出来的文字才有感染力，才容易打动别人的心。
只写真实的、对人有用的内容。
因为真实，才经得起别人的质疑和推敲。因为有用，别人才愿意看、才会关注我们。然而有用的标准只有一个：人家按咱们说的方法去做了话，要容易落地、还要容易见到效果。
今后一定要紧紧的围绕这个核心去写、去分享，这也是事关成败的关键所在。
分享前，该讲究的地方还是要注意一下的。
排版：
文字排版得宽松点吧——字体大小、颜色、行间距都得让人看着很舒服、很容易通读下去才行。而不是上来就是一大堆密密麻麻的文字，分段少不说、连个标点符号也不舍得用，字体不大过大、就是过小，让人看不了两眼就看不下去了。
条理清晰：
句子通顺，条理清晰些、重点信息得突出。
要想写的好、就要写的足够多。
好的作品必然是一遍一遍磨练出来的。
写作对于创富的意义 对于要创富的人来说，把写作这项技能练好——绝对是刚需。
因为写作不仅会大大提高我们的沟通能力，同时还能很好锻炼到我们的思考力、逻辑力、表达力、前瞻力等重要的做事能力。
更重要的是，通过写作可以把我们的故事、经验等有价值的内容、变成一部“可以和多个人同时交流”的作品。
从长期来看——作品不仅代表的是你这个人、更是你价值大小的体现。哪怕一开始的作 品是免费分享的，只要它是对人有用的，就是有价值的。
我们由于免费分享、没有门槛，就会让更多的人看到，同时也容易得到更多人的认可、支持、和关注。甚至这其中会出现我们的贵人、我们的合作伙伴，这都大有可能。
通过练习写作打造自己的作品，是对于我们这些只能白手起家的人来说，成本最小的 创富方式——投入的是时间，换来的是价值、和机会。
多琢磨 有些人做事之所以容易成功，无非是他无意中养成了一个习惯——喜欢琢磨事。 当我们在一件事情上、琢磨的时间足够多了后，自然就会比别人想的更深、看的更远，做起来更有信心、也因此更容易成功。
接下来你要做的是——花时间琢磨清楚，自己的作品从 0 到 1 的细节流程、要怎么规划和落地。
课后作业 运用以终为始的思维，倒推出自己要达到预期成果——需要具备哪些必要条件？并琢磨出对应的落地细节和流程。</description>
      <content:encoded><![CDATA[<p><em>尽快提高自己的相关才能、先让自己变成一个“能对人有用、能把事做好”的人。然后再力求让自己的才能达到专业级水准，只有这样才有机会把自己的价值兑换成金钱。</em></p>
<p>通常我们看一个人值不值得关注、值不值得学习，会看他有没有自己的“作品”、有没有做出“成果”。</p>
<h3 id="51-作品思维-以终为始">5.1 作品思维 以终为始</h3>
<p>创造一个属于你自己的、对人有用的产品。</p>
<ul>
<li>
<p>持续学习提升你的专项才能——解决相关问题的能力；</p>
</li>
<li>
<p>创造出属于你的、能解决他人重要问题的产品或作品；</p>
</li>
<li>
<p>吸引尽量多的受众看到你、关注你、了解你、信任你、支持你、依赖你。</p>
</li>
</ul>
<h3 id="52-以教为学-快速起步">5.2 以教为学 快速起步</h3>
<p>教是最好的学“教学相长”才是学习成长最快的方法。</p>
<p>把每天学到的“有用内容”、它又能“解决什么问题”，通过写文章总结的方式发到 网上、分享给可能需要的人。通过持续不断的输出价值、传递价值，慢慢吸引读者。</p>
<p>把自己的学习成长笔记，作为人生的第一部作品。</p>
<blockquote>
<p>你要让有这类需求的人看了后、觉得对他很有用、甚至感觉就是为他写的，这样才能让他产生共鸣和信任、并因此产生想要关注你的想法。</p>
</blockquote>
<p>你最终的作品或产品，一定要达到这个效果、才能称得上有价值的，才有可能带给你想
要的成果。</p>
<h3 id="53-学会正确学习">5.3 学会正确学习</h3>
<p>为什么学要学习？学以致用。</p>
<p>「学」：</p>
<p>要先了解理论知识、理解所学内容是做什么的？不是做什么的？有什么用？都能用在 哪？又应该怎么做是对的？怎么做是错的？有什么注意事项？等等相关一系列问题。</p>
<p>这是要通过“学”来搞清楚、搞明白。</p>
<p>「习」：</p>
<p>学了之后，要经过大量的练习、不断修正遇到的问题，直到正确熟练掌握、达到理想状态。</p>
<p><em>知识和方法本身是没用的，因此我们知道的再多也是没用的。只有当知识符合了一个 条件“<strong>用的上时候</strong>”它才会变的有用、有价值。</em></p>
<p>只为用而学、而习——这才是正确的学习方法。</p>
<h3 id="54-创富从写作落地">5.4 创富从写作落地</h3>
<p>毫不夸张的说，拥有强悍的文字表达能力，将会是我们一辈子最大的贴身财富。</p>
<p>不管是我们看的书、听的课、还是看的影视剧，这些一切形式的内容创造背后，都少不了通过文字写作来构思作品。</p>
<p>最内核的写作方法——就是原本要用嘴说的话，换成文字的形式而已。</p>
<p>只要你能用自己的话、以最简单的表达方式，把想要表达的【重点内容】说清楚、讲明白。让那些外行人都能听的懂、学得会。</p>
<h4 id="写作技巧">写作技巧：</h4>
<ol>
<li>
<p>用“心”分享。</p>
<p>多站在读者的角度想一想，他究竟想要的是什么？我能不能满足他的需求？ 只有我们发自真心的去关爱他、希望他好的时候，我们写出来的文字才有感染力，才容易打动别人的心。</p>
</li>
<li>
<p>只写真实的、对人有用的内容。</p>
<p>因为真实，才经得起别人的质疑和推敲。因为有用，别人才愿意看、才会关注我们。然而有用的标准只有一个：人家按咱们说的方法去做了话，要容易落地、还要容易见到效果。</p>
<p>今后一定要紧紧的围绕这个核心去写、去分享，这也是事关成败的关键所在。</p>
</li>
<li>
<p>分享前，该讲究的地方还是要注意一下的。</p>
<p>排版：</p>
<p>文字排版得宽松点吧——字体大小、颜色、行间距都得让人看着很舒服、很容易通读下去才行。而不是上来就是一大堆密密麻麻的文字，分段少不说、连个标点符号也不舍得用，字体不大过大、就是过小，让人看不了两眼就看不下去了。</p>
<p>条理清晰：</p>
<p>句子通顺，条理清晰些、重点信息得突出。</p>
</li>
<li>
<p>要想写的好、就要写的足够多。</p>
<p>好的作品必然是一遍一遍磨练出来的。</p>
</li>
</ol>
<h4 id="写作对于创富的意义">写作对于创富的意义</h4>
<p>对于要创富的人来说，把写作这项技能练好——绝对是刚需。</p>
<p>因为写作不仅会大大提高我们的沟通能力，同时还能很好锻炼到我们的思考力、逻辑力、表达力、前瞻力等重要的做事能力。</p>
<p>更重要的是，通过写作可以把我们的故事、经验等有价值的内容、变成一部“<strong>可以和多个人同时交流</strong>”的作品。</p>
<p>从长期来看——作品不仅代表的是你这个人、更是你价值大小的体现。哪怕一开始的作 品是免费分享的，只要它是对人有用的，就是有价值的。</p>
<p>我们由于免费分享、没有门槛，就会让更多的人看到，同时也容易得到更多人的认可、支持、和关注。甚至这其中会出现我们的贵人、我们的合作伙伴，这都大有可能。</p>
<p>通过练习写作打造自己的作品，是对于我们这些只能白手起家的人来说，成本最小的 创富方式——投入的是时间，换来的是价值、和机会。</p>
<h3 id="多琢磨">多琢磨</h3>
<p>有些人做事之所以容易成功，无非是他无意中养成了一个习惯——喜欢琢磨事。 当我们在一件事情上、琢磨的时间足够多了后，自然就会比别人想的更深、看的更远，做起来更有信心、也因此更容易成功。</p>
<p>接下来你要做的是——花时间琢磨清楚，自己的作品从 0 到 1 的细节流程、要怎么规划和落地。</p>
<h3 id="课后作业">课后作业</h3>
<ol>
<li>
<p>运用<strong>以终为始</strong>的思维，倒推出自己要达到预期成果——需要具备哪些必要条件？并琢磨出对应的落地细节和流程。</p>
<p>// TODO</p>
</li>
<li>
<p>找出身边至少三件以上“让你认为优秀的、会重复买/或重复看、甚至忍不住推荐给朋友”的作品（包括书籍、影视等文创作品）、或实物商品，并详细说出你认为好在哪？其中最喜欢的地方是什么？值得让你学习效仿的地方又是什么？</p>
<p>Redmi airdots（蓝牙耳机）：自从有了它，通勤路上听了 1000 多个小时的音频节目。物美价廉 99 元，让只为听个响的我，不用花千把块钱的巨款买个蓝牙耳机。</p>
</li>
<li>
<p>找出身边至少三件以上“让你感到很平庸的、买过一次就不会有第二次”的作品、或实物商品，说出让你不满意的地方都有哪些？其中最不满意的一点是什么？如果你 是创造者，你会怎么做去解决这些问题？</p>
<p>// TODO</p>
</li>
<li>
<p>你现在还有哪些疑惑不解的地方？或是对本章内容有不认同的地方？</p>
<p>暂无</p>
</li>
</ol>
<hr>
<p>课程原文下载链接：<a href="../attachs/%E7%99%BD%E6%89%8B%E8%B5%B7%E5%AE%B6-%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92-2021%E7%89%88.pdf">白手起家-财富思维觉醒-2021版.pdf</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>第四章 定位篇</title>
      <link>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E5%AE%9A%E4%BD%8D%E7%AF%87/</link>
      <pubDate>Sun, 06 Feb 2022 22:33:06 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E5%AE%9A%E4%BD%8D%E7%AF%87/</guid>
      <description>找到有价值、有兴趣、有动力、很可能会创富成功的事情。
“假如现在你积累的财产已经够用了，自己想要的也全都得到满足了，同时父母和孩子 也都很好不需要你的照顾，这时候你还想做的事情是什么？”
因上努力、果上随缘。
4.1 选择做什么？ 第一步：找出没钱也会去做的事情
围绕着“兴趣爱好、痛苦烦恼”来找适合自己做的项目。
有两个原因：
一是，快乐和痛苦，是让人产生动力的两大的来源。 只有我们会积极主动去做的事情、或者不得不做的时候，才可能持续下去、才可能做好。
二是，自己就是用户、是全程参与者，可以很好的和他人产生共鸣、让人信服。
价值评分表
紧急 重要 人的刚需 受众人数多 愿为此花钱 需要持续花钱 需求长期存在 终身价值大 增肌 1 1 1 学赚钱 1 1 1 1 1 1 1 1 倒信用卡 1 1 1 1 1 终身价值 = 大概会重复购买次数的多少 x 单次购买的金额大小 乘积越大，终身价值越大，越值得做。
4.2 值得长久去做？ 第二步：想清楚这件事对你、对需求者来说，真的重要吗？
比如：
你能解决哪些实际生活问题？ 对生活又会产生哪些好的改变？ 你有没有让人无法拒绝的理由？ 这件事值得你花一辈子时间去做吗？ 你能提供的产品或服务会被受众持续很长时间、或很多次的需要吗？ 你的受众群体的“终身价值”大吗？ 4.3 向谁学习？ 第三步：找几个“你想成为的那个人”。
在当今时代，可以说咱们所需要的绝大数知识、方法，早已经存在了、有人在做了、并且可能已经做的很好了。
现在我们要做的就是——选出“做这件事”做的最好、最出名的几个人，以他们为榜样，然后学习他、跟随他、模仿他、直到在某些地方超越他而形成自己的独有特色。
注意两点：
尊师 注：老师指的是相关行业专家名人、低调的实战牛人、网红大V，包括健在的和已故的。
要知道，在古时候想要拜师学艺是一件很难的事！
如今，得益于互联网时代的发展，拜师学艺成了一件只要想、就能做的事，何其幸也啊！
多思考、分享、执行 记录、分享、教给别人。
4.4 七年要称王 第四步：七年磨一剑，自称王者。</description>
      <content:encoded><![CDATA[<p>找到有价值、有兴趣、有动力、很可能会创富成功的事情。</p>
<p>“<em><strong>假如现在你积累的财产已经够用了，自己想要的也全都得到满足了，同时父母和孩子 也都很好不需要你的照顾，这时候你还想做的事情是什么？</strong></em>”</p>
<p>因上努力、果上随缘。</p>
<h3 id="41-选择做什么">4.1 选择做什么？</h3>
<p>第一步：找出没钱也会去做的事情</p>
<p>围绕着“兴趣爱好、痛苦烦恼”来找适合自己做的项目。</p>
<p>有两个原因：</p>
<p>一是，快乐和痛苦，是让人产生动力的两大的来源。 只有我们会积极主动去做的事情、或者不得不做的时候，才可能持续下去、才可能做好。</p>
<p>二是，自己就是用户、是全程参与者，可以很好的和他人产生共鸣、让人信服。</p>
<p>价值评分表</p>
<table>
<thead>
<tr>
<th style="text-align:left"></th>
<th style="text-align:center">紧急</th>
<th style="text-align:center">重要</th>
<th style="text-align:center">人的刚需</th>
<th style="text-align:center">受众人数多</th>
<th style="text-align:center">愿为此花钱</th>
<th style="text-align:center">需要持续花钱</th>
<th style="text-align:center">需求长期存在</th>
<th style="text-align:center">终身价值大</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">增肌</td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:left">学赚钱</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
</tr>
<tr>
<td style="text-align:left">倒信用卡</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
</tr>
</tbody>
</table>
<blockquote>
<p>终身价值 = 大概会重复购买次数的多少 x 单次购买的金额大小
乘积越大，终身价值越大，越值得做。</p>
</blockquote>
<h3 id="42-值得长久去做">4.2 值得长久去做？</h3>
<p>第二步：想清楚这件事对你、对需求者来说，真的重要吗？</p>
<p>比如：</p>
<ul>
<li>你能解决哪些实际生活问题？</li>
<li>对生活又会产生哪些好的改变？</li>
<li>你有没有让人无法拒绝的理由？</li>
<li>这件事值得你花一辈子时间去做吗？</li>
<li>你能提供的产品或服务会被受众持续很长时间、或很多次的需要吗？</li>
<li>你的受众群体的“终身价值”大吗？</li>
</ul>
<h3 id="43-向谁学习">4.3 向谁学习？</h3>
<p>第三步：找几个“你想成为的那个人”。</p>
<p>在当今时代，可以说咱们所需要的绝大数知识、方法，早已经存在了、有人在做了、并且可能已经做的很好了。</p>
<p>现在我们要做的就是——选出“做这件事”做的最好、最出名的几个人，以他们为榜样，然后学习他、跟随他、模仿他、直到在某些地方超越他而形成自己的独有特色。</p>
<p>注意两点：</p>
<ol>
<li>尊师</li>
</ol>
<blockquote>
<p>注：老师指的是相关行业专家名人、低调的实战牛人、网红大V，包括健在的和已故的。</p>
</blockquote>
<p>要知道，在古时候想要拜师学艺是一件很难的事！</p>
<p>如今，得益于互联网时代的发展，拜师学艺成了一件只要想、就能做的事，何其幸也啊！</p>
<ol start="2">
<li>多思考、分享、执行</li>
</ol>
<blockquote>
<p>记录、分享、教给别人。</p>
</blockquote>
<h3 id="44-七年要称王">4.4 七年要称王</h3>
<p>第四步：七年磨一剑，自称王者。</p>
<p>给自己7年时间去实现自己最想做、最有价值做的那件事。</p>
<p>在这7年期间，你要把尽可能多的时间精力投入到相关的学习、掌握相关才能上，让自 己成为这个领域的王者，为受众提供有价值的帮助</p>
<p>每个成大事者都少不了这三样：心力、格局、思维。</p>
<p>在这个人心浮躁的时代，大多数人只追求眼前得失、追求你短平快、追求速成，却忽视了一个真相是——变化越快就越不不能持久，就越需要不断的重新开始、从头再来。</p>
<p>长期不变的、或是变化比较慢的“财 产”，才是我们应该追求和拥有的。</p>
<p>“慢，即是快；少，即是多；简，才为真”。</p>
<p>如果有选择：</p>
<ul>
<li>
<p>优先选择【能让人感到快乐】的事。</p>
<p>这样你也可以每天沉浸在快乐中、也因此成为一个充满了正能量的人。说实话，谁不喜欢跟充满正能量的人开开心心的相处呢。</p>
</li>
<li>
<p>反之，如果你选择【帮助别人摆脱痛苦】的事。</p>
<p>那么你要做好心理准备，通常生活在烦恼和痛苦中的人，多会充满了负能量，人也 因此常常说出一些抱怨、吐槽、挖苦讽刺他人的话，你跟这样的人相处、是很容易被他所感染的。</p>
</li>
</ul>
<h3 id="课后作业">课后作业</h3>
<ol>
<li>
<p>请结合自身情况，分别找出：</p>
<p>a. 让你感到很有乐趣、很有成就感、甚至忍不住推荐给朋友的“事或物”有哪些？</p>
<p>竟然想不到能让我有成就感、快乐有趣的事。</p>
<p>b. 让你感到焦虑、烦躁、崩溃、甚至很痛苦很受折磨的“事或物”有哪些？</p>
<p>一想到一屁股债，创业还没有起色、看不到为了，就焦虑、烦躁、崩溃……</p>
</li>
<li>
<p>结合学过前4章内容和作业，检查一下自己想做的事符合以下几点：</p>
<p>a. 大概率能够在未来百年之后还存在的需求，并且会随着自己解决问题的能力增加 而变得“越老越值钱”。</p>
<p>b. 此需求的受众人数足够多、生活中很常见，并且需要被持续解决或满足。</p>
<p>c. 此需求的受众“终身价值”比较大。</p>
<p>优选级：单次花费金额大、且重复购买次数多；</p>
<p>次优级：单次花费金额大、但重复购买次数少；</p>
<p>保底级：单次花费金额小、但重复购买次数多。</p>
<blockquote>
<p>还没想到想做的事。</p>
</blockquote>
</li>
<li>
<p>找出自己当下最应该跟着谁学习、以及自己可以效仿的榜样，并研究“老师、同行前 辈们”是怎么挣钱的？如果自己是他的付费客户，想想看为什么会花钱支持他、而不是别人？然后在试着分析出他们挣钱方式的优点和缺点？自己应该如何解决他们的缺点？</p>
<p>// TODO</p>
</li>
<li>
<p>请为你“想要做的事情”做一个价值估算，大概推导出自己要想达到一年挣到100万，需要达到哪些必要条件？以及达到这些条件需要做些什么准备或积累？</p>
<p>// TODO</p>
</li>
<li>
<p>现在的你，找到做“有机会成功创富”这件事的强大愿心了吗？无论有还是没有，都要如实的说出为什么，找到影响自己的因素？</p>
<p>没有，没有摆脱当前的持续无收入状态，心理负担较重。</p>
</li>
<li>
<p>你现在还有哪些疑惑不解的地方？或是对本章内容有不认同的地方？</p>
<p>暂无</p>
</li>
</ol>
<hr>
<p>课程原文下载链接：<a href="../attachs/%E7%99%BD%E6%89%8B%E8%B5%B7%E5%AE%B6-%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92-2021%E7%89%88.pdf">白手起家-财富思维觉醒-2021版.pdf</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>第三章 金钱篇</title>
      <link>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E4%B8%89%E7%AB%A0-%E9%87%91%E9%92%B1%E7%AF%87/</link>
      <pubDate>Sat, 05 Feb 2022 22:19:46 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E4%B8%89%E7%AB%A0-%E9%87%91%E9%92%B1%E7%AF%87/</guid>
      <description>想要轻松获得金钱，就必须先搞清楚3个问题：
钱究竟是什么？钱是怎么来的？钱应该怎么花——才是更有“利”的？
3.1 钱是什么？ 金钱的本质是一种用来“衡量和交换”价值的货币工具。
衡量价值 我们每个人目前的身价，就是“社会大众”对我们值多少钱的一个综合评估结果。
千万别动不动就抱怨社会不公、抱怨自己缺少施展才能的机会、抱怨家境不好，其实——根 本没那么回事！哪怕是真的缺乏机会、也是你自己从来不知道给自己创造罢了，怪不得别人。
这个时代最不缺的就是机会，缺的只是看见机会的“智慧之眼”、和勇于尝试的魄力。 所以！生活中一定少抱怨、少发牢骚。
这样做不仅是因为——抱怨的本质其实是自己无能和无奈的表现。
更是因为人在抱怨的时候，心里是充满了负能量的，这时候真正的高人、牛人是躲还躲不及呢，怎么可能找负能量的人合作呢，对吗？
所以，如果发现自己有抱怨的毛病，必须现在就重视起来、必须戒掉。别再动不动就像个怨 妇一样抱怨这抱怨那的，看上去你是在倾诉、其实是在不断的告诉别人自己很无能。
机会和好运都是可以调用“心念”的力量去创造的。
交换价值 想要挣钱多：
重要的是——自己得是一个对别人有用的人，先有价值了才有机会和别人做金钱交换。
更重要的是——自己得是一个**对很多人（越多越好）有大用（能解决别人的痛苦或 带给别人大乐）**的人。只有达到这样的状态，我们和被人交易的次数才会增多、交易的金额才会增大，两者相乘就是我们的超额回报。
3.2 钱是怎么来的？ 技法：一挣、二赚。 【挣】字左边是手、右边是争。很明显要靠争取、甚至是争抢 的方式，并且还要付出时间的代价才能得到金钱。 出卖时间兑换金钱。
【赚】字 “贝+兼” 很明显了，就是把钱合并起来拿它去挣钱。 提醒三点：
用钱赚钱的方式开始的越早越好，因为金钱永不眠。在投资正确的前提下、它是每天24小时都在为你打工挣钱。
必须投资参与自己熟悉的、有很大把握的事物。
必须把钱分散投资，不能全押宝到一个地方。否则你的投资很容易变成赌博。切记！！！
心法： 金钱除了是一种用来交换价值的货币，同时它还是一种能量体。所以它天生就会和那些拥有“富人之心”具备“财富思维”的人同频共振、相互吸引。
想方设法让自己拥有“富人之心”是第一要事，剩下的只是尽力去做那些能够利益众生、 帮助他们“摆脱痛苦获得快乐”的事就可以了。 当我们所思所想、所行所为都是符合财富之道的时候，金钱能量自然会跟我们产生共 振，源源不断的被我们吸引而来。
金钱能量是同时具备好的创造力（比如说让人更安定、更自在、更快乐）和不好的破坏力 （比如让人迷失了自己的心、成了它的奴隶、因它妻离子散、家破人亡）。 所以，我们一是要认清钱并学会正确的获取方法、二是要学会怎么利用好金钱的能量来为我 们服务。
3.3 钱更应该花在哪？ 消费、投资。
消费 越是在钱少的时候、人越要把钱花在自身的学习成长上
我发现很多人之所以不爱看书、不爱学习的根源，就在于学生时期经受了长达10多年的被逼 迫式的读书、学习、考试所造成的后遗症。
比如说，一看到书就犯困、一听到要学习新东西就产生畏难情绪，潜意识就想要应付、抗拒、和逃避。
所以，如果你是有孩子的人，千万别再傻傻的、粗暴的逼迫孩子看书了，越强迫适得其反。 培养阅读兴趣才是最重要的。
“如果可以的话，去尝试过一段时间简朴的生活吧”。
不因攀比、盲从、贪婪之心而消耗金钱，因为这是“我们用一段生命时间所换来的”，真 的是浪费不得啊。 我们更应该尽可能的把金钱能量，用来兑换那些“能提高我们生活质量的，也就是能让 我们生活的更心安、轻松、自在、快乐”的事物上。
投资 &amp;ldquo;金钱永不眠！在投资正确的前提下，它是每天24小时都在为你打工挣钱的。
必须先把“有限的钱和大把的时间”投资到自 己的“才”能积累上。
假设经过3年时间的学习积累：
你掌握了某种过人的才能，而且不会被轻易的替代或淘汰；
你能很好的解决别人的需求，因此变得有价值了、值钱了；
你把这个才能变成了产品或服务，竟然可以同时卖给很多人；
你后续依然在不断的完善产品或服务…
达到这个目标之后呢？
你可以把自己除了生活所需之外结余的钱，用于投资基金或股票类的金融产品，学习用 钱赚钱的投资方法，开始“挣钱 + 赚钱”两条腿走路的快速创富之路、从此开启躺赚模式。</description>
      <content:encoded><![CDATA[<p>想要轻松获得金钱，就必须先搞清楚3个问题：</p>
<p>钱究竟是什么？钱是怎么来的？钱应该怎么花——才是更有“利”的？</p>
<h3 id="31-钱是什么">3.1 钱是什么？</h3>
<p>金钱的本质是一种用来“衡量和交换”价值的货币工具。</p>
<h4 id="衡量价值">衡量价值</h4>
<p><em><strong>我们每个人目前的身价，就是“社会大众”对我们值多少钱的一个综合评估结果。</strong></em></p>
<blockquote>
<p>千万别动不动就抱怨社会不公、抱怨自己缺少施展才能的机会、抱怨家境不好，其实——根 本没那么回事！<em><strong>哪怕是真的缺乏机会、也是你自己从来不知道给自己创造罢了，怪不得别人。</strong></em><br>
这个时代最不缺的就是机会，缺的只是看见机会的“智慧之眼”、和勇于尝试的魄力。 所以！生活中一定少抱怨、少发牢骚。<br>
这样做不仅是因为——<em><strong>抱怨的本质其实是自己无能和无奈的表现</strong></em>。<br>
更是因为人在抱怨的时候，心里是充满了负能量的，这时候真正的高人、牛人是躲还躲不及呢，怎么可能找负能量的人合作呢，对吗？<br>
所以，如果发现自己有抱怨的毛病，必须现在就重视起来、必须戒掉。别再动不动就像个怨 妇一样抱怨这抱怨那的，看上去你是在倾诉、其实是在不断的告诉别人自己很无能。</p>
</blockquote>
<p><em><strong>机会和好运都是可以调用“心念”的力量去创造的。</strong></em></p>
<h4 id="交换价值">交换价值</h4>
<p>想要挣钱多：</p>
<ol>
<li>
<p>重要的是——自己得是一个<strong>对别人有用</strong>的人，先有价值了才有机会和别人做金钱交换。</p>
</li>
<li>
<p>更重要的是——自己得是一个**对很多人（越多越好）有大用（能解决别人的痛苦或 带给别人大乐）**的人。只有达到这样的状态，我们和被人交易的次数才会增多、交易的金额才会增大，两者相乘就是我们的超额回报。</p>
</li>
</ol>
<h3 id="32-钱是怎么来的">3.2 钱是怎么来的？</h3>
<h4 id="技法一挣二赚">技法：一挣、二赚。</h4>
<ul>
<li>【挣】字左边是手、右边是争。很明显要靠争取、甚至是争抢
的方式，并且还要付出时间的代价才能得到金钱。</li>
</ul>
<p>出卖时间兑换金钱。</p>
<ul>
<li>【赚】字 “贝+兼” 很明显了，就是把钱合并起来拿它去挣钱。</li>
</ul>
<p>提醒三点：</p>
<ol>
<li>
<p>用钱赚钱的方式开始的越早越好，因为金钱永不眠。在投资正确的前提下、它是每天24小时都在为你打工挣钱。</p>
</li>
<li>
<p>必须投资参与自己熟悉的、有很大把握的事物。</p>
</li>
<li>
<p>必须把钱分散投资，不能全押宝到一个地方。否则你的投资很容易变成赌博。切记！！！</p>
</li>
</ol>
<h4 id="心法">心法：</h4>
<p>金钱除了是一种用来交换价值的货币，同时它还是一种能量体。所以它天生就会和那些拥有“富人之心”具备“财富思维”的人同频共振、相互吸引。</p>
<p>想方设法让自己拥有“富人之心”是第一要事，剩下的只是尽力去做那些能够利益众生、 帮助他们“摆脱痛苦获得快乐”的事就可以了。 当我们所思所想、所行所为都是符合财富之道的时候，金钱能量自然会跟我们产生共 振，源源不断的被我们吸引而来。</p>
<p>金钱能量是同时具备好的创造力（比如说让人更安定、更自在、更快乐）和不好的破坏力 （比如让人迷失了自己的心、成了它的奴隶、因它妻离子散、家破人亡）。 所以，我们一是要认清钱并学会正确的获取方法、二是要学会怎么利用好金钱的能量来为我 们服务。</p>
<h3 id="33-钱更应该花在哪">3.3 钱更应该花在哪？</h3>
<p>消费、投资。</p>
<h4 id="消费">消费</h4>
<p><strong>越是在钱少的时候、人越要把钱花在自身的学习成长上</strong></p>
<blockquote>
<p>我发现很多人之所以不爱看书、不爱学习的根源，就在于学生时期经受了长达10多年的被逼 迫式的读书、学习、考试所造成的后遗症。<br>
比如说，一看到书就犯困、一听到要学习新东西就产生畏难情绪，潜意识就想要应付、抗拒、和逃避。<br>
所以，如果你是有孩子的人，千万别再傻傻的、粗暴的逼迫孩子看书了，越强迫适得其反。 培养阅读兴趣才是最重要的。</p>
</blockquote>
<p><em><strong>“如果可以的话，去尝试过一段时间简朴的生活吧”。</strong></em></p>
<p>不因攀比、盲从、贪婪之心而消耗金钱，因为这是“我们用一段生命时间所换来的”，真 的是浪费不得啊。 我们更应该尽可能的把金钱能量，用来兑换那些“能提高我们生活质量的，也就是能让
我们生活的更心安、轻松、自在、快乐”的事物上。</p>
<h4 id="投资">投资</h4>
<p><em><strong>&ldquo;金钱永不眠！在投资正确的前提下，它是每天24小时都在为你打工挣钱的。</strong></em></p>
<p>必须先把“有限的钱和大把的时间”投资到自 己的“才”能积累上。</p>
<p>假设经过3年时间的学习积累：</p>
<ol>
<li>
<p>你掌握了某种过人的才能，而且不会被轻易的替代或淘汰；</p>
</li>
<li>
<p>你能很好的解决别人的需求，因此变得有价值了、值钱了；</p>
</li>
<li>
<p>你把这个才能变成了产品或服务，竟然可以同时卖给很多人；</p>
</li>
<li>
<p>你后续依然在不断的完善产品或服务…</p>
</li>
</ol>
<p>达到这个目标之后呢？</p>
<p>你可以把自己除了生活所需之外结余的钱，用于投资基金或股票类的金融产品，学习用 钱赚钱的投资方法，开始“<strong>挣钱 + 赚钱</strong>”两条腿走路的快速创富之路、从此开启躺赚模式。</p>
<p><em><strong>&ldquo;以钱生钱——不仅是赚钱的最高阶，也是富人们最重视的生财之道。</strong></em></p>
<h3 id="课后作业">课后作业</h3>
<ol>
<li>
<p>为什么越是穷、急，就越是挣不到钱？你现在能“看到”导致这种现象背后的因素有 哪些吗？</p>
</li>
<li>
<p>为什么穷人爱存钱到银行？为什么富人爱从银行借钱？银行又是靠什么赚钱？</p>
<p>穷人只会挣不会赚。</p>
<p>富人会挣会赚。</p>
<p>靠把穷人存的钱借出去的利息挣钱。</p>
</li>
<li>
<p>时间、金钱是你创富的“本钱”，回顾一下你这两个最重要的本钱都用在哪了？现在知道为啥自己的金钱总是处于“匮乏或不够富裕”的状态了？你还要继续下去吗？！</p>
<p>时间虚度，金钱没有。</p>
<p>目光短浅，缺乏认知。</p>
<p>NO！</p>
</li>
<li>
<p>要想赚钱，就得先有本钱。你现在拥有或掌握的“贝+才”哪些可以作为你创富的本钱？其中最多的本钱又是哪一种？你重视它们了吗？你让它们为你创造效益了吗？你现在有没有意识到自己哪里做错了吗？你接下来你会怎么做？</p>
<p>时间、知识。</p>
<p>时间。</p>
<p>没重视。</p>
<p>没创造效益。</p>
<p>缺乏执行力。</p>
<p>身体力行，行动起来。</p>
</li>
<li>
<p>你是一个对别人有用、对N多人有用的人吗？ 如果是的话，你对别人有什么用呢？如果你是自己的潜在客户，你愿意花钱购买自己的服务或产品吗？你愿意持续花钱使用自己的服务或产品吗？ 如果不是的话，原因是什么？你接下来要怎么做才能变成一个对N多人有用的人？</p>
<p>有点用。</p>
<p>编程技能。</p>
<p>不愿意。</p>
<p>不愿意。</p>
<p>产品没有吸引力，不能解决客户的问题。</p>
<p>优化体验，从客户的客户的角度出发，帮客户提升效率，赚到钱。</p>
</li>
<li>
<p>你现在一天的工作时间值多少钱？你知道自己应该“做些什么”才能变得更值钱？</p>
<p>500￥。</p>
<p>提升专业技能。</p>
</li>
<li>
<p>朋友找你借走一万元，但还款时间不定。你又特要面子、不好意思要利息、更不好意思让写借据。那么你会因此承担的风险都有哪些？又会因把钱借给别人而损失多少钱？（注：暂定银行理财产品收益率5%、购买股票基金收益率10%）</p>
<p>本金收不回来、朋友没法做。</p>
<p>$$F = 10000 * （1 + 0.1）^n$$</p>
</li>
<li>
<p>假设你现在有足够的金钱去做你想做的事情，请你根据自己认为的重要程度、排列出10个你会用金钱去实现的人生目标。</p>
<ul>
<li>还债</li>
<li>改善当前居住环境、老家居住环境</li>
<li>给老大换小学</li>
<li>带家人旅游：国内外</li>
<li>学表演、演戏，(✿◡‿◡)</li>
<li>&hellip;想到再说</li>
</ul>
</li>
<li>
<p>凡事均多面性。金钱如果会带来好处，必然也会带来坏处。 请列出你认为拥有大量的金钱后、有可能给自己的生活带来负面影响的10种可能性。以及自己应该怎么智慧的规避掉这些负面影响？</p>
<p>啥？有钱还有坏处？原谅我真没想到。</p>
</li>
<li>
<p>如果“金钱之神”表示你没赚钱的命，你依然没钱也要去做的10件事情是什么？如果 其中有和第8条重复的事情，请说出为啥“不管有钱还是没钱”自己都必须去做的动机是什么？</p>
<ul>
<li>还债 「这没啥说的」</li>
<li>改善当前居住环境、老家居住环境 「现在在老家过年，快冻死了」</li>
</ul>
</li>
<li>
<p>你现在还有哪些疑惑不解的地方？或是对本章内容有不认同的地方？</p>
<p>没有</p>
</li>
</ol>
<hr>
<p>课程原文下载链接：<a href="../attachs/%E7%99%BD%E6%89%8B%E8%B5%B7%E5%AE%B6-%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92-2021%E7%89%88.pdf">白手起家-财富思维觉醒-2021版.pdf</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>第二章 富人篇</title>
      <link>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E4%BA%8C%E7%AB%A0-%E5%AF%8C%E4%BA%BA%E7%AF%87/</link>
      <pubDate>Sat, 05 Feb 2022 22:02:01 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E4%BA%8C%E7%AB%A0-%E5%AF%8C%E4%BA%BA%E7%AF%87/</guid>
      <description>心念——内心感受“最为强烈”的那些念头，心念会激发“心力”。
心力——是一种驱动着我们宁可不吃不喝不睡觉，也必须要做“某些事”的那股子劲，甚至有些人不顾生命危险还要去做的那种强大驱动力。
心念越强、心力越强，越能坚定不移的去做、也就越容易做成事。而那种做啥啥不行、 做啥都容易半途而废的人，就是严重缺乏心念和心力的表现。
片单 「大染坊」电视剧
「1942」
地主对长工说：拴柱，到了山西，你还跟我，别看我现在倒了，但是我知道怎么还能挣到 钱、怎么从一个穷人变成财主，给我十年，你大爷我还是东家。 拴柱说：好啊东家，我到时候还给你当长工！
课后作业 回看课前作业，自己是怎么用掉那5000万的？评判一下之前的自己是什么“心”？对 照自己当前的生活状态“心和相”是一致的吗？现在的你，是必须做出改变？还是继续保持躺平不动？
部分是穷人心，部分是富人心。
一致，穷人心、相。
做出改变。
请总结出——学完本章内容后的收获和启发有哪些？对你的思想观念产生了哪些明显的影响？
相由心生，心之所向，身之所往。
从现在开始，你会做出哪些生活和工作上的调整？从而让自己像富人一样的去想、去做。请具体写出来，让自己的富人之心变得清晰明确。
身体力行、转换心态。
找出你有所了解的一些富人和穷人，根据本章所讲内容、分别验证一下他们之所以呈现出的“相”与“心”的关联是否一致？如果不一致，可试着思考下这种“不对应”的状态能否持续到下一代？
//
现在你有成为富人有信心？如果有、为什么？如果没有、又是为什么？
有，做不了富二代，就做个富一代。
你现在还有哪些疑惑不解的地方？或是对本章内容有不认同的地方？
没有。
课程原文下载链接：白手起家-财富思维觉醒-2021版.pdf</description>
      <content:encoded><![CDATA[<p>心念——内心感受“最为强烈”的那些念头，心念会激发“心力”。</p>
<p>心力——是一种驱动着我们宁可不吃不喝不睡觉，也必须要做“某些事”的那股子劲，甚至有些人不顾生命危险还要去做的那种强大驱动力。</p>
<p>心念越强、心力越强，越能坚定不移的去做、也就越容易做成事。而那种做啥啥不行、 做啥都容易半途而废的人，就是严重缺乏心念和心力的表现。</p>
<h3 id="片单">片单</h3>
<ul>
<li>
<p>「大染坊」电视剧</p>
</li>
<li>
<p>「1942」</p>
<blockquote>
<p>地主对长工说：拴柱，到了山西，你还跟我，别看我现在倒了，但是我知道怎么还能挣到 钱、怎么从一个穷人变成财主，给我十年，你大爷我还是东家。 拴柱说：好啊东家，我到时候还给你当长工！</p>
</blockquote>
</li>
</ul>
<h3 id="课后作业">课后作业</h3>
<ol>
<li>
<p>回看课前作业，自己是怎么用掉那5000万的？评判一下之前的自己是什么“心”？对 照自己当前的生活状态“心和相”是一致的吗？现在的你，是必须做出改变？还是继续保持躺平不动？</p>
<p>部分是穷人心，部分是富人心。</p>
<p>一致，穷人心、相。</p>
<p>做出改变。</p>
</li>
<li>
<p>请总结出——学完本章内容后的收获和启发有哪些？对你的思想观念产生了哪些明显的影响？</p>
<p>相由心生，心之所向，身之所往。</p>
</li>
<li>
<p>从现在开始，你会做出哪些生活和工作上的调整？从而让自己像富人一样的去想、去做。请具体写出来，让自己的富人之心变得清晰明确。</p>
<p>身体力行、转换心态。</p>
</li>
<li>
<p>找出你有所了解的一些富人和穷人，根据本章所讲内容、分别验证一下他们之所以呈现出的“相”与“心”的关联是否一致？如果不一致，可试着思考下这种“不对应”的状态能否持续到下一代？</p>
<p>//</p>
</li>
<li>
<p>现在你有成为富人有信心？如果有、为什么？如果没有、又是为什么？</p>
<p>有，做不了富二代，就做个富一代。</p>
</li>
<li>
<p>你现在还有哪些疑惑不解的地方？或是对本章内容有不认同的地方？</p>
<p>没有。</p>
</li>
</ol>
<hr>
<p>课程原文下载链接：<a href="../attachs/%E7%99%BD%E6%89%8B%E8%B5%B7%E5%AE%B6-%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92-2021%E7%89%88.pdf">白手起家-财富思维觉醒-2021版.pdf</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>第一章 财务自由篇</title>
      <link>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E4%B8%80%E7%AB%A0-%E8%B4%A2%E5%8A%A1%E8%87%AA%E7%94%B1%E7%AF%87/</link>
      <pubDate>Sat, 05 Feb 2022 21:56:28 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/wealth/thinking/%E7%AC%AC%E4%B8%80%E7%AB%A0-%E8%B4%A2%E5%8A%A1%E8%87%AA%E7%94%B1%E7%AF%87/</guid>
      <description>1.1 「财」字解读 长期来看——能够持续产生价值（被人需要）的生产资料，并且具备【保值、增值、快 速变现、甚至时间越长越值钱】的性质，才称得上真正的财产或资产。
注解：
长期：是否符合长期需求（百年以上时间跨度）；
产生价值：农场生产粮食、酒厂产酒、房租出租、医生通过医术治病；
被人需要：以前、现在、未来依然需要（刚需最好）。如住房、喝酒、学艺、梦想、成名；
保值：不会随着时代变化而大幅度贬值、甚至变得一文不值；
增值：随着生产销售增加产品或服务而换取更多钱币、或商业市场变化而涨价；
快速变现：可在1~3天内兑换成市场货币（现代的纸币、古代的金银币）；
时间越长越值钱：核心是时间价值造成的稀缺性、不可复制性。随着口碑、经验的积累而不断升值的老师、手艺人、医生。存放百年以上的老酒。
财产包括有型和无型两种。
「贝」
贝壳是中国历史上最早出现的货币，是最原始的等价交换物。「贝」代表有型的、看得见、摸得着、长期来看具备价值交换属性的“东西”。
有形财产的“含金量”，是会随着时代的变化而发生改变的。例如：古董字画、房子。
钱 ≠ 财产
如果不能想方设法的让钱生钱、并且生钱的速度要大于贬值（通货膨胀）速度的话， 钱就会不断的缩水。
过去十年（现在是2022年2月）我国的通货膨胀率为6.5%，如果持续下去的话，现在存个100万的现金到银行里，30年后就会只剩下13.3万的购买力。
计算公式：1000000*(1-6.5%)^30=133,152
如果你能通过学习投资，每年都能稳定获利15%，那么现在的100万，将会在30年后变 成6621万。
计算公式：1000000*(1+15%)^30=66,211,772
投资的法宝8个字——持续投入、复利增长。
「才」
才，代表的是无形的、我们看不见也摸不着的，但却对大众有用的才能。
比如：教人知识和技能的老师、治病的医生（特别是心理医生）、还有照顾孩子的保 姆、照顾老人的护工…… 从长期来看这些职业所具备的无形的才能，都是被人需要的服 务、也都是“值钱”的、可以顺利变现的，、就可以把它当做财产或资产。
1.2 「务」字解读 任务，赚钱——尽早实现财务自由，是成年人的第一要务。
一穷二白的时候，把时间、精力用在「才能」的积累上。
1.3 「自由」解读 一般认为：完成、跨越了财务的积累就自由了。
事实并不是这样的。
有钱的人不一定是自由的，甚至是越有钱越不自由，人越焦虑、甚至越空虚。
比如说： 生意越做越大、随之而来的事情也越来越多、要投入到工作上的时间也越来越多，这种状态下哪有自由可言，虽然钱挣是越来越多了，但人却越来越不自由了。 而他，也俨然不知自己已经成了一只拉着金磨盘的驴。
再比如说： 有些人可能挣的钱这辈子都衣食无忧了，但一想到将来，孩子要上大学、要结婚、要买房买车、可能还要花钱给他跑工作等等等等。再加上自己还要留下足够的养老钱、万一生场大病咋办？然而这种对未来不确定的焦虑和恐慌，会让一个人瞬间对生活失去安全感。
因此可见，只是有钱，并不一定就能获得自由。
真正的自由：内在心灵上的宁静与淡然、外在身体上的自由与自在。
容易满足、不再贪婪。
1.4 财务自由的标准 当一个人再也不用为了满足「生活必需」，而把自己最宝贵的时间拿去卖给别人换钱 了，这时ta自然就达到财务自由的状态。
1.5 财务自由之后 在之后的家族财富积累、财富管理、家族传承、人生圆满，都是我们接着要面对的一个 个的课题。
课后作业 请严格按照本章对财产的定义分析，为以下符合财产的选项打分。（ 符合一项打1分、不确定为空） 符合长期 持续产生价值 被人需要 保值 增长 快速变现 越久越值钱 总分 刚需 纸币 1 1 金银 1 1 1 3 珠宝 1 1 古玩 1 1 字画 1 1 汽车 1 1 奢侈品 1 1 房子 1 1 白酒厂 1 1 1 1 1 5 √ 农场 1 1 1 1 1 5 √ 优质公司股票 1 1 1 1 1 1 6 √ 时间 1 1 1 1 1 1 1 7 √ 健康 1 1 1 1 1 1 1 7 √ 知识 1 1 1 1 1 1 1 7 √ 技艺 1 1 1 1 1 1 1 7 √ 影响力 1 1 1 1 1 1 6 √ 梦想 1 1 1 1 4 评分完后，请分别说出：</description>
      <content:encoded><![CDATA[<h3 id="11-财字解读">1.1 「财」字解读</h3>
<p>长期来看——能够持续产生价值（被人需要）的生产资料，并且具备【保值、增值、快
速变现、甚至时间越长越值钱】的性质，才称得上真正的财产或资产。</p>
<p>注解：</p>
<blockquote>
<p>长期：是否符合长期需求（百年以上时间跨度）；</p>
<p>产生价值：农场生产粮食、酒厂产酒、房租出租、医生通过医术治病；</p>
<p>被人需要：以前、现在、未来依然需要（刚需最好）。如住房、喝酒、学艺、梦想、成名；</p>
<p>保值：不会随着时代变化而大幅度贬值、甚至变得一文不值；</p>
<p>增值：随着生产销售增加产品或服务而换取更多钱币、或商业市场变化而涨价；</p>
<p>快速变现：可在1~3天内兑换成市场货币（现代的纸币、古代的金银币）；</p>
<p>时间越长越值钱：核心是时间价值造成的稀缺性、不可复制性。随着口碑、经验的积累而不断升值的老师、手艺人、医生。存放百年以上的老酒。</p>
</blockquote>
<p>财产包括有型和无型两种。</p>
<p>「贝」</p>
<p>贝壳是中国历史上最早出现的货币，是最原始的等价交换物。「贝」代表有型的、看得见、摸得着、长期来看具备价值交换属性的“东西”。</p>
<p>有形财产的“含金量”，是会随着时代的变化而发生改变的。例如：古董字画、房子。</p>
<p>钱 ≠ 财产</p>
<p>如果不能想方设法的让钱生钱、并且生钱的速度要大于贬值（通货膨胀）速度的话，
钱就会不断的缩水。</p>
<p>过去十年（现在是2022年2月）我国的通货膨胀率为6.5%，如果持续下去的话，现在存个100万的现金到银行里，30年后就会只剩下13.3万的购买力。</p>
<blockquote>
<p>计算公式：1000000*(1-6.5%)^30=133,152</p>
</blockquote>
<p>如果你能通过学习投资，每年都能稳定获利15%，那么现在的100万，将会在30年后变
成6621万。</p>
<blockquote>
<p>计算公式：1000000*(1+15%)^30=66,211,772</p>
</blockquote>
<p>投资的法宝8个字——持续投入、复利增长。</p>
<p>「才」</p>
<p>才，代表的是无形的、我们看不见也摸不着的，但却对大众有用的才能。</p>
<p>比如：教人知识和技能的老师、治病的医生（特别是心理医生）、还有照顾孩子的保
姆、照顾老人的护工…… 从长期来看这些职业所具备的无形的才能，都是被人需要的服
务、也都是“值钱”的、可以顺利变现的，、就可以把它当做财产或资产。</p>
<h3 id="12-务字解读">1.2 「务」字解读</h3>
<p>任务，赚钱——尽早实现财务自由，是成年人的第一要务。</p>
<p>一穷二白的时候，把时间、精力用在「才能」的积累上。</p>
<h3 id="13-自由解读">1.3 「自由」解读</h3>
<p>一般认为：完成、跨越了财务的积累就自由了。</p>
<p>事实并不是这样的。</p>
<p>有钱的人不一定是自由的，甚至是越有钱越不自由，人越焦虑、甚至越空虚。</p>
<p>比如说： 生意越做越大、随之而来的事情也越来越多、要投入到工作上的时间也越来越多，这种状态下哪有自由可言，虽然钱挣是越来越多了，但人却越来越不自由了。 而他，也俨然不知自己已经成了一只拉着金磨盘的驴。</p>
<p>再比如说： 有些人可能挣的钱这辈子都衣食无忧了，但一想到将来，孩子要上大学、要结婚、要买房买车、可能还要花钱给他跑工作等等等等。再加上自己还要留下足够的养老钱、万一生场大病咋办？然而这种对未来不确定的焦虑和恐慌，会让一个人瞬间对生活失去安全感。</p>
<p>因此可见，只是有钱，并不一定就能获得自由。</p>
<p>真正的自由：<strong>内在心灵上的宁静与淡然、外在身体上的自由与自在</strong>。</p>
<p>容易满足、不再贪婪。</p>
<h3 id="14-财务自由的标准">1.4 财务自由的标准</h3>
<p>当一个人再也不用为了满足「生活必需」，而把自己最宝贵的时间拿去卖给别人换钱
了，这时ta自然就达到财务自由的状态。</p>
<h3 id="15-财务自由之后">1.5 财务自由之后</h3>
<p>在之后的家族财富积累、财富管理、家族传承、人生圆满，都是我们接着要面对的一个 个的课题。</p>
<h3 id="课后作业">课后作业</h3>
<ol>
<li>请严格按照本章对财产的定义分析，为以下符合财产的选项打分。（ 符合一项打1分、不确定为空）</li>
</ol>
<table>
<thead>
<tr>
<th style="text-align:center"></th>
<th style="text-align:center">符合长期</th>
<th style="text-align:center">持续产生价值</th>
<th style="text-align:center">被人需要</th>
<th style="text-align:center">保值</th>
<th style="text-align:center">增长</th>
<th style="text-align:center">快速变现</th>
<th style="text-align:center">越久越值钱</th>
<th style="text-align:center">总分</th>
<th style="text-align:center">刚需</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">纸币</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">金银</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center">3</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">珠宝</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">古玩</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">字画</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">汽车</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">奢侈品</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">房子</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">白酒厂</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">5</td>
<td style="text-align:center">√</td>
</tr>
<tr>
<td style="text-align:center">农场</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">5</td>
<td style="text-align:center">√</td>
</tr>
<tr>
<td style="text-align:center">优质公司股票</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center">6</td>
<td style="text-align:center">√</td>
</tr>
<tr>
<td style="text-align:center">时间</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">7</td>
<td style="text-align:center">√</td>
</tr>
<tr>
<td style="text-align:center">健康</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">7</td>
<td style="text-align:center">√</td>
</tr>
<tr>
<td style="text-align:center">知识</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">7</td>
<td style="text-align:center">√</td>
</tr>
<tr>
<td style="text-align:center">技艺</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">7</td>
<td style="text-align:center">√</td>
</tr>
<tr>
<td style="text-align:center">影响力</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center">6</td>
<td style="text-align:center">√</td>
</tr>
<tr>
<td style="text-align:center">梦想</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">1</td>
<td style="text-align:center">4</td>
<td style="text-align:center"></td>
</tr>
</tbody>
</table>
<p>评分完后，请分别说出：</p>
<ul>
<li>你认为某些选项“不属于财产”的理由是啥？</li>
<li>你认为某些选项“可以做为财产”的理由是啥？</li>
<li>用心体会总分为6分和7分的选项，对你现在的重要性和长远意义是什么？</li>
</ul>
<ol start="2">
<li>
<p>你目前都拥有哪些真正的财产、其中哪一项是最多的？你的【贝产和才产】是平衡的、还是失衡的状态？接下来你会去怎么调整？</p>
<p>一穷二白，没有“贝产”也没有“才产”。</p>
</li>
<li>
<p>钱是真正的财产吗？如果不是，那符合哪个条件后才能成为真正的财产呢？这个条件是今后你要放在首位去学习掌握的！</p>
<p>不是，能让钱赚钱的条件。</p>
</li>
<li>
<p>请反思一下你自己每天在做的事，是在创造或积累财产吗？符合能持续百年以后依然值钱的财产吗？如果不是，你现在必须做出的改变是什么？</p>
<p>不是，不能持续。学习知识、技能，提高影响力。</p>
</li>
<li>
<p>盘点一下自己有哪些资源属于真正能为你持续产出的【贝】产和【才】产？如果你拥有的一些资源、竟然不能为你持续产出最大化，你必须做出哪些调整？</p>
<p>拥有时间来学习计算机知识、金融和理财知识。</p>
</li>
<li>
<p>请找出几百年前就存在的职业、并且未来几十年不会消失、并且大概率来看会越来越值钱，甚至于可以做为家业传承给子女的职业有哪些？（变量越少、越好预测）</p>
<p>医生、知识传授者、中介、创作者、执政者。</p>
</li>
<li>
<p>学过本章内容后，你应该（甚至是必须）把自己至少80%的精力用在什么地方——开始让自己变得越来越值钱？</p>
<p>学习。</p>
<p>想想看，对整个人生来说，什么‘人事物’对你来说，才是更重要的？进而，你又发现 什么‘人事物’反而是不重要的？</p>
<p>亲人、朋友，自身修养、子女教育。</p>
</li>
<li>
<p>你现在对达到财务自由最少需要多少金额，跟课前作业相比有变化吗？导致发生变化的原因是什么？</p>
<p>// TODO</p>
</li>
<li>
<p>你对自己实现财务自由——目前最大的困惑、阻碍是什么？请详细描述。</p>
<p>创业失败、债务缠身、事业不稳定。</p>
</li>
<li>
<p>现在的你觉察到了什么？自己的财富思想有了哪些变化吗？</p>
<p>之前思维也有过变化，但是没有行动起来，所以结果也没有变化。</p>
</li>
<li>
<p>你现在还有哪些疑惑不解的地方？或是对本章内容有不认同的地方？</p>
<p>暂无。</p>
</li>
</ol>
<hr>
<p>课程原文下载链接：<a href="../attachs/%E7%99%BD%E6%89%8B%E8%B5%B7%E5%AE%B6-%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92-2021%E7%89%88.pdf">白手起家-财富思维觉醒-2021版.pdf</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>财富思维觉醒课前作业</title>
      <link>https://w.toomore.us/posts/wealth/thinking/%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92%E8%AF%BE%E5%89%8D%E4%BD%9C%E4%B8%9A/</link>
      <pubDate>Thu, 03 Feb 2022 21:43:41 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/wealth/thinking/%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92%E8%AF%BE%E5%89%8D%E4%BD%9C%E4%B8%9A/</guid>
      <description>你为什么想要实现财务自由？分别想要实现或满足哪些想法？请把你想到的全部罗列出来。
a. 改善居住环境，提升生活品质。
b. 做想做的事，去想去的地方。
你需要多少钱才能达到财务自由状态？请算出具体金额、并说出为什么是这个金额。
// todo
你目前从事的工作是什么？为实现财务自由的目标，你都做了哪些事情？你每天花在【为实现财务自由】这一目标上的时间有多少？以你当前的年度总收入和净收入，分别推导出需要几年的积累可以达到你财务自由的金额？
软件开发人员
学习了理财入门课程
几乎没有行动
// todo
你认为影响你实现财务自由的障碍有哪些？
知识储备不够，目光短浅，债务缠身。
请思考一下你认为实现财务自由的核心关键有哪些？
认知、行动、机遇。
假设你现在中了5000万彩票，你会怎么花这笔钱？如果你想买的都买了、但钱还剩很多，接下来你有什么打算，能列出一个具体怎么使用这次钱的方案么？请根据你现在的想法如实描述。
还清债务50w
置换房产，改善居住环境，孩子教育环境，预计 200w
重新装修老家房屋（冬天实在太冷了），预计 50w
配置基金、股票，具体怎么操作，有待学习
课程原文下载链接：白手起家-财富思维觉醒-2021版.pdf</description>
      <content:encoded><![CDATA[<ol>
<li>
<p>你为什么想要实现财务自由？分别想要实现或满足哪些想法？请把你想到的全部罗列出来。</p>
<p>a. 改善居住环境，提升生活品质。</p>
<p>b. 做想做的事，去想去的地方。</p>
</li>
<li>
<p>你需要多少钱才能达到财务自由状态？请算出具体金额、并说出为什么是这个金额。</p>
<p>// todo</p>
</li>
<li>
<p>你目前从事的工作是什么？为实现财务自由的目标，你都做了哪些事情？你每天花在【为实现财务自由】这一目标上的时间有多少？以你当前的年度总收入和净收入，分别推导出需要几年的积累可以达到你财务自由的金额？</p>
<p>软件开发人员</p>
<p>学习了理财入门课程</p>
<p>几乎没有行动</p>
<p>// todo</p>
</li>
<li>
<p>你认为影响你实现财务自由的障碍有哪些？</p>
<p>知识储备不够，目光短浅，债务缠身。</p>
</li>
<li>
<p>请思考一下你认为实现财务自由的核心关键有哪些？</p>
<p>认知、行动、机遇。</p>
</li>
<li>
<p>假设你现在中了5000万彩票，你会怎么花这笔钱？如果你想买的都买了、但钱还剩很多，接下来你有什么打算，能列出一个具体怎么使用这次钱的方案么？请根据你现在的想法如实描述。</p>
<ol>
<li>
<p>还清债务50w</p>
</li>
<li>
<p>置换房产，改善居住环境，孩子教育环境，预计 200w</p>
</li>
<li>
<p>重新装修老家房屋（冬天实在太冷了），预计 50w</p>
</li>
<li>
<p>配置基金、股票，具体怎么操作，有待学习</p>
</li>
</ol>
</li>
</ol>
<hr>
<p>课程原文下载链接：<a href="../attachs/%E7%99%BD%E6%89%8B%E8%B5%B7%E5%AE%B6-%E8%B4%A2%E5%AF%8C%E6%80%9D%E7%BB%B4%E8%A7%89%E9%86%92-2021%E7%89%88.pdf">白手起家-财富思维觉醒-2021版.pdf</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>This Set Cookie Was Blocked Because It Was Not Sent Over a Secure Connection</title>
      <link>https://w.toomore.us/posts/website/this-set-cookie-was-blocked-because-it-was-not-sent-over-a-secure-connection/</link>
      <pubDate>Tue, 28 Dec 2021 23:04:45 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/this-set-cookie-was-blocked-because-it-was-not-sent-over-a-secure-connection/</guid>
      <description>网站迁移新的服务器以后，登录后台一直提示验证码不正确，几番排查、调试代码，最后发每次请求的 session_id 都不一样。
之前也遇到过类似问题，不过都是跨域请求引起的，这次都是在同一个域名下访问，从来没碰到过这种现象。
查看 cookie 发现「response header」中的 「Set-Cookie」被浏览器 blocked 了，后边有一个黄色的三角感叹号，提示 this set-cookie was blocked because it was not sent over a secure connection，cookie无法保存到浏览器。
原来是网站之前启用过 https，并且在当前浏览器用 https 打开过，现在迁移服务器后没有启用 https，直接使用 http 打开，所以 cookie 因为安全原因无法写入，清楚缓存、重启浏览器继续用 http 访问题解决了。</description>
      <content:encoded><![CDATA[<p>网站迁移新的服务器以后，登录后台一直提示验证码不正确，几番排查、调试代码，最后发每次请求的 <code>session_id</code> 都不一样。</p>
<p>之前也遇到过类似问题，不过都是跨域请求引起的，这次都是在同一个域名下访问，从来没碰到过这种现象。</p>
<p>查看 cookie 发现「response header」中的 「Set-Cookie」被浏览器 blocked 了，后边有一个黄色的三角感叹号，提示 <code>this set-cookie was blocked because it was not sent over a secure connection</code>，cookie无法保存到浏览器。</p>
<p>原来是网站之前启用过 <code>https</code>，并且在当前浏览器用 <code>https</code> 打开过，现在迁移服务器后没有启用 <code>https</code>，直接使用 <code>http</code> 打开，所以 <code>cookie</code> 因为安全原因无法写入，清楚缓存、重启浏览器继续用 <code>http</code> 访问题解决了。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>「转」Windows11右键恢复至Windows10模式</title>
      <link>https://w.toomore.us/posts/networktech/restore-right-click-from-windows-11-to-windows-10/</link>
      <pubDate>Sat, 23 Oct 2021 18:17:06 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/restore-right-click-from-windows-11-to-windows-10/</guid>
      <description>闲来无事给家里的一体机装了 windows11，问题颇多：
右键菜单竟然是折叠的，要多点一下才能看到全部菜单； 没有声音；至今没解决 打印机能连接，无法打印。胡乱折腾一阵，好了。 右键菜单问题，网上搜索了一番，找到了如下解决方案：
创建changeRightMenue.bat的文本文件 把下边的bat脚本粘贴进去 @echo off :start cls echo, echo 修改右键菜单模式 echo, echo 1 穿越到Windows 10默认模式 echo, echo 2 恢复为Windows 11默认模式 echo, echo 0 什么也不做，退出 echo, echo, choice /c:120 /n /m:&amp;#34;请选择要进行的操作（1/2/0）：&amp;#34; if %errorlevel%==0 exit if %errorlevel%==2 goto cmd2 if %errorlevel%==1 goto cmd1 exit :cmd1 reg.exe add &amp;#34;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&amp;#34; /f /ve taskkill /f /im explorer.exe start explorer.exe exit :cmd2 reg.exe delete &amp;#34;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}&amp;#34; /f taskkill /f /im explorer.exe start explorer.</description>
      <content:encoded><![CDATA[<p>闲来无事给家里的一体机装了 <code>windows11</code>，问题颇多：</p>
<ol>
<li>右键菜单竟然是折叠的，要多点一下才能看到全部菜单；</li>
<li>没有声音；<code>至今没解决</code></li>
<li>打印机能连接，无法打印。<code>胡乱折腾一阵，好了。</code></li>
</ol>
<p>右键菜单问题，网上搜索了一番，找到了如下解决方案：</p>
<ol>
<li>创建<code>changeRightMenue.bat</code>的文本文件</li>
<li>把下边的<code>bat</code>脚本粘贴进去</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bat" data-lang="bat"><span style="display:flex;"><span>@<span style="color:#66d9ef">echo</span> off
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>:start
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">cls</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span>,
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span> 修改右键菜单模式
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span>,
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span> 1 穿越到Windows 10默认模式
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span>,
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span> 2 恢复为Windows 11默认模式
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span>,
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span> 0 什么也不做，退出
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span>,
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">echo</span>,
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>choice /c:120 /n /m:<span style="color:#e6db74">&#34;请选择要进行的操作（1/2/0）：&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> %errorlevel%<span style="color:#f92672">==</span>0 <span style="color:#66d9ef">exit</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> %errorlevel%<span style="color:#f92672">==</span>2 <span style="color:#66d9ef">goto</span> cmd2
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> %errorlevel%<span style="color:#f92672">==</span>1 <span style="color:#66d9ef">goto</span> cmd1
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">exit</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>:cmd1
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>reg.exe add <span style="color:#e6db74">&#34;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&#34;</span> /f /ve
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>taskkill /f /im explorer.exe
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">start</span> explorer.exe
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">exit</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>:cmd2
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>reg.exe delete <span style="color:#e6db74">&#34;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}&#34;</span> /f
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>taskkill /f /im explorer.exe
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">start</span> explorer.exe
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">exit</span>
</span></span></code></pre></div><ol start="3">
<li>执行<code>changeRightMenue.bat</code>脚本，就可以在两种模式之间切换自如了。</li>
</ol>
<p>原文链接：<a href="https://zhuanlan.zhihu.com/p/421197454">Windows11右键菜单修改为Win10模式的方法</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>友情链接</title>
      <link>https://w.toomore.us/friendlinks/</link>
      <pubDate>Thu, 23 Sep 2021 11:50:37 +0800</pubDate>
      
      <guid>https://w.toomore.us/friendlinks/</guid>
      <description>友情链接</description>
      <content:encoded><![CDATA[<p><a href="https://banlulu.cn" title="班路路" target="blank">班路路</a></p>
<p><a href="http://yijile.com" title="探讨设计、IT科技、电脑软件、手机APP等话题，分享生活点滴，与乐同行。" target="blank">一极乐博客</a></p>
<p><a href="https://sofast.us" title="西安承兑汇票贴现,全国银行承兑汇票贴现,出售银行承兑汇票,承兑汇票贴现。" target="blank">西安承兑汇票</a></p>
<p><a href="https://caitong.org" title="西安承兑汇票贴现点位最低" target="blank">西安承兑汇票贴现</a></p>
<p><a href="https://hzz.cool" title="何智政个人博客" target="blank">何智政个人博客</a></p>
<!-- <a href="https://xaldb.com/" title="西安铝单板" target="blank">西安铝单板</a> -->
<hr>
<blockquote>
<p>提交链接前，请先将 <code>WangDeer</code> 放置在你网站的合适位置，然后在下方留言提交你的网站。看到留言以后会及时处理，请勿重复提交。</p>
</blockquote>
<h3 id="格式">格式</h3>
<ol>
<li>名称：WangDeer</li>
<li>域名：https://w.toomore.us</li>
<li>描述：读书、思考、Coding &hellip; =&gt; 「生活」</li>
</ol>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecshop 4.0 微信登录 一直循环授权登录</title>
      <link>https://w.toomore.us/posts/dev/ecshop-4.0-%E5%BE%AE%E4%BF%A1%E7%99%BB%E5%BD%95-%E4%B8%80%E7%9B%B4%E5%BE%AA%E7%8E%AF%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95/</link>
      <pubDate>Thu, 14 Mar 2019 13:55:21 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecshop-4.0-%E5%BE%AE%E4%BF%A1%E7%99%BB%E5%BD%95-%E4%B8%80%E7%9B%B4%E5%BE%AA%E7%8E%AF%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95/</guid>
      <description>部署 ecshop 4.0 H5端，发现循环弹出微信授权登录，初步判断是登录状态问题，和前端联调发现前端拿不到 cookie，api 接口(api.test.demo)给 h5端(h5.test.deom) 设置 cookie，直接给 h5.test.demo 设置，cookie不会生效，只能给主域 test.demo 设置才会生效。
查看微信登录回调接口 appserver\app\Http\Controllers\v2\UserController.php 中的 webCallback 方法，
if (isset($_GET[&amp;#39;referer&amp;#39;])) { Log::info(&amp;#39;微信认证回调成功&amp;#39;, $data); if (isset($data[&amp;#39;openid&amp;#39;])) { Log::info(&amp;#39;设置的cookie为&amp;#39; . config(&amp;#39;app.domain_url&amp;#39;)); setcookie(&amp;#39;o&amp;#39;, $data[&amp;#39;openid&amp;#39;], time()+7200, &amp;#39;/&amp;#39;, config(&amp;#39;app.domain_url&amp;#39;)); } if (isset($data[&amp;#39;token&amp;#39;])) { setcookie(&amp;#39;t&amp;#39;, $data[&amp;#39;token&amp;#39;], time()+7200, &amp;#39;/&amp;#39;, config(&amp;#39;app.domain_url&amp;#39;)); } return redirect(urldecode($_GET[&amp;#39;referer&amp;#39;])); } 可以看到是给 domain_url 设置cookie
所以需要注意 appserver/.evn 中的 DOMAIN_URL 配置
#商城Domain (此处必须为主域名，设置二级域名无效，api域名、H5域名必须为此主域下的域名) DOMAIN_URL=test.demo #商城url SHOP_URL=http://h5.test.demo #分享url SHARE_URL=http://:h5.test.demo/h5 #H5商城 SHOP_H5=http://h5.test.demo/h5 </description>
      <content:encoded><![CDATA[<p>部署 <code>ecshop 4.0</code> H5端，发现循环弹出微信授权登录，初步判断是登录状态问题，和前端联调发现前端拿不到 <code>cookie</code>，api 接口(<code>api.test.demo</code>)给 h5端(<code>h5.test.deom</code>) 设置 <code>cookie</code>，直接给 <code>h5.test.demo</code> 设置，<code>cookie</code>不会生效，只能给主域 <code>test.demo</code> 设置才会生效。</p>
<p>查看微信登录回调接口 <code>appserver\app\Http\Controllers\v2\UserController.php</code>  中的 <code>webCallback</code>  方法，</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">isset</span>($_GET[<span style="color:#e6db74">&#39;referer&#39;</span>])) {
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">Log</span><span style="color:#f92672">::</span><span style="color:#a6e22e">info</span>(<span style="color:#e6db74">&#39;微信认证回调成功&#39;</span>, $data);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">isset</span>($data[<span style="color:#e6db74">&#39;openid&#39;</span>])) {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">Log</span><span style="color:#f92672">::</span><span style="color:#a6e22e">info</span>(<span style="color:#e6db74">&#39;设置的cookie为&#39;</span> <span style="color:#f92672">.</span> <span style="color:#a6e22e">config</span>(<span style="color:#e6db74">&#39;app.domain_url&#39;</span>));
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">setcookie</span>(<span style="color:#e6db74">&#39;o&#39;</span>, $data[<span style="color:#e6db74">&#39;openid&#39;</span>], <span style="color:#a6e22e">time</span>()<span style="color:#f92672">+</span><span style="color:#ae81ff">7200</span>, <span style="color:#e6db74">&#39;/&#39;</span>, <span style="color:#a6e22e">config</span>(<span style="color:#e6db74">&#39;app.domain_url&#39;</span>));
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">isset</span>($data[<span style="color:#e6db74">&#39;token&#39;</span>])) {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">setcookie</span>(<span style="color:#e6db74">&#39;t&#39;</span>, $data[<span style="color:#e6db74">&#39;token&#39;</span>], <span style="color:#a6e22e">time</span>()<span style="color:#f92672">+</span><span style="color:#ae81ff">7200</span>, <span style="color:#e6db74">&#39;/&#39;</span>, <span style="color:#a6e22e">config</span>(<span style="color:#e6db74">&#39;app.domain_url&#39;</span>));
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">redirect</span>(<span style="color:#a6e22e">urldecode</span>($_GET[<span style="color:#e6db74">&#39;referer&#39;</span>]));
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>可以看到是给 <code>domain_url </code> 设置cookie</p>
<p>所以需要注意 appserver/.evn 中的 <code>DOMAIN_URL</code> 配置</p>
<pre tabindex="0"><code>#商城Domain (此处必须为主域名，设置二级域名无效，api域名、H5域名必须为此主域下的域名)
DOMAIN_URL=test.demo

#商城url
SHOP_URL=http://h5.test.demo

 

#分享url
SHARE_URL=http://:h5.test.demo/h5

#H5商城
SHOP_H5=http://h5.test.demo/h5
</code></pre>]]></content:encoded>
    </item>
    
    <item>
      <title>PHP判断指定日期是否为工作日</title>
      <link>https://w.toomore.us/posts/dev/judge-whether-the-date-is-a-working-day-with-php/</link>
      <pubDate>Sat, 08 Dec 2018 15:52:22 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/judge-whether-the-date-is-a-working-day-with-php/</guid>
      <description>PHP 借助百度接口判断指定日期是否为工作日</description>
      <content:encoded><![CDATA[<p><del>PHP判断指定日期是否为工作日</del></p>
<blockquote>
<p>百度接口返回数据已变更，用不了啦。</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> <span style="color:#a6e22e">Isworkday</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#e6db74">/**
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74"> * 指定日期是否为工作日
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74"> *
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74"> * Class Api
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74"> */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">Api</span> {
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">/**
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">     * 获取日期类型
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">     *
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">     * @param $date 指定年月日 Y-m-d格式
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">     * @return string|\day_type 返回类型 workday=工作日,workend=周末,holiday=节假日
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">     */</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">getDateType</span>($date <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;&#39;</span>)
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">empty</span>($date) <span style="color:#f92672">&amp;&amp;</span> $date <span style="color:#f92672">=</span> <span style="color:#a6e22e">date</span>(<span style="color:#e6db74">&#39;Y-m-d&#39;</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>		$url <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=&#34;</span><span style="color:#f92672">.</span><span style="color:#a6e22e">date</span>(<span style="color:#e6db74">&#39;Y年m月d日&#39;</span>,<span style="color:#a6e22e">strtotime</span>($date))<span style="color:#f92672">.</span><span style="color:#e6db74">&#34;&amp;resource_id=6018&amp;format=json&amp;_=1544251006975&#34;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>		$res <span style="color:#f92672">=</span> <span style="color:#a6e22e">mb_convert_encoding</span>(<span style="color:#a6e22e">curl</span>($url), <span style="color:#e6db74">&#39;UTF-8&#39;</span>, <span style="color:#e6db74">&#39;GBK&#39;</span>);
</span></span><span style="display:flex;"><span>        $res <span style="color:#f92672">=</span> <span style="color:#a6e22e">json_decode</span>($res,<span style="color:#66d9ef">true</span>);
</span></span><span style="display:flex;"><span>		$res[<span style="color:#e6db74">&#39;status&#39;</span>] <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;0&#39;</span> <span style="color:#f92672">&amp;&amp;</span> $days <span style="color:#f92672">=</span> $res[<span style="color:#e6db74">&#39;data&#39;</span>][<span style="color:#ae81ff">0</span>];
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>		$day_type <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;&#39;</span>;
</span></span><span style="display:flex;"><span>		<span style="color:#75715e">// 如果当月存有节假日，我们优先判断是否节假日
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>		<span style="color:#66d9ef">if</span>(<span style="color:#f92672">!</span><span style="color:#66d9ef">empty</span>($days[<span style="color:#e6db74">&#39;holiday&#39;</span>])){
</span></span><span style="display:flex;"><span>			<span style="color:#66d9ef">foreach</span>($days[<span style="color:#e6db74">&#39;holiday&#39;</span>] <span style="color:#66d9ef">as</span> $k <span style="color:#f92672">=&gt;</span> $v){
</span></span><span style="display:flex;"><span>				$holidays_list <span style="color:#f92672">=</span> <span style="color:#a6e22e">is_array</span>($v) <span style="color:#f92672">?</span> $holidays_list <span style="color:#f92672">=</span> $v[<span style="color:#e6db74">&#39;list&#39;</span>] <span style="color:#f92672">:</span> $days[<span style="color:#e6db74">&#39;holiday&#39;</span>][<span style="color:#e6db74">&#39;list&#39;</span>];
</span></span><span style="display:flex;"><span>				<span style="color:#66d9ef">foreach</span>($holidays_list <span style="color:#66d9ef">as</span> $holiday){
</span></span><span style="display:flex;"><span>					<span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">date</span>(<span style="color:#e6db74">&#39;Y-n-j&#39;</span>, <span style="color:#a6e22e">strtotime</span>($date)) <span style="color:#f92672">==</span> $holiday[<span style="color:#e6db74">&#39;date&#39;</span>]){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>						<span style="color:#75715e">// 节假日中 status == 1，表示 &#39;节假日&#39;
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>						<span style="color:#66d9ef">if</span>($holiday[<span style="color:#e6db74">&#39;status&#39;</span>] <span style="color:#f92672">==</span> <span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>							$day_type <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;holiday&#39;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>						<span style="color:#75715e">// 节假日中 status == 2，表示 &#39;工作日&#39;
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>						}<span style="color:#66d9ef">elseif</span>($holiday[<span style="color:#e6db74">&#39;status&#39;</span>] <span style="color:#f92672">==</span> <span style="color:#ae81ff">2</span>){
</span></span><span style="display:flex;"><span>							$day_type <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;weekday&#39;</span>;
</span></span><span style="display:flex;"><span>						}
</span></span><span style="display:flex;"><span>					}
</span></span><span style="display:flex;"><span>				}
</span></span><span style="display:flex;"><span>				<span style="color:#66d9ef">if</span>(<span style="color:#f92672">!</span><span style="color:#a6e22e">is_array</span>($v)){
</span></span><span style="display:flex;"><span>					<span style="color:#66d9ef">break</span>;
</span></span><span style="display:flex;"><span>				}
</span></span><span style="display:flex;"><span>			}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>			<span style="color:#75715e">// 未匹配到节假日，正常的周六、日休息
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>			<span style="color:#66d9ef">if</span>(<span style="color:#66d9ef">empty</span>($day_type)){
</span></span><span style="display:flex;"><span>				$day_week <span style="color:#f92672">=</span> <span style="color:#a6e22e">date</span>(<span style="color:#e6db74">&#39;w&#39;</span>, <span style="color:#a6e22e">strtotime</span>($date));
</span></span><span style="display:flex;"><span>				<span style="color:#66d9ef">if</span>($day_week <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">||</span> $day_week <span style="color:#f92672">==</span> <span style="color:#ae81ff">6</span>){
</span></span><span style="display:flex;"><span>					$day_type <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;weekend&#39;</span>;
</span></span><span style="display:flex;"><span>				}<span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>					$day_type <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;weekday&#39;</span>;
</span></span><span style="display:flex;"><span>				}
</span></span><span style="display:flex;"><span>			}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">//返回
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            <span style="color:#66d9ef">return</span> $day_type;
</span></span><span style="display:flex;"><span>		}
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">/*
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">        CURL 获取数据
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">        @author	cjm 20160608
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">        @param	string	url     请求地址
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">        @param	array	data    请求数据
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">        @param	string	type    请求类型
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">        @return	string
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">    */</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">curl</span>($url, $type <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;get&#39;</span>, $data <span style="color:#f92672">=</span> <span style="color:#66d9ef">array</span>())
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">//初始化
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        $curl <span style="color:#f92672">=</span> <span style="color:#a6e22e">curl_init</span>();
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">//设置抓取的url
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#a6e22e">curl_setopt</span>($curl, <span style="color:#a6e22e">CURLOPT_URL</span>, $url);
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">//设置获取的信息以文件流的形式返回，而不是直接输出。
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#a6e22e">curl_setopt</span>($curl, <span style="color:#a6e22e">CURLOPT_RETURNTRANSFER</span>, <span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">curl_setopt</span>($curl, <span style="color:#a6e22e">CURLOPT_SSL_VERIFYPEER</span>, <span style="color:#66d9ef">false</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">//post方式
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">if</span>($type <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;post&#39;</span>){
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">//设置post方式提交
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            <span style="color:#a6e22e">curl_setopt</span>($curl, <span style="color:#a6e22e">CURLOPT_POST</span>, <span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">curl_setopt</span>($curl, <span style="color:#a6e22e">CURLOPT_POSTFIELDS</span>, $data);
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">//执行命令
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        $result <span style="color:#f92672">=</span> <span style="color:#a6e22e">curl_exec</span>($curl);
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">//关闭URL请求
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#a6e22e">curl_close</span>($curl);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">//返回
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">return</span> $result;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>PHP Ajax 跨域请求允许多个域名</title>
      <link>https://w.toomore.us/posts/dev/php-ajax-allow-multiple-domain-names-for-cross-domain-requests/</link>
      <pubDate>Mon, 26 Feb 2018 09:37:02 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/php-ajax-allow-multiple-domain-names-for-cross-domain-requests/</guid>
      <description>PHP Ajax 跨域请求允许多个域名</description>
      <content:encoded><![CDATA[<p>PHP Ajax 跨域请求允许多个域名</p>
<pre tabindex="0"><code>    $origin = isset($_SERVER[&#39;HTTP_ORIGIN&#39;])? $_SERVER[&#39;HTTP_ORIGIN&#39;] : &#39;&#39;;
    $allow_origin = array(
        &#39;http://a.com&#39;,
        &#39;http://b.com&#39;
    );
    if(in_array($origin, $allow_origin)){
        header(&#39;Access-Control-Allow-Origin:&#39;.$origin);
    }
    header(&#34;Access-Control-Allow-Credentials: true&#34;);
    header(&#39;Access-Control-Allow-Headers: X-Requested-With, Content-Type&#39;);
</code></pre>]]></content:encoded>
    </item>
    
    <item>
      <title>返回键劫持，强制跳转到指定链接</title>
      <link>https://w.toomore.us/posts/dev/%E8%BF%94%E5%9B%9E%E9%94%AE%E5%8A%AB%E6%8C%81%E5%BC%BA%E5%88%B6%E8%B7%B3%E8%BD%AC%E5%88%B0%E6%8C%87%E5%AE%9A%E9%93%BE%E6%8E%A5/</link>
      <pubDate>Mon, 29 Jan 2018 17:59:45 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/%E8%BF%94%E5%9B%9E%E9%94%AE%E5%8A%AB%E6%8C%81%E5%BC%BA%E5%88%B6%E8%B7%B3%E8%BD%AC%E5%88%B0%E6%8C%87%E5%AE%9A%E9%93%BE%E6%8E%A5/</guid>
      <description>返回键劫持，强制跳转到指定链接
代码如下:
window.onhashchange=function(){jp();}; function hh() {history.pushState(history.length+1, &amp;#34;message&amp;#34;, &amp;#34;#&amp;#34;+new Date().getTime());} function jp() {location.href=&amp;#34;/jump.php&amp;#34;;} setTimeout(&amp;#39;hh();&amp;#39;, 50); </description>
      <content:encoded><![CDATA[<p>返回键劫持，强制跳转到指定链接</p>
<p>代码如下:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-JavaScript" data-lang="JavaScript"><span style="display:flex;"><span>    window.<span style="color:#a6e22e">onhashchange</span><span style="color:#f92672">=</span><span style="color:#66d9ef">function</span>(){<span style="color:#a6e22e">jp</span>();};
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">hh</span>() {<span style="color:#a6e22e">history</span>.<span style="color:#a6e22e">pushState</span>(<span style="color:#a6e22e">history</span>.<span style="color:#a6e22e">length</span><span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>, <span style="color:#e6db74">&#34;message&#34;</span>, <span style="color:#e6db74">&#34;#&#34;</span><span style="color:#f92672">+</span><span style="color:#66d9ef">new</span> Date().<span style="color:#a6e22e">getTime</span>());}
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">jp</span>() {<span style="color:#a6e22e">location</span>.<span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/jump.php&#34;</span>;}
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">setTimeout</span>(<span style="color:#e6db74">&#39;hh();&#39;</span>, <span style="color:#ae81ff">50</span>);
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>Chromium Adobe Flash Player下载</title>
      <link>https://w.toomore.us/posts/website/chromium-adobe-flash-player%E4%B8%8B%E8%BD%BD/</link>
      <pubDate>Wed, 05 Aug 2015 17:38:50 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/chromium-adobe-flash-player%E4%B8%8B%E8%BD%BD/</guid>
      <description>chromium adobe flash player 官方下载地址
http://get.adobe.com/cn/flashplayer/otherversions/</description>
      <content:encoded><![CDATA[<p>chromium adobe flash player 官方下载地址</p>
<p><a href="http://get.adobe.com/cn/flashplayer/otherversions/">http://get.adobe.com/cn/flashplayer/otherversions/</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecstore &amp; Ecshop对比</title>
      <link>https://w.toomore.us/posts/internet/ecstore%E5%92%8Cecshop%E5%AF%B9%E6%AF%94/</link>
      <pubDate>Wed, 29 Jul 2015 14:41:11 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/ecstore%E5%92%8Cecshop%E5%AF%B9%E6%AF%94/</guid>
      <description>1、来源 Ecstore可以说是shopex的升级版，基于商派最新一代的电子商务操作系统ECOS，具备高负载、高安全、高可扩展、高可维护性等优良特征，是商派融合10年电商领域行业经验推出的最新一代B2C系统。
Ecshop是06年开发好的，08年商派为了平衡市场竞争，从其他程序商收购而来。
2、升级 Ecstore在不断升级中，从最开始的1.0到1.2；2.0到2.1；到现在的2.3等等，以后还会继续升级，因为这是目前商派主要的产品之一，也是目前国内最好的一款电子商务软件。
ECSHOP从收购后，印象中就升级2次，从2.7.0到2.7.1；从2.7.1到2.7.2；2014年又升级了一次，现在最新版是2.7.3。
软件出来这么久了，才做了几次的升级，以后还会不会升级，这个还是未知数，谁也说不清。
3、周边程序 Ecstore：只是商派的一个平台，现在商派还基于Ecstore推出了一系列的产品，比如CRM、ERP以及saas部署的易开店等等。一步步完善了电商的生态圈。
ecshop：就一个版本
4、价格 Ecstore：是商业的电子商务软件，必须要购买他们的授权才能使用，最低的一个版本是快速启动版，授权费是6.8W，其他更高阶的版本，几万到几十万不等。Ecstore系统费用价格可参考下图：
Ecshop：可以免费下载使用，但是不能用于商业，如果需要用于商业的话，需要购买授权，授权费是5000元。
5、开源 Ecstore：是商业程序，有开源版本，但是费用相对比较高，但是Ecstore的开发机制是很灵活的，Ecstore 基础版采用SOA（面向服务）架构,采用模块化开发,同时内置完善的API接口,可无缝对接第三方应用插件。并且Ecstore 标准版引入应用程序接入机制（APP）,用户可自主选择、添加、维护或删除应用程序,如通过安装APP,可便捷实现信任登录功能。
Ecshop：是一款开源免费的通用电子商务平台构建软件，用户可以根据自己的商务特征对ECSHOP进行定制，增加自己商城的特色功能。
6、模板设计 Ecstore：具有强大的模板自由定制功能，内置多套模板，您可随时更换调整，更可对每个模板进行个性化编辑，不再千人一面;清风设计也可以为您量身定制个性化模板，Ecstore免费开放模板接口，您也可以自行设计、使用全新模板。并且Ecstore的模板支持可视化编辑，很方便用户操作。
ECSHOP：对Dreamweaver模板机制提供完美支持。可使用Dreamweaver制作和查看自己的模板。同时程序提供对模板显示内容控制。如可以在页面上灵活添加指定分类的商品，或指定品牌的商品等。可随意调整广告的显示，而无需手动修改模板。
7、搜索优化 Ecstore：标准版针对搜索引擎进行优化,结合用户自定义URL等手段,在基本描述内容外,根据系统页面分布,针对性增加nofollow、noindex等SEO标签,引导搜索引擎蜘蛛爬行,避免商品分类等内容重复度较高页面出现重复,极大提升SEO效果。
ECShop：在SEO（搜索引擎优化）上，独家支持两种 URL 重写方式，并且是同类软件中第一家支持 google / yahoo / microsoft 三家共同发布的 sitemaps 0.9 网站索引规范，能够为站点被搜索引擎收录做到最大限度的支持和帮助。
8、数据承载 Ecstore：支持日常2500万PV/日，峰值5000万PV/日，强大的负载能力。
Ecshop：支持日常2500PV/日，峰值5000PV/日。
9、促销模式 ECstore：拥有业内领先的促销引擎，可结合商品、订单属性，实现千变万化的促销规则,默认可支持近200种促销规则实例，更可支持订单重量、商品类型、商品数量等等数百种条件组合。
ECSHOP：提供了积分、红包、赠品，夺宝奇兵等7种促销方法。
10、常规功能 Ecstore：控制面板立足于“系统配置、数据管理、地区管理、支付管理和配送设置” 等,做到准确到位,全局管控；Ecstore拥有先进订单管理系统,从“订单确认、订单指派、单据管理,到售后服务管理”,结构清晰、逻辑规范,用户轻松上手。
Ecshop：针对常规功能尤其是后台管理和购物流程，ECShop进行了更简洁的设计，实现更好的用户体验。
11、多接触点用户移动触屏体验管理 ECstore：移动触屏组件采用最新的HTML5技术，能够根据手机终端的不同型号进行应用的自动适配，完全各种电子销售渠道的自动延伸和扩展，在不同的终端带给用户一致的用户体验；微信商城基于微信平台，让微信5亿用户更了解企业品牌，减少宣传成本，建立企业与消费者、客户的一对一互动和沟通，提供更好的促销、推广、宣传、售后等服务，打造更具影响力的品牌形象。
Ecshop：WAP
12、性能方面 Ecstore：基于ShopEx自主研发的新一代电子商务引擎ECOS,提供更加安全稳定的底层架构,全方位优化系统架构,同时引入HTML静态生成技术和多级缓存技术,减轻服务器负担,使得前台响应速度和系统负载能力得到极大的提升。
通过大量的测试表明,即使有较大的访问量和数据处理时,Ecstore依然能流畅的提供各项日程服务,即使因营销推广如秒杀等活动造成瞬时大流量,配合ShopEx救援服务依然能确保电商平台的有序运作。
Ecshop：通过优化代码与数据库结构，配合ecshop独家设计的缓存机制，在不考虑网速的情况下，网店动态页面与纯静态页面访问速度相当。
总结： 在以上的几个回合的比较中，Ecstore无论是从功能和架构上面都占据了上方，但也非并表示它拥有绝对的优势，可以看出Ecstore的系统费用是相对比较高的。而ecshop作为一款免费、开源的电商软件，从价格方面可以取胜，但是从后台的功能操作，模板的编辑，都不是很便捷的。</description>
      <content:encoded><![CDATA[<h3 id="1来源">1、来源</h3>
<p>Ecstore可以说是shopex的升级版，基于商派最新一代的电子商务操作系统ECOS，具备高负载、高安全、高可扩展、高可维护性等优良特征，是商派融合10年电商领域行业经验推出的最新一代B2C系统。</p>
<p>Ecshop是06年开发好的，08年商派为了平衡市场竞争，从其他程序商收购而来。</p>
<h3 id="2升级">2、升级</h3>
<p>Ecstore在不断升级中，从最开始的1.0到1.2；2.0到2.1；到现在的2.3等等，以后还会继续升级，因为这是目前商派主要的产品之一，也是目前国内最好的一款电子商务软件。</p>
<p>ECSHOP从收购后，印象中就升级2次，从2.7.0到2.7.1；从2.7.1到2.7.2；2014年又升级了一次，现在最新版是2.7.3。</p>
<p>软件出来这么久了，才做了几次的升级，以后还会不会升级，这个还是未知数，谁也说不清。</p>
<h3 id="3周边程序">3、周边程序</h3>
<p>Ecstore：只是商派的一个平台，现在商派还基于Ecstore推出了一系列的产品，比如CRM、ERP以及saas部署的易开店等等。一步步完善了电商的生态圈。</p>
<p>ecshop：就一个版本</p>
<h3 id="4价格">4、价格</h3>
<p>Ecstore：是商业的电子商务软件，必须要购买他们的授权才能使用，最低的一个版本是快速启动版，授权费是6.8W，其他更高阶的版本，几万到几十万不等。Ecstore系统费用价格可参考下图：</p>
<p><img loading="lazy" src="/images/content/posts/internet/20220116/34fd35e166c1e03fd4a74013e95a92d42bae9fa36e887fcf1982dbd00f63b093.png" alt="ecstore价格"  />
</p>
<p>Ecshop：可以免费下载使用，但是不能用于商业，如果需要用于商业的话，需要购买授权，授权费是5000元。</p>
<h3 id="5开源">5、开源</h3>
<p>Ecstore：是商业程序，有开源版本，但是费用相对比较高，但是Ecstore的开发机制是很灵活的，Ecstore 基础版采用SOA（面向服务）架构,采用模块化开发,同时内置完善的API接口,可无缝对接第三方应用插件。并且Ecstore 标准版引入应用程序接入机制（APP）,用户可自主选择、添加、维护或删除应用程序,如通过安装APP,可便捷实现信任登录功能。</p>
<p>Ecshop：是一款开源免费的通用电子商务平台构建软件，用户可以根据自己的商务特征对ECSHOP进行定制，增加自己商城的特色功能。</p>
<h3 id="6模板设计">6、模板设计</h3>
<p>Ecstore：具有强大的模板自由定制功能，内置多套模板，您可随时更换调整，更可对每个模板进行个性化编辑，不再千人一面;清风设计也可以为您量身定制个性化模板，Ecstore免费开放模板接口，您也可以自行设计、使用全新模板。并且Ecstore的模板支持可视化编辑，很方便用户操作。</p>
<p>ECSHOP：对Dreamweaver模板机制提供完美支持。可使用Dreamweaver制作和查看自己的模板。同时程序提供对模板显示内容控制。如可以在页面上灵活添加指定分类的商品，或指定品牌的商品等。可随意调整广告的显示，而无需手动修改模板。</p>
<h3 id="7搜索优化">7、搜索优化</h3>
<p>Ecstore：标准版针对搜索引擎进行优化,结合用户自定义URL等手段,在基本描述内容外,根据系统页面分布,针对性增加nofollow、noindex等SEO标签,引导搜索引擎蜘蛛爬行,避免商品分类等内容重复度较高页面出现重复,极大提升SEO效果。</p>
<p>ECShop：在SEO（搜索引擎优化）上，独家支持两种 URL 重写方式，并且是同类软件中第一家支持 google / yahoo / microsoft 三家共同发布的 sitemaps 0.9 网站索引规范，能够为站点被搜索引擎收录做到最大限度的支持和帮助。</p>
<h3 id="8数据承载">8、数据承载</h3>
<p>Ecstore：支持日常2500万PV/日，峰值5000万PV/日，强大的负载能力。</p>
<p>Ecshop：支持日常2500PV/日，峰值5000PV/日。</p>
<h3 id="9促销模式">9、促销模式</h3>
<p>ECstore：拥有业内领先的促销引擎，可结合商品、订单属性，实现千变万化的促销规则,默认可支持近200种促销规则实例，更可支持订单重量、商品类型、商品数量等等数百种条件组合。</p>
<p>ECSHOP：提供了积分、红包、赠品，夺宝奇兵等7种促销方法。</p>
<h3 id="10常规功能">10、常规功能</h3>
<p>Ecstore：控制面板立足于“系统配置、数据管理、地区管理、支付管理和配送设置” 等,做到准确到位,全局管控；Ecstore拥有先进订单管理系统,从“订单确认、订单指派、单据管理,到售后服务管理”,结构清晰、逻辑规范,用户轻松上手。</p>
<p>Ecshop：针对常规功能尤其是后台管理和购物流程，ECShop进行了更简洁的设计，实现更好的用户体验。</p>
<h3 id="11多接触点用户移动触屏体验管理">11、多接触点用户移动触屏体验管理</h3>
<p>ECstore：移动触屏组件采用最新的HTML5技术，能够根据手机终端的不同型号进行应用的自动适配，完全各种电子销售渠道的自动延伸和扩展，在不同的终端带给用户一致的用户体验；微信商城基于微信平台，让微信5亿用户更了解企业品牌，减少宣传成本，建立企业与消费者、客户的一对一互动和沟通，提供更好的促销、推广、宣传、售后等服务，打造更具影响力的品牌形象。</p>
<p>Ecshop：WAP</p>
<h3 id="12性能方面">12、性能方面</h3>
<p>Ecstore：基于ShopEx自主研发的新一代电子商务引擎ECOS,提供更加安全稳定的底层架构,全方位优化系统架构,同时引入HTML静态生成技术和多级缓存技术,减轻服务器负担,使得前台响应速度和系统负载能力得到极大的提升。</p>
<p>通过大量的测试表明,即使有较大的访问量和数据处理时,Ecstore依然能流畅的提供各项日程服务,即使因营销推广如秒杀等活动造成瞬时大流量,配合ShopEx救援服务依然能确保电商平台的有序运作。</p>
<p>Ecshop：通过优化代码与数据库结构，配合ecshop独家设计的缓存机制，在不考虑网速的情况下，网店动态页面与纯静态页面访问速度相当。</p>
<h3 id="总结">总结：</h3>
<p>在以上的几个回合的比较中，Ecstore无论是从功能和架构上面都占据了上方，但也非并表示它拥有绝对的优势，可以看出Ecstore的系统费用是相对比较高的。而ecshop作为一款免费、开源的电商软件，从价格方面可以取胜，但是从后台的功能操作，模板的编辑，都不是很便捷的。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>批量检查并清除BOM头</title>
      <link>https://w.toomore.us/posts/dev/%E6%89%B9%E9%87%8F%E6%A3%80%E6%9F%A5%E5%B9%B6%E6%B8%85%E9%99%A4bom%E5%A4%B4/</link>
      <pubDate>Tue, 30 Jun 2015 15:59:02 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/%E6%89%B9%E9%87%8F%E6%A3%80%E6%9F%A5%E5%B9%B6%E6%B8%85%E9%99%A4bom%E5%A4%B4/</guid>
      <description>经常碰到各种头疼问题，网页空白不显示等等，好多情况下都是BOM头引起的，但是又不知道是哪个文件有BOM头，于是搜了一下，发现一个批量检查并自动清除BOM头的工具，分享给大家。
&amp;lt;?php if (isset($_GET[&amp;#39;dir&amp;#39;])){ //设置文件目录 $basedir=$_GET[&amp;#39;dir&amp;#39;]; }else{ $basedir = &amp;#39;.&amp;#39;; } $auto = 1; checkdir($basedir); function checkdir($basedir){ if ($dh = opendir($basedir)) { while (($file = readdir($dh)) !== false) { if ($file != &amp;#39;.&amp;#39; &amp;amp;&amp;amp; $file != &amp;#39;..&amp;#39;){ if (!is_dir($basedir.&amp;#34;/&amp;#34;.$file)) { echo &amp;#34;filename: $basedir/$file &amp;#34;.checkBOM(&amp;#34;$basedir/$file&amp;#34;).&amp;#34; &amp;lt;br&amp;gt;&amp;#34;; }else{ $dirname = $basedir.&amp;#34;/&amp;#34;.$file; checkdir($dirname); } } } closedir($dh); } } function checkBOM ($filename) { global $auto; $contents = file_get_contents($filename); $charset[1] = substr($contents, 0, 1); $charset[2] = substr($contents, 1, 1); $charset[3] = substr($contents, 2, 1); if (ord($charset[1]) == 239 &amp;amp;&amp;amp; ord($charset[2]) == 187 &amp;amp;&amp;amp; ord($charset[3]) == 191) { if ($auto == 1) { $rest = substr($contents, 3); rewrite ($filename, $rest); return (&amp;#34;&amp;lt;font color=red&amp;gt;BOM found, automatically removed.</description>
      <content:encoded><![CDATA[<p>经常碰到各种头疼问题，网页空白不显示等等，好多情况下都是BOM头引起的，但是又不知道是哪个文件有BOM头，于是搜了一下，发现一个批量检查并自动清除BOM头的工具，分享给大家。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">isset</span>($_GET[<span style="color:#e6db74">&#39;dir&#39;</span>])){ <span style="color:#75715e">//设置文件目录
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>	$basedir<span style="color:#f92672">=</span>$_GET[<span style="color:#e6db74">&#39;dir&#39;</span>];
</span></span><span style="display:flex;"><span>}<span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>	$basedir <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;.&#39;</span>;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$auto <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">checkdir</span>($basedir);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">checkdir</span>($basedir){
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">if</span> ($dh <span style="color:#f92672">=</span> <span style="color:#a6e22e">opendir</span>($basedir)) {
</span></span><span style="display:flex;"><span>		<span style="color:#66d9ef">while</span> (($file <span style="color:#f92672">=</span> <span style="color:#a6e22e">readdir</span>($dh)) <span style="color:#f92672">!==</span> <span style="color:#66d9ef">false</span>) {
</span></span><span style="display:flex;"><span>			<span style="color:#66d9ef">if</span> ($file <span style="color:#f92672">!=</span> <span style="color:#e6db74">&#39;.&#39;</span> <span style="color:#f92672">&amp;&amp;</span> $file <span style="color:#f92672">!=</span> <span style="color:#e6db74">&#39;..&#39;</span>){
</span></span><span style="display:flex;"><span>				<span style="color:#66d9ef">if</span> (<span style="color:#f92672">!</span><span style="color:#a6e22e">is_dir</span>($basedir<span style="color:#f92672">.</span><span style="color:#e6db74">&#34;/&#34;</span><span style="color:#f92672">.</span>$file)) {
</span></span><span style="display:flex;"><span>					<span style="color:#66d9ef">echo</span> <span style="color:#e6db74">&#34;filename: </span><span style="color:#e6db74">$basedir</span><span style="color:#e6db74">/</span><span style="color:#e6db74">$file</span><span style="color:#e6db74"> &#34;</span><span style="color:#f92672">.</span><span style="color:#a6e22e">checkBOM</span>(<span style="color:#e6db74">&#34;</span><span style="color:#e6db74">$basedir</span><span style="color:#e6db74">/</span><span style="color:#e6db74">$file</span><span style="color:#e6db74">&#34;</span>)<span style="color:#f92672">.</span><span style="color:#e6db74">&#34; &lt;br&gt;&#34;</span>;
</span></span><span style="display:flex;"><span>				}<span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>					$dirname <span style="color:#f92672">=</span> $basedir<span style="color:#f92672">.</span><span style="color:#e6db74">&#34;/&#34;</span><span style="color:#f92672">.</span>$file;
</span></span><span style="display:flex;"><span>					<span style="color:#a6e22e">checkdir</span>($dirname);
</span></span><span style="display:flex;"><span>				}
</span></span><span style="display:flex;"><span>			}
</span></span><span style="display:flex;"><span>		}
</span></span><span style="display:flex;"><span>		<span style="color:#a6e22e">closedir</span>($dh);
</span></span><span style="display:flex;"><span>	}
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">checkBOM</span> ($filename) {
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">global</span> $auto;
</span></span><span style="display:flex;"><span>	$contents <span style="color:#f92672">=</span> <span style="color:#a6e22e">file_get_contents</span>($filename);
</span></span><span style="display:flex;"><span>	$charset[<span style="color:#ae81ff">1</span>] <span style="color:#f92672">=</span> <span style="color:#a6e22e">substr</span>($contents, <span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>	$charset[<span style="color:#ae81ff">2</span>] <span style="color:#f92672">=</span> <span style="color:#a6e22e">substr</span>($contents, <span style="color:#ae81ff">1</span>, <span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>	$charset[<span style="color:#ae81ff">3</span>] <span style="color:#f92672">=</span> <span style="color:#a6e22e">substr</span>($contents, <span style="color:#ae81ff">2</span>, <span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">ord</span>($charset[<span style="color:#ae81ff">1</span>]) <span style="color:#f92672">==</span> <span style="color:#ae81ff">239</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#a6e22e">ord</span>($charset[<span style="color:#ae81ff">2</span>]) <span style="color:#f92672">==</span> <span style="color:#ae81ff">187</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#a6e22e">ord</span>($charset[<span style="color:#ae81ff">3</span>]) <span style="color:#f92672">==</span> <span style="color:#ae81ff">191</span>) {
</span></span><span style="display:flex;"><span>		<span style="color:#66d9ef">if</span> ($auto <span style="color:#f92672">==</span> <span style="color:#ae81ff">1</span>) {
</span></span><span style="display:flex;"><span>			$rest <span style="color:#f92672">=</span> <span style="color:#a6e22e">substr</span>($contents, <span style="color:#ae81ff">3</span>);
</span></span><span style="display:flex;"><span>			<span style="color:#a6e22e">rewrite</span> ($filename, $rest);
</span></span><span style="display:flex;"><span>			<span style="color:#66d9ef">return</span> (<span style="color:#e6db74">&#34;&lt;font color=red&gt;BOM found, automatically removed.&lt;/font&gt;&#34;</span>);
</span></span><span style="display:flex;"><span>		} <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>			<span style="color:#66d9ef">return</span> (<span style="color:#e6db74">&#34;&lt;font color=red&gt;BOM found.&lt;/font&gt;&#34;</span>);
</span></span><span style="display:flex;"><span>		}
</span></span><span style="display:flex;"><span>	}
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">else</span> <span style="color:#66d9ef">return</span> (<span style="color:#e6db74">&#34;BOM Not Found.&#34;</span>);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">rewrite</span> ($filename, $data) {
</span></span><span style="display:flex;"><span>	$filenum <span style="color:#f92672">=</span> <span style="color:#a6e22e">fopen</span>($filename, <span style="color:#e6db74">&#34;w&#34;</span>);
</span></span><span style="display:flex;"><span>	<span style="color:#a6e22e">flock</span>($filenum, <span style="color:#a6e22e">LOCK_EX</span>);
</span></span><span style="display:flex;"><span>	<span style="color:#a6e22e">fwrite</span>($filenum, $data);
</span></span><span style="display:flex;"><span>	<span style="color:#a6e22e">fclose</span>($filenum);
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>新建一个名称为clear_bom.php的文件把上边代码复制进去，在你需要检查BOM的文件目录下运行clear_bom.php 就会自动检查该目录以及子目录下的所有文件是否存在BOM头，如果存在则自动清除。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecshop之smarty与js冲突问题</title>
      <link>https://w.toomore.us/posts/dev/ecshop%E4%B9%8Bsmarty%E4%B8%8Ejs%E5%86%B2%E7%AA%81%E9%97%AE%E9%A2%98/</link>
      <pubDate>Fri, 29 May 2015 15:36:50 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecshop%E4%B9%8Bsmarty%E4%B8%8Ejs%E5%86%B2%E7%AA%81%E9%97%AE%E9%A2%98/</guid>
      <description>在使用 smarty 的时候，如果没有更改 smarty 配置，smarty 的定界符是{ }，大家经常可能碰到模板页中js无法正确执行的问题。
这就是因为 smarty 引擎把js中 { } 之间的内容也当做 smarty 语句来处理，本人总结的解决这个问题主要有三个：
更改 smarty 配置文件中的定界符。 把 javascript代码写到一个js文件中，在模板页中引用即可。 使用 smarty 内置的 literal 标签，此标签内的数据将会被当做文本处理。例如 {literal} &amp;lt;script language=&amp;#34;javascript&amp;#34;&amp;gt; ........ &amp;lt;/script&amp;gt; {/literal} 有时，我们需要输出定界符 { }，则可以使用 {ldelim} 和 {rdelim} 标签来输出左右定界符。</description>
      <content:encoded><![CDATA[<p>在使用 <code>smarty</code> 的时候，如果没有更改 <code>smarty</code> 配置，<code>smarty</code> 的定界符是<code>{ }</code>，大家经常可能碰到模板页中js无法正确执行的问题。</p>
<p>这就是因为 <code>smarty</code> 引擎把js中 <code>{ }</code> 之间的内容也当做 <code>smarty</code> 语句来处理，本人总结的解决这个问题主要有三个：</p>
<ol>
<li>更改 <code>smarty</code> 配置文件中的定界符。</li>
<li>把 <code>javascript</code>代码写到一个js文件中，在模板页中引用即可。</li>
<li>使用 <code>smarty</code> 内置的 <code>literal</code> 标签，此标签内的数据将会被当做文本处理。例如</li>
</ol>
<pre tabindex="0"><code>    {literal}
        &lt;script language=&#34;javascript&#34;&gt;
            ........
        &lt;/script&gt;
    {/literal}
</code></pre><p>有时，我们需要输出定界符 <code>{ }</code>，则可以使用 <code>{ldelim}</code> 和 <code>{rdelim}</code> 标签来输出左右定界符。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecshop 广告位宽度值必须在1 1024之间 修改方法</title>
      <link>https://w.toomore.us/posts/dev/ecshop-%E5%B9%BF%E5%91%8A%E4%BD%8D%E5%AE%BD%E5%BA%A6%E5%80%BC%E5%BF%85%E9%A1%BB%E5%9C%A81-1024%E4%B9%8B%E9%97%B4-%E4%BF%AE%E6%94%B9%E6%96%B9%E6%B3%95/</link>
      <pubDate>Fri, 29 May 2015 09:33:09 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecshop-%E5%B9%BF%E5%91%8A%E4%BD%8D%E5%AE%BD%E5%BA%A6%E5%80%BC%E5%BF%85%E9%A1%BB%E5%9C%A81-1024%E4%B9%8B%E9%97%B4-%E4%BF%AE%E6%94%B9%E6%96%B9%E6%B3%95/</guid>
      <description>一、打开文件 \admin\ad_position.php，将其中的1024改为你需要的最大值。
二、打开文件 \admin\templates\ad_position_info.htm，将其中的1024改为你需要的最大值。</description>
      <content:encoded><![CDATA[<p>一、打开文件 <code>\admin\ad_position.php</code>，将其中的1024改为你需要的最大值。</p>
<p>二、打开文件 <code>\admin\templates\ad_position_info.htm</code>，将其中的1024改为你需要的最大值。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>PHP获取指定时区当前时间-PHP获取世界时钟</title>
      <link>https://w.toomore.us/posts/dev/php%E8%8E%B7%E5%8F%96%E6%8C%87%E5%AE%9A%E6%97%B6%E5%8C%BA%E5%BD%93%E5%89%8D%E6%97%B6%E9%97%B4-php%E8%8E%B7%E5%8F%96%E4%B8%96%E7%95%8C%E6%97%B6%E9%92%9F/</link>
      <pubDate>Mon, 04 May 2015 18:10:13 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/php%E8%8E%B7%E5%8F%96%E6%8C%87%E5%AE%9A%E6%97%B6%E5%8C%BA%E5%BD%93%E5%89%8D%E6%97%B6%E9%97%B4-php%E8%8E%B7%E5%8F%96%E4%B8%96%E7%95%8C%E6%97%B6%E9%92%9F/</guid>
      <description>公司一个项目中需要展现几个不同时区的当前时间，由于php技术很菜，遂百度之，综合各种结果写了下边小函数。
function world_time($timezone_identifiers)//获取指定时区当前时间 { date_default_timezone_set($timezone_identifiers); //设置默认时区为指定时区 echo date(&amp;#39;H:i:s&amp;#39;,time()); //输出指定时区当前时间 date_default_timezone_set(&amp;#39;RPC&amp;#39;); //将默认时区调回为北京时间 } &amp;lt;li&amp;gt;日本：&amp;lt;?php world_time(&amp;#39;Asia/Tokyo&amp;#39;); ?&amp;gt;&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;香港：&amp;lt;?php world_time(&amp;#39;Asia/Hong_Kong&amp;#39;); ?&amp;gt;&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;伦敦：&amp;lt;?php world_time(&amp;#39;Europe/London&amp;#39;); ?&amp;gt;&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;纽约：&amp;lt;?php world_time(&amp;#39;America/New_York&amp;#39;); ?&amp;gt;&amp;lt;/li&amp;gt; </description>
      <content:encoded><![CDATA[<p>公司一个项目中需要展现几个不同时区的当前时间，由于php技术很菜，遂百度之，综合各种结果写了下边小函数。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">world_time</span>($timezone_identifiers)<span style="color:#75715e">//获取指定时区当前时间
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">date_default_timezone_set</span>($timezone_identifiers); <span style="color:#75715e">//设置默认时区为指定时区
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">echo</span> <span style="color:#a6e22e">date</span>(<span style="color:#e6db74">&#39;H:i:s&#39;</span>,<span style="color:#a6e22e">time</span>()); <span style="color:#75715e">//输出指定时区当前时间
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#a6e22e">date_default_timezone_set</span>(<span style="color:#e6db74">&#39;RPC&#39;</span>); <span style="color:#75715e">//将默认时区调回为北京时间
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    }
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">li</span>&gt;日本：<span style="color:#75715e">&lt;?php world_time(&#39;Asia/Tokyo&#39;); ?&gt;</span>&lt;/<span style="color:#f92672">li</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">li</span>&gt;香港：<span style="color:#75715e">&lt;?php world_time(&#39;Asia/Hong_Kong&#39;); ?&gt;</span>&lt;/<span style="color:#f92672">li</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">li</span>&gt;伦敦：<span style="color:#75715e">&lt;?php world_time(&#39;Europe/London&#39;); ?&gt;</span>&lt;/<span style="color:#f92672">li</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">li</span>&gt;纽约：<span style="color:#75715e">&lt;?php world_time(&#39;America/New_York&#39;); ?&gt;</span>&lt;/<span style="color:#f92672">li</span>&gt;
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>phpcms 更新栏目缓存 `PHP Has Encountered a Stack Overflow` 解决办法</title>
      <link>https://w.toomore.us/posts/dev/phpcms-%E6%9B%B4%E6%96%B0%E6%A0%8F%E7%9B%AE%E7%BC%93%E5%AD%98-php-has-encountered-a-stack-overflow-%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/</link>
      <pubDate>Tue, 31 Mar 2015 15:30:02 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/phpcms-%E6%9B%B4%E6%96%B0%E6%A0%8F%E7%9B%AE%E7%BC%93%E5%AD%98-php-has-encountered-a-stack-overflow-%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/</guid>
      <description>phpcms网站后台更新栏目缓存后报错:
PHP has encountered a Stack overflow
解决方法：
1、首先这个问题是出在数据库表上，所以登陆空间的 phpmyadmin 去管理数据库表
2、执行sql语句：SELECT * FROM v9_category WHERE catid=parentid （注意，v9_是表前缀，记得修改成自己的表前缀）
3、正常情况下这个搜索是查询不到记录的，如果查询到记录，说明该记录有问题
4、解决方法把该记录的：parentid的值修改为0即可
原因剖析：
v9_category 表中存在，「分类id(catid)」 等于「父级分类id(parentid)」的记录，导致程序构造树形分类据时，出现了死循环，导致栈内存溢出。</description>
      <content:encoded><![CDATA[<p>phpcms网站后台更新栏目缓存后报错:</p>
<p><code>PHP has encountered a Stack overflow</code></p>
<p>解决方法：</p>
<p>1、首先这个问题是出在数据库表上，所以登陆空间的 <code>phpmyadmin</code> 去管理数据库表</p>
<p>2、执行sql语句：SELECT * FROM <code>v9_category</code> WHERE catid=parentid （注意，v9_是表前缀，记得修改成自己的表前缀）</p>
<p>3、正常情况下这个搜索是查询不到记录的，如果查询到记录，说明该记录有问题</p>
<p>4、解决方法把该记录的：parentid的值修改为0即可</p>
<p>原因剖析：</p>
<p><code>v9_category</code> 表中存在，「分类id(<code>catid</code>)」 等于「父级分类id(<code>parentid</code>)」的记录，导致程序构造树形分类据时，出现了死循环，导致栈内存溢出。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>php判断是否手机访问-php判断访问终端类型</title>
      <link>https://w.toomore.us/posts/dev/php%E5%88%A4%E6%96%AD%E6%98%AF%E5%90%A6%E6%89%8B%E6%9C%BA%E8%AE%BF%E9%97%AE-php%E5%88%A4%E6%96%AD%E8%AE%BF%E9%97%AE%E7%BB%88%E7%AB%AF%E7%B1%BB%E5%9E%8B/</link>
      <pubDate>Wed, 25 Mar 2015 14:47:51 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/php%E5%88%A4%E6%96%AD%E6%98%AF%E5%90%A6%E6%89%8B%E6%9C%BA%E8%AE%BF%E9%97%AE-php%E5%88%A4%E6%96%AD%E8%AE%BF%E9%97%AE%E7%BB%88%E7%AB%AF%E7%B1%BB%E5%9E%8B/</guid>
      <description>php判断是否手机访问-php判断访问终端类型
$agent = check_wap(); if( $agent ) { header(&amp;#39;Location: /m/&amp;#39;); exit; } // check if wap function check_wap(){ // 先检查是否为wap代理，准确度高 if(stristr($_SERVER[&amp;#39;HTTP_VIA&amp;#39;],&amp;#34;wap&amp;#34;)){ return true; } // 检查浏览器是否接受 WML. elseif(strpos(strtoupper($_SERVER[&amp;#39;HTTP_ACCEPT&amp;#39;]),&amp;#34;VND.WAP.WML&amp;#34;) &amp;gt; 0){ return true; } //检查USER_AGENT elseif(preg_match(&amp;#39;/(blackberry|configuration\/cldc|hp |hp-|htc |htc_|htc-|iemobile|kindle|midp|mmp|motorola|mobile|nokia|opera mini|opera |Googlebot-Mobile|YahooSeeker\/M1A1-R2D2|android|iphone|ipod|mobi|palm|palmos|pocket|portalmmm|ppc;|smartphone|sonyericsson|sqh|spv|symbian|treo|up.browser|up.link|vodafone|windows ce|xda |xda_)/i&amp;#39;, $_SERVER[&amp;#39;HTTP_USER_AGENT&amp;#39;])){ return true; } else{ return false; } } </description>
      <content:encoded><![CDATA[<p>php判断是否手机访问-php判断访问终端类型</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>$agent <span style="color:#f92672">=</span> <span style="color:#a6e22e">check_wap</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>( $agent )
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">header</span>(<span style="color:#e6db74">&#39;Location: /m/&#39;</span>);
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">exit</span>;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// check if wap 
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">check_wap</span>(){
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">// 先检查是否为wap代理，准确度高
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">stristr</span>($_SERVER[<span style="color:#e6db74">&#39;HTTP_VIA&#39;</span>],<span style="color:#e6db74">&#34;wap&#34;</span>)){
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">// 检查浏览器是否接受 WML.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#66d9ef">elseif</span>(<span style="color:#a6e22e">strpos</span>(<span style="color:#a6e22e">strtoupper</span>($_SERVER[<span style="color:#e6db74">&#39;HTTP_ACCEPT&#39;</span>]),<span style="color:#e6db74">&#34;VND.WAP.WML&#34;</span>) <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">//检查USER_AGENT
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#66d9ef">elseif</span>(<span style="color:#a6e22e">preg_match</span>(<span style="color:#e6db74">&#39;/(blackberry|configuration\/cldc|hp |hp-|htc |htc_|htc-|iemobile|kindle|midp|mmp|motorola|mobile|nokia|opera mini|opera |Googlebot-Mobile|YahooSeeker\/M1A1-R2D2|android|iphone|ipod|mobi|palm|palmos|pocket|portalmmm|ppc;|smartphone|sonyericsson|sqh|spv|symbian|treo|up.browser|up.link|vodafone|windows ce|xda |xda_)/i&#39;</span>, $_SERVER[<span style="color:#e6db74">&#39;HTTP_USER_AGENT&#39;</span>])){
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">true</span>;       
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">false</span>;  
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>丢了</title>
      <link>https://w.toomore.us/posts/youth/lost/</link>
      <pubDate>Fri, 30 Jan 2015 22:36:51 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/lost/</guid>
      <description>现在说不上来是什么心情，骑了将近一年的、载着我风里来雨里去的自行车丢了！
丢了就回不来了！就像很多人和事一样！
不知道这世上为什么会有小偷！</description>
      <content:encoded><![CDATA[<p>现在说不上来是什么心情，骑了将近一年的、载着我风里来雨里去的自行车丢了！</p>
<p>丢了就回不来了！就像很多人和事一样！</p>
<p>不知道这世上为什么会有小偷！</p>
<p><img loading="lazy" src="/images/content/posts/youth/%E4%B8%A2%E4%BA%8674.png" alt="我的小车车"  title="唯一留存的照片"  />
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>如果昨天是明天的话就好了，这样今天就周五了</title>
      <link>https://w.toomore.us/posts/internet/%E5%A6%82%E6%9E%9C%E6%98%A8%E5%A4%A9%E6%98%AF%E6%98%8E%E5%A4%A9%E7%9A%84%E8%AF%9D%E5%B0%B1%E5%A5%BD%E4%BA%86%E8%BF%99%E6%A0%B7%E4%BB%8A%E5%A4%A9%E5%B0%B1%E5%91%A8%E4%BA%94%E4%BA%86/</link>
      <pubDate>Wed, 28 Jan 2015 16:42:36 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/%E5%A6%82%E6%9E%9C%E6%98%A8%E5%A4%A9%E6%98%AF%E6%98%8E%E5%A4%A9%E7%9A%84%E8%AF%9D%E5%B0%B1%E5%A5%BD%E4%BA%86%E8%BF%99%E6%A0%B7%E4%BB%8A%E5%A4%A9%E5%B0%B1%E5%91%A8%E4%BA%94%E4%BA%86/</guid>
      <description>如果昨天是明天的话就好了，这样今天就周五了
Q：请问句中今天是周几？
A、周三 B、周四 C、周五 D、周日
解答：
设实际今天为x ，则：
实际昨天为x-1
实际明天为x+1
实际比如果晚两天，则：
如果昨天为x-1+2=x+1
如果今天为x+2=5 得x=3
如果明天为x+1+2=6 得x=3
所以今天是周三</description>
      <content:encoded><![CDATA[<p>如果昨天是明天的话就好了，这样今天就周五了</p>
<p>Q：请问句中今天是周几？</p>
<p>A、周三 B、周四 C、周五 D、周日</p>
<p>解答：</p>
<p>设实际今天为x ，则：</p>
<p>实际昨天为x-1</p>
<p>实际明天为x+1</p>
<p>实际比如果晚两天，则：</p>
<p>如果昨天为x-1+2=x+1</p>
<p>如果今天为x+2=5 得x=3</p>
<p>如果明天为x+1+2=6 得x=3</p>
<p>所以今天是周三</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecshop自定义调用指定广告位</title>
      <link>https://w.toomore.us/posts/dev/ecshop%E8%87%AA%E5%AE%9A%E4%B9%89%E8%B0%83%E7%94%A8%E6%8C%87%E5%AE%9A%E5%B9%BF%E5%91%8A%E4%BD%8D/</link>
      <pubDate>Wed, 26 Nov 2014 10:31:49 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecshop%E8%87%AA%E5%AE%9A%E4%B9%89%E8%B0%83%E7%94%A8%E6%8C%87%E5%AE%9A%E5%B9%BF%E5%91%8A%E4%BD%8D/</guid>
      <description>一、在 includes/lib_common.php 文件中最下方添加如下函数：
/*自定义调用指定广告位*/ function getads($cat,$num) { $time = gmtime(); $sql = &amp;#34;SELECT * FROM &amp;#34; . $GLOBALS[&amp;#39;ecs&amp;#39;]-&amp;gt;table(&amp;#39;ad&amp;#39;) . &amp;#34; where position_id=&amp;#34;.$cat.&amp;#34; and start_time &amp;lt;= &amp;#39;&amp;#34; . $time . &amp;#34;&amp;#39; AND end_time &amp;gt;= &amp;#39;&amp;#34; . $time . &amp;#34;&amp;#39; ORDER BY ad_id desc limit &amp;#34;.$num; $res = $GLOBALS[&amp;#39;db&amp;#39;]-&amp;gt;getAll($sql); $arr = array(); foreach ($res AS $idx =&amp;gt; $row) { $arr[$idx][&amp;#39;id&amp;#39;] = $row[&amp;#39;ad_id&amp;#39;]; $arr[$idx][&amp;#39;title&amp;#39;] = $row[&amp;#39;ad_name&amp;#39;]; $arr[$idx][&amp;#39;ad_link&amp;#39;] = $row[&amp;#39;ad_link&amp;#39;]; $arr[$idx][&amp;#39;ad_code&amp;#39;] = &amp;#34;data/afficheimg/&amp;#34;.$row[&amp;#39;ad_code&amp;#39;]; } return $arr; } 二、在需要调用广告的页面（例如首页）的控制文件（index.</description>
      <content:encoded><![CDATA[<p>一、在 <code>includes/lib_common.php</code> 文件中最下方添加如下函数：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>	<span style="color:#75715e">/*自定义调用指定广告位*/</span>
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">function</span> <span style="color:#a6e22e">getads</span>($cat,$num)
</span></span><span style="display:flex;"><span>	{
</span></span><span style="display:flex;"><span>        $time <span style="color:#f92672">=</span> <span style="color:#a6e22e">gmtime</span>();
</span></span><span style="display:flex;"><span>        $sql <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;SELECT * FROM &#34;</span> <span style="color:#f92672">.</span> $GLOBALS[<span style="color:#e6db74">&#39;ecs&#39;</span>]<span style="color:#f92672">-&gt;</span><span style="color:#a6e22e">table</span>(<span style="color:#e6db74">&#39;ad&#39;</span>) <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34; where position_id=&#34;</span><span style="color:#f92672">.</span>$cat<span style="color:#f92672">.</span><span style="color:#e6db74">&#34; and start_time &lt;= &#39;&#34;</span> <span style="color:#f92672">.</span> $time <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;&#39; AND end_time &gt;= &#39;&#34;</span> <span style="color:#f92672">.</span> $time <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;&#39; ORDER BY ad_id desc limit &#34;</span><span style="color:#f92672">.</span>$num;
</span></span><span style="display:flex;"><span>        $res <span style="color:#f92672">=</span> $GLOBALS[<span style="color:#e6db74">&#39;db&#39;</span>]<span style="color:#f92672">-&gt;</span><span style="color:#a6e22e">getAll</span>($sql);
</span></span><span style="display:flex;"><span>        $arr <span style="color:#f92672">=</span> <span style="color:#66d9ef">array</span>();
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">foreach</span> ($res <span style="color:#66d9ef">AS</span> $idx <span style="color:#f92672">=&gt;</span> $row)
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>        $arr[$idx][<span style="color:#e6db74">&#39;id&#39;</span>] <span style="color:#f92672">=</span> $row[<span style="color:#e6db74">&#39;ad_id&#39;</span>];
</span></span><span style="display:flex;"><span>        $arr[$idx][<span style="color:#e6db74">&#39;title&#39;</span>] <span style="color:#f92672">=</span> $row[<span style="color:#e6db74">&#39;ad_name&#39;</span>];
</span></span><span style="display:flex;"><span>        $arr[$idx][<span style="color:#e6db74">&#39;ad_link&#39;</span>] <span style="color:#f92672">=</span> $row[<span style="color:#e6db74">&#39;ad_link&#39;</span>];
</span></span><span style="display:flex;"><span>        $arr[$idx][<span style="color:#e6db74">&#39;ad_code&#39;</span>] <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;data/afficheimg/&#34;</span><span style="color:#f92672">.</span>$row[<span style="color:#e6db74">&#39;ad_code&#39;</span>];
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> $arr;
</span></span><span style="display:flex;"><span>	}
</span></span></code></pre></div><p>二、在需要调用广告的页面（例如首页）的控制文件（index.php）加入如下代码：</p>
<p>在 <code>$smarty-&gt;assign('shop_notice',     $_CFG['shop_notice']);       // 商店公告</code>下方加入</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>    $smarty<span style="color:#f92672">-&gt;</span><span style="color:#a6e22e">assign</span>(<span style="color:#e6db74">&#34;banner&#34;</span>,<span style="color:#a6e22e">getads</span>(<span style="color:#ae81ff">1</span>,<span style="color:#ae81ff">5</span>)); <span style="color:#75715e">//首页banner轮播
</span></span></span></code></pre></div><p>其中1为广告位id，5为需要调用的广告数量。</p>
<p>三、在需要调用广告的模板（index.dwt）中加入下面代码</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span><span style="color:#75715e">&lt;!--{foreach from=$banner name=ban item=banner}--&gt;</span>
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span>        &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;slideChild&#34;</span>&gt;
</span></span><span style="display:flex;"><span>            &lt;<span style="color:#f92672">a</span>  <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;{$banner.ad_link}&#34;</span>&gt;&lt;/<span style="color:#f92672">a</span>&gt;
</span></span><span style="display:flex;"><span>        &lt;/<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span>        &lt;<span style="color:#f92672">img</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;slideImg&#34;</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;{$banner.ad_code}&#34;</span> <span style="color:#a6e22e">galleryimg</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;no&#34;</span>&gt;
</span></span><span style="display:flex;"><span>    &lt;/<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!--{/foreach}--&gt;</span>
</span></span></code></pre></div><p>四、如果要在其他页面自定义调用广告位方法类似。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Destoon修改商务便签文字</title>
      <link>https://w.toomore.us/posts/dev/destoon%E4%BF%AE%E6%94%B9%E5%95%86%E5%8A%A1%E4%BE%BF%E7%AD%BE%E6%96%87%E5%AD%97/</link>
      <pubDate>Fri, 14 Nov 2014 16:08:12 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/destoon%E4%BF%AE%E6%94%B9%E5%95%86%E5%8A%A1%E4%BE%BF%E7%AD%BE%E6%96%87%E5%AD%97/</guid>
      <description>会员注册登录以后商务便签默认会显示：
欢迎使用DESTOON B2B网站管理系统www.destoon.com，
修改如下文件即可：
file/user/1/1/note.php</description>
      <content:encoded><![CDATA[<p>会员注册登录以后商务便签默认会显示：</p>
<blockquote>
<p>欢迎使用DESTOON B2B网站管理系统www.destoon.com，</p>
</blockquote>
<p>修改如下文件即可：</p>
<p><code>file/user/1/1/note.php</code></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecshop首页获取指定分类的推荐商品</title>
      <link>https://w.toomore.us/posts/dev/ecshop%E9%A6%96%E9%A1%B5%E8%8E%B7%E5%8F%96%E6%8C%87%E5%AE%9A%E5%88%86%E7%B1%BB%E7%9A%84%E6%8E%A8%E8%8D%90%E5%95%86%E5%93%81/</link>
      <pubDate>Tue, 11 Nov 2014 10:44:28 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecshop%E9%A6%96%E9%A1%B5%E8%8E%B7%E5%8F%96%E6%8C%87%E5%AE%9A%E5%88%86%E7%B1%BB%E7%9A%84%E6%8E%A8%E8%8D%90%E5%95%86%E5%93%81/</guid>
      <description>ecshop自带函数就可以实现这个功能,函数如下：
include/lib_goods.php 中的 get_category_recommend_goods($type = &#39;&#39;, $cats = &#39;&#39;, $brand = 0, $min =0, $max = 0, $ext=&#39;&#39;) 函数。
调用步骤：
第一步：在根目录 index.php 文件 $smarty-&amp;gt;assign(&#39;shop_notice&#39;, $_CFG[&#39;shop_notice&#39;]); // 商店公告 下方(约128行)，插入如下代码：
$smarty-&amp;gt;assign(&amp;#39;category_recommend_goods22&amp;#39;, get_category_recommend_goods(&amp;#39;hot&amp;#39;,22)); //调用指定分类下推荐商品 其中 category_recommend_goods22 为在模板中调用的名称，hot 为要调用的推荐类型，22 为指定分类的分类id。
第二步：打开你的首页模板文件，在需要调用的地方插入下边代码：
&amp;lt;!--{foreach from=$category_recommend_goods22 item=goods name=&amp;#34;category_recommend_goods&amp;#34;}--&amp;gt;	&amp;lt;!-- {if $smarty.foreach.category_recommend_goods.iteration &amp;lt; 7} **商品显示数量 --&amp;gt; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;#34;{$goods.url}&amp;#34;&amp;gt;&amp;lt;img src=&amp;#34;{$goods.thumb}&amp;#34; width=&amp;#34;194&amp;#34; height=&amp;#34;172&amp;#34; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;div&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;a href=&amp;#34;{$goods.url}&amp;#34;&amp;gt;{$goods.name|truncate:10:&amp;#34;...&amp;#34;:true}&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;{$goods.brief}&amp;lt;br /&amp;gt; ￥{$goods.shop_price}&amp;lt;/div&amp;gt; &amp;lt;/li&amp;gt; &amp;lt;!--{/if}--&amp;gt; &amp;lt;!--{/foreach}--&amp;gt; 完成上边两部基本上就大功告成了，但是有个问题，就是不能获取到该指定分类的子分类下的推荐商品，这样就需要对默认的函数进行改造，方法见第三步。
第三步：找到第一步用到的函数 get_category_recommend_goods，查找
if (!empty($cats)) { $sql .</description>
      <content:encoded><![CDATA[<p>ecshop自带函数就可以实现这个功能,函数如下：</p>
<p><code>include/lib_goods.php</code> 中的 <code>get_category_recommend_goods($type = '', $cats = '', $brand = 0, $min =0,  $max = 0, $ext='')</code> 函数。</p>
<p>调用步骤：</p>
<p>第一步：在根目录 <code>index.php</code> 文件 <code>$smarty-&gt;assign('shop_notice',     $_CFG['shop_notice']);       // 商店公告</code> 下方(约128行)，插入如下代码：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>$smarty<span style="color:#f92672">-&gt;</span><span style="color:#a6e22e">assign</span>(<span style="color:#e6db74">&#39;category_recommend_goods22&#39;</span>,    <span style="color:#a6e22e">get_category_recommend_goods</span>(<span style="color:#e6db74">&#39;hot&#39;</span>,<span style="color:#ae81ff">22</span>)); <span style="color:#75715e">//调用指定分类下推荐商品
</span></span></span></code></pre></div><p>其中 <code>category_recommend_goods22</code> 为在模板中调用的名称，<code>hot</code> 为要调用的推荐类型，22 为指定分类的分类id。</p>
<p>第二步：打开你的首页模板文件，在需要调用的地方插入下边代码：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;!--</span>{<span style="color:#66d9ef">foreach</span> <span style="color:#a6e22e">from</span><span style="color:#f92672">=</span>$category_recommend_goods22 <span style="color:#a6e22e">item</span><span style="color:#f92672">=</span><span style="color:#a6e22e">goods</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;category_recommend_goods&#34;</span>}<span style="color:#f92672">--&gt;</span>			
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;!--</span> {<span style="color:#66d9ef">if</span> $smarty<span style="color:#f92672">.</span><span style="color:#66d9ef">foreach</span><span style="color:#f92672">.</span><span style="color:#a6e22e">category_recommend_goods</span><span style="color:#f92672">.</span><span style="color:#a6e22e">iteration</span> <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">7</span>} <span style="color:#f92672">**</span><span style="color:#a6e22e">商品显示数量</span> <span style="color:#f92672">--&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">li</span><span style="color:#f92672">&gt;&lt;</span><span style="color:#a6e22e">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">{</span>$goods<span style="color:#f92672">.</span><span style="color:#a6e22e">url</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span><span style="color:#f92672">&gt;&lt;</span><span style="color:#a6e22e">img</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">{</span>$goods<span style="color:#f92672">.</span><span style="color:#a6e22e">thumb</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#a6e22e">width</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;194&#34;</span> <span style="color:#a6e22e">height</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;172&#34;</span> <span style="color:#f92672">/&gt;&lt;/</span><span style="color:#a6e22e">a</span><span style="color:#f92672">&gt;&lt;</span><span style="color:#a6e22e">div</span><span style="color:#f92672">&gt;&lt;</span><span style="color:#a6e22e">br</span> <span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">{</span>$goods<span style="color:#f92672">.</span><span style="color:#a6e22e">url</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span><span style="color:#f92672">&gt;</span>{$goods<span style="color:#f92672">.</span><span style="color:#a6e22e">name</span><span style="color:#f92672">|</span><span style="color:#a6e22e">truncate</span><span style="color:#f92672">:</span><span style="color:#ae81ff">10</span><span style="color:#f92672">:</span><span style="color:#e6db74">&#34;...&#34;</span><span style="color:#f92672">:</span><span style="color:#66d9ef">true</span>}<span style="color:#f92672">&lt;/</span><span style="color:#a6e22e">a</span><span style="color:#f92672">&gt;&lt;</span><span style="color:#a6e22e">br</span> <span style="color:#f92672">/&gt;</span>{$goods<span style="color:#f92672">.</span><span style="color:#a6e22e">brief</span>}<span style="color:#f92672">&lt;</span><span style="color:#a6e22e">br</span> <span style="color:#f92672">/&gt;</span> 
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">￥</span>{$goods<span style="color:#f92672">.</span><span style="color:#a6e22e">shop_price</span>}<span style="color:#f92672">&lt;/</span><span style="color:#a6e22e">div</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;/</span><span style="color:#a6e22e">li</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;!--</span>{<span style="color:#f92672">/</span><span style="color:#66d9ef">if</span>}<span style="color:#f92672">--&gt;</span>  
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;!--</span>{<span style="color:#f92672">/</span><span style="color:#66d9ef">foreach</span>}<span style="color:#f92672">--&gt;</span> 
</span></span></code></pre></div><p>完成上边两部基本上就大功告成了，但是有个问题，就是不能获取到该指定分类的子分类下的推荐商品，这样就需要对默认的函数进行改造，方法见第三步。</p>
<p>第三步：找到第一步用到的函数 <code>get_category_recommend_goods</code>，查找</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#f92672">!</span><span style="color:#66d9ef">empty</span>($cats))
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        $sql <span style="color:#f92672">.=</span> <span style="color:#e6db74">&#34; AND (&#34;</span> <span style="color:#f92672">.</span> $cats <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34; OR &#34;</span> <span style="color:#f92672">.</span> <span style="color:#a6e22e">get_extension_goods</span>($cats) <span style="color:#f92672">.</span><span style="color:#e6db74">&#34;)&#34;</span>;
</span></span><span style="display:flex;"><span>    }
</span></span></code></pre></div><p>替换为：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (<span style="color:#f92672">!</span><span style="color:#66d9ef">empty</span>($cats))
</span></span><span style="display:flex;"><span>{	
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">//获取指定分类的所有子分类id cjm 20141111
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    $cat_tree <span style="color:#f92672">=</span>  <span style="color:#a6e22e">get_children</span>($cats);		
</span></span><span style="display:flex;"><span>    $sql <span style="color:#f92672">.=</span> <span style="color:#e6db74">&#34; AND (&#34;</span><span style="color:#f92672">.</span>$cat_tree<span style="color:#f92672">.</span><span style="color:#e6db74">&#34; OR &#34;</span> <span style="color:#f92672">.</span> <span style="color:#a6e22e">get_extension_goods</span>($cats) <span style="color:#f92672">.</span><span style="color:#e6db74">&#34;)&#34;</span>;
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>通过以上三步，就是可以实现在首页调用任意分类下的推荐商品了。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>信念、思考、行动 谈谈程序员返回家乡的创业问题</title>
      <link>https://w.toomore.us/posts/internet/%E4%BF%A1%E5%BF%B5%E6%80%9D%E8%80%83%E8%A1%8C%E5%8A%A8-%E8%B0%88%E8%B0%88%E7%A8%8B%E5%BA%8F%E5%91%98%E8%BF%94%E5%9B%9E%E5%AE%B6%E4%B9%A1%E7%9A%84%E5%88%9B%E4%B8%9A%E9%97%AE%E9%A2%98/</link>
      <pubDate>Sat, 08 Nov 2014 23:45:54 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/%E4%BF%A1%E5%BF%B5%E6%80%9D%E8%80%83%E8%A1%8C%E5%8A%A8-%E8%B0%88%E8%B0%88%E7%A8%8B%E5%BA%8F%E5%91%98%E8%BF%94%E5%9B%9E%E5%AE%B6%E4%B9%A1%E7%9A%84%E5%88%9B%E4%B8%9A%E9%97%AE%E9%A2%98/</guid>
      <description>昨天晚上在微博上看了篇 《为什么现在很多年轻人愿意来北上广深打拼，即使过得异常艰苦，远离亲人，仍然义无反顾？》，有些话想说。
感觉很多人的担心是回到一个落后的环境后的种种不适应，比如说，工作机会少，比如说，工资低，比如说，不靠能力靠关系，比如说，受不了爱攀比的文化。
极其巨大的反差阻挡了程序员的脚步。
程序员返回家乡，那就是农村包围城市。在二十世纪，农村包围城市最成功的就是我党。我们先看一个问题：太祖、恩来、国焘、明明四个人，当年都是我党的巨头，太祖论狠比不过国焘，论理论比不过明明，论根基比不过恩来，为什么最后是他走上人民币了呢？
信念、思考和行动。
国焘缺乏信念，恩来不擅思考，明明没有行动。只有太祖，三个都有。还是一只菜鸟时就大叫一声 —— 问苍茫大地。
当踏下火车/飞机，看着家乡苍青的天空和苍凉的大地，先深深的吸一口气，像一只菜鸟一样喊一声：问苍茫大地，谁主沉浮。
必须得有问苍茫大地的豪迈和勇气，否则，在家乡混不下去。
一、信念 从一线城市返回家乡，第一关便是信念关。
工作机会少。一个城市就这么几个虾米IT企业，做着Copy+Paste的工作。工资得除以3，业内交流机会也很少。缺乏信念或信念不坚定的，在这一关就蔫了。
什么是IT呢？
IT既是一个行业，也是一个信念。
在很早之前，有一个口号，互联网-地球村。
这些年来，IT改变了购物，改变了娱乐，改变了资讯获取，改变了教育。
要有这样的信念：IT就是要改变世界，让世界融合。
不要问你会什么？ 基本上，你会的都不怎么用得上。而要问，我想要改变什么。
一个落后的地区，有很多可以改变的地方。
本地没有工作机会 —— 网上有；
本地缺乏交流 —— 网上交流；
本地没有好的企业 —— 自己建一个嘛；
对本地IT企业文化不爽 —— 自己建一个嘛，你说了算。
目前是创业门槛最低的时候。如果自己能解决办公地点的问题，一年公司维护成本最低的话不超过1000元。算上办公地点，一年10000元可以解决。搞IT创业最大优势就是这点 —— 木有成本。
就算你不成立一个公司，也要在心里成立一个公司。告诉自己，从现在起，我不是一个程序员，而是一个老板了。
二、思考 程序员和老板的区别是思考问题的角度和方式。
程序员讨论问题是求同存异，老板思考的是存同求异。求同存异是商业大忌。
程序员考虑的是解决问题、跳槽和加薪，老板思考的问题是生存、发展和壮大。
在家乡，生存其实很简单。一个月两三千块钱就能生存，闭着眼睛都能生存。难在发展和壮大这两个问题上。
发展的核心是寻找到你的利基市场。壮大是以利基市场为根基，起跳到主流市场。
不同的地方做事情有不同的风格。一线城市喜欢，创业-融资-直接攻打主流市场不成功便成仁的模式。弄个人间大炮，把你装进去，在你屁股后面塞几百万几千万几亿资金当火药，轰的一下发射上去。媒体上也总是报道这些。
在小城市，没有这种模式，你得一个坑一个坑的爬。
这个坑，就是利基市场。必须找到适合自己的利基市场。
利基市场就是那些不大不小的缝隙中的市场。
别JB听媒体天天叽叽歪歪咋咋呼呼，看什么热做什么。媒体爱追星，主要版面都报道的是主流市场，关于利基市场的报道一般都躲在小角落里。你要是瞄准主流市场直接去干，就好比找女朋友非林志玲不可，喝个酒非得苍井空来陪，去趟北京非得习大大接机，自己想一想可行不？
主流市场没你什么事——从一线城市返回，最最最最最最最最最最最最关键的就是——你能不能找到你的利基市场。
而从大城市回来的人，利基市场特别好找。
十四个字——大企业鞭长莫及，小企业能力不够。
找那些大企业鞭长莫及，小企业能力不够的领域，插进去。可以傍一个本地企业，可以傍一个本地行业，也可以发挥自己的优势占个小山头。
比如，俺找到的利基市场就是在IT和计算机视觉领域给中小企业做研发外包。国内IT领域有很多的开发商集成商运营商，他们的开发能力可以，研发能力不够，而在实际中又需要研发，招聘人不划算或招不到，于是外包出去。
可以多看看本地新闻。比如，我们这里引进了水晶产业，就可以做个产业门户网站、工艺品在线定制、在线营销。这种属于傍行业。多联系联系本地企业，看看能否为他们解决什么问题，这种属于傍企业。再比如，做本地门户的，做本地游戏的，做本地移动开发的……。
在小城市的利基市场站稳后，做得好的话，每年的利润大概在百万到千万。
在利基市场站稳后，在生活压力和质量上就超过绝大多数在一线城市打拼的人了。那种写两屏代码就能买一平米房子的感觉，在大城市是很难体会到的。如果想进一步，想成为大佬，就得向主流市场进攻了，这个比较困难。
对绝大多数人来说，在利基市场上有自己的事业，并不是太过分的要求。
思维的转换很关键，转换不了思维，就又掉进坑里了。搞IT的，学习能力超强，资讯获取能力超强，这两个能力是本能，别想什么我会C++会Java会C#这些烂事。
一旦转换过思维，会发现现在的中国，简直就是一望无际的大草原，到处都是草，你就是一匹马，跑啊，啃啊 …… 哦，还是那句比喻，掉进米缸的老鼠，翻啊翻啊 ……
顺手点评一个。
worktile.com ，程序员思维太严重。看那些用户都是些什么啊：
这里面没多少有价值的用户。
开发者？中国的开发者都喜欢免费的，也有自己架设的能力。设计师？市场人员？律师？顾问？
这些就是程序员思维，从自己角度去考虑，去揣摩用户特征。
再看easybug (http://easybug.</description>
      <content:encoded><![CDATA[<p>昨天晚上在微博上看了篇 <a href="http://www.zhihu.com/question/22614212">《为什么现在很多年轻人愿意来北上广深打拼，即使过得异常艰苦，远离亲人，仍然义无反顾？》</a>，有些话想说。</p>
<p>感觉很多人的担心是回到一个落后的环境后的种种不适应，比如说，工作机会少，比如说，工资低，比如说，不靠能力靠关系，比如说，受不了爱攀比的文化。</p>
<p>极其巨大的反差阻挡了程序员的脚步。</p>
<p>程序员返回家乡，那就是农村包围城市。在二十世纪，农村包围城市最成功的就是我党。我们先看一个问题：太祖、恩来、国焘、明明四个人，当年都是我党的巨头，太祖论狠比不过国焘，论理论比不过明明，论根基比不过恩来，为什么最后是他走上人民币了呢？</p>
<p>信念、思考和行动。</p>
<p>国焘缺乏信念，恩来不擅思考，明明没有行动。只有太祖，三个都有。还是一只菜鸟时就大叫一声 —— 问苍茫大地。</p>
<p>当踏下火车/飞机，看着家乡苍青的天空和苍凉的大地，先深深的吸一口气，像一只菜鸟一样喊一声：问苍茫大地，谁主沉浮。</p>
<p>必须得有问苍茫大地的豪迈和勇气，否则，在家乡混不下去。</p>
<h3 id="一信念">一、信念</h3>
<p>从一线城市返回家乡，第一关便是信念关。</p>
<p>工作机会少。一个城市就这么几个虾米IT企业，做着Copy+Paste的工作。工资得除以3，业内交流机会也很少。缺乏信念或信念不坚定的，在这一关就蔫了。</p>
<p>什么是IT呢？</p>
<p>IT既是一个行业，也是一个信念。</p>
<p>在很早之前，有一个口号，互联网-地球村。</p>
<p>这些年来，IT改变了购物，改变了娱乐，改变了资讯获取，改变了教育。</p>
<p>要有这样的信念：IT就是要改变世界，让世界融合。</p>
<p>不要问你会什么？ 基本上，你会的都不怎么用得上。而要问，我想要改变什么。</p>
<p>一个落后的地区，有很多可以改变的地方。</p>
<p>本地没有工作机会 —— 网上有；</p>
<p>本地缺乏交流 —— 网上交流；</p>
<p>本地没有好的企业 —— 自己建一个嘛；</p>
<p>对本地IT企业文化不爽 —— 自己建一个嘛，你说了算。</p>
<p>目前是创业门槛最低的时候。如果自己能解决办公地点的问题，一年公司维护成本最低的话不超过1000元。算上办公地点，一年10000元可以解决。搞IT创业最大优势就是这点 —— 木有成本。</p>
<p>就算你不成立一个公司，也要在心里成立一个公司。告诉自己，从现在起，我不是一个程序员，而是一个老板了。</p>
<h3 id="二思考">二、思考</h3>
<p>程序员和老板的区别是思考问题的角度和方式。</p>
<p>程序员讨论问题是求同存异，老板思考的是存同求异。求同存异是商业大忌。</p>
<p>程序员考虑的是解决问题、跳槽和加薪，老板思考的问题是生存、发展和壮大。</p>
<p>在家乡，生存其实很简单。一个月两三千块钱就能生存，闭着眼睛都能生存。难在发展和壮大这两个问题上。</p>
<p>发展的核心是寻找到你的利基市场。壮大是以利基市场为根基，起跳到主流市场。</p>
<p>不同的地方做事情有不同的风格。一线城市喜欢，创业-融资-直接攻打主流市场不成功便成仁的模式。弄个人间大炮，把你装进去，在你屁股后面塞几百万几千万几亿资金当火药，轰的一下发射上去。媒体上也总是报道这些。</p>
<p>在小城市，没有这种模式，你得一个坑一个坑的爬。</p>
<p>这个坑，就是利基市场。必须找到适合自己的利基市场。</p>
<p>利基市场就是那些不大不小的缝隙中的市场。</p>
<p>别JB听媒体天天叽叽歪歪咋咋呼呼，看什么热做什么。媒体爱追星，主要版面都报道的是主流市场，关于利基市场的报道一般都躲在小角落里。你要是瞄准主流市场直接去干，就好比找女朋友非林志玲不可，喝个酒非得苍井空来陪，去趟北京非得习大大接机，自己想一想可行不？</p>
<p>主流市场没你什么事——从一线城市返回，最最最最最最最最最最最最关键的就是——你能不能找到你的利基市场。</p>
<p>而从大城市回来的人，利基市场特别好找。</p>
<p>十四个字——大企业鞭长莫及，小企业能力不够。</p>
<p>找那些大企业鞭长莫及，小企业能力不够的领域，插进去。可以傍一个本地企业，可以傍一个本地行业，也可以发挥自己的优势占个小山头。</p>
<p>比如，俺找到的利基市场就是在IT和计算机视觉领域给中小企业做研发外包。国内IT领域有很多的开发商集成商运营商，他们的开发能力可以，研发能力不够，而在实际中又需要研发，招聘人不划算或招不到，于是外包出去。</p>
<p>可以多看看本地新闻。比如，我们这里引进了水晶产业，就可以做个产业门户网站、工艺品在线定制、在线营销。这种属于傍行业。多联系联系本地企业，看看能否为他们解决什么问题，这种属于傍企业。再比如，做本地门户的，做本地游戏的，做本地移动开发的……。</p>
<p>在小城市的利基市场站稳后，做得好的话，每年的利润大概在百万到千万。</p>
<p>在利基市场站稳后，在生活压力和质量上就超过绝大多数在一线城市打拼的人了。那种写两屏代码就能买一平米房子的感觉，在大城市是很难体会到的。如果想进一步，想成为大佬，就得向主流市场进攻了，这个比较困难。</p>
<p>对绝大多数人来说，在利基市场上有自己的事业，并不是太过分的要求。</p>
<p>思维的转换很关键，转换不了思维，就又掉进坑里了。搞IT的，学习能力超强，资讯获取能力超强，这两个能力是本能，别想什么我会C++会Java会C#这些烂事。</p>
<p>一旦转换过思维，会发现现在的中国，简直就是一望无际的大草原，到处都是草，你就是一匹马，跑啊，啃啊 …… 哦，还是那句比喻，掉进米缸的老鼠，翻啊翻啊 ……</p>
<p>顺手点评一个。</p>
<p>worktile.com ，程序员思维太严重。看那些用户都是些什么啊：</p>
<p>这里面没多少有价值的用户。</p>
<p>开发者？中国的开发者都喜欢免费的，也有自己架设的能力。设计师？市场人员？律师？顾问？</p>
<p>这些就是程序员思维，从自己角度去考虑，去揣摩用户特征。</p>
<p>再看easybug (<a href="http://easybug.net/">http://easybug.net/</a>) 。Easybug这个名字就给他判了刑，做不大。这也是程序员思维，bug管理就只能用于bug管理啊？</p>
<p>记得高中时，我们的校长很严厉。经常没事就全校到处转，看到问题就马上找相关的人，要求解决。现在是手机时代，让我们想一个这样的场景：校长在全校巡查，看到某班的门有问题，拿出手机，拍照，将照片指派给某人，然后，用语音说出问题，然后就去巡查下一个地点。某人收到后，查看照片和照片附带的位置信息，处理完后，照相回复。</p>
<p>这样的系统天朝的每个单位、部门都能用啊亲！！都是不缺钱的主啊亲！！建筑工地也能用！装修也能用！</p>
<p>但前提是，手机、语音、拍照、视频、好用！</p>
<p>现在网上的这些任务管理系统没几个好用的，大部分模仿国外的，国外的不适合国内啊亲。其实完全可以免费。国内有个强大的需求——显示存在感的需求。领导在指派任务时，有一个选择人的菜单，手机上显示不了几个人，可以搞竞价排名。谁出钱最多，谁显示在第一，出钱第二的显示在第二 …… 。有的不想被关注的可以花钱隐藏自己，还可以搞一套勋章系统……</p>
<p>做得好，可以做出一个上市公司出来。</p>
<p>马斯洛的需求无层次不适合中国。国人的需求分三个层次——生存、稳定、装逼。对应的，国内的产品也分三个层次——便宜、好用、装B。人们愿意为这些掏钱。</p>
<p>想清楚这些了，能看到太多太多的商业机会 ……</p>
<h3 id="三行动">三、行动</h3>
<p>行动，就很简单了。</p>
<p>坚定信念，屏蔽外界的噪音，来自亲戚的，来自朋友的，来自媒体的。先生存下来，通过朋友介绍接接活，通过网上网站接接活，或者自己写点能赚钱的卖卖。这一步又有一个误区，那就是觉得价格低不划算不做。这是程序员思维，觉得自己值多少价格，低了不接。老板思维就是生存第一，饥饿状态下，有骨头就啃。待发现一块适合自己的利基市场后，切进去，在里面吸取养分，成长长大，伺机问鼎中原。</p>
<p>不能觉得开始挣钱太少，挣钱太难就放弃了，丑小鸭的故事还记得不？</p>
<p>文章转自： <a href="http://www.cnblogs.com/xiaotie/p/3537813.html">http://www.cnblogs.com/xiaotie/p/3537813.html</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>QQ空间如何屏蔽好友刷屏广告</title>
      <link>https://w.toomore.us/posts/website/qq%E7%A9%BA%E9%97%B4%E5%A6%82%E4%BD%95%E5%B1%8F%E8%94%BD%E5%A5%BD%E5%8F%8B%E5%88%B7%E5%B1%8F%E5%B9%BF%E5%91%8A/</link>
      <pubDate>Wed, 29 Oct 2014 21:26:02 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/qq%E7%A9%BA%E9%97%B4%E5%A6%82%E4%BD%95%E5%B1%8F%E8%94%BD%E5%A5%BD%E5%8F%8B%E5%88%B7%E5%B1%8F%E5%B9%BF%E5%91%8A/</guid>
      <description>第一步、进入空间个人中心，全部动态右侧有一个齿轮按钮，如下图：
第二步、点击齿轮按钮，添加隐藏好友，隐藏好友的动态将不会再出现你的空间动态！</description>
      <content:encoded><![CDATA[<p>第一步、进入空间个人中心，全部动态右侧有一个齿轮按钮，如下图：</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/49e2499c27d6c259dfc87e6c24c6a7c49f5878a0e159ba18c11c3da4911d8619.png" alt="个人中心"  />
</p>
<p>第二步、点击齿轮按钮，添加隐藏好友，隐藏好友的动态将不会再出现你的空间动态！</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/b0cb22b02d399fc1569325257f9ba3bee0c30a3d16731e2bc268a0b41f273326.png" alt="添加要隐藏的好友"  />
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Css实现文字竖排</title>
      <link>https://w.toomore.us/posts/dev/css%E5%AE%9E%E7%8E%B0%E6%96%87%E5%AD%97%E7%AB%96%E6%8E%92/</link>
      <pubDate>Fri, 24 Oct 2014 16:58:48 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/css%E5%AE%9E%E7%8E%B0%E6%96%87%E5%AD%97%E7%AB%96%E6%8E%92/</guid>
      <description>第一种方法：将需要竖排显示的字符放在span中，在CSS中设置span的display属性为block，不过不推荐使用这种方法，因为有些麻烦，代码如下：
h1 span { display: block; } &amp;lt;h1&amp;gt; &amp;lt;span&amp;gt; N &amp;lt;/span&amp;gt; &amp;lt;span&amp;gt; E &amp;lt;/span&amp;gt; &amp;lt;span&amp;gt; T &amp;lt;/span&amp;gt; &amp;lt;span&amp;gt; T &amp;lt;/span&amp;gt; &amp;lt;span&amp;gt; U &amp;lt;/span&amp;gt; &amp;lt;span&amp;gt; T &amp;lt;/span&amp;gt; &amp;lt;span&amp;gt; S &amp;lt;/span&amp;gt; &amp;lt;/h1&amp;gt; 第二种方法A：同样使用CSS，在需要竖向显示的地方，强制定义显示区域的宽度，这样字符会自动竖向排列：请看具体代码：
&amp;lt;!DOCTYPE html&amp;gt; &amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;meta charset=utf-8 /&amp;gt; &amp;lt;title&amp;gt;Vertical Text&amp;lt;/title&amp;gt; &amp;lt;style&amp;gt; h1 { width: 50px; font-size: 50px; word-wrap: break-word; } &amp;lt;/style&amp;gt; &amp;lt;/head&amp;gt; &amp;lt;body&amp;gt; &amp;lt;h1&amp;gt; NETTUTS &amp;lt;/h1&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; 第二种方法B：同样是使用CSS，推荐使用这种方法，觉得这个方法兼容性也好，而且代码简洁，字符也容易控制。
&amp;lt;!DOCTYPE html&amp;gt; &amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;title&amp;gt;竖向排列的文字&amp;lt;/title&amp;gt; &amp;lt;style&amp;gt; h1 { width: 50px; font-size: 50px; word-wrap: break-word; letter-spacing: 20px; } &amp;lt;/style&amp;gt; &amp;lt;/head&amp;gt; &amp;lt;body&amp;gt; &amp;lt;h1&amp;gt;我爱北京天安门&amp;lt;/h1&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; 第三种方法：使用JavaScript（不推荐，其实这么一个小小的功能，动用JS就太不划算了，毕竟我们有比这更有效、更简洁的办法）</description>
      <content:encoded><![CDATA[<p>第一种方法：将需要竖排显示的字符放在span中，在CSS中设置span的display属性为block，不过不推荐使用这种方法，因为有些麻烦，代码如下：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>h1 span { display: block; } 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">h1</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">span</span>&gt; N &lt;/<span style="color:#f92672">span</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">span</span>&gt; E &lt;/<span style="color:#f92672">span</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">span</span>&gt; T &lt;/<span style="color:#f92672">span</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">span</span>&gt; T &lt;/<span style="color:#f92672">span</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">span</span>&gt; U &lt;/<span style="color:#f92672">span</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">span</span>&gt; T &lt;/<span style="color:#f92672">span</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">span</span>&gt; S &lt;/<span style="color:#f92672">span</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">h1</span>&gt; 
</span></span></code></pre></div><p>第二种方法A：同样使用CSS，在需要竖向显示的地方，强制定义显示区域的宽度，这样字符会自动竖向排列：请看具体代码：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span><span style="color:#75715e">&lt;!DOCTYPE html&gt;</span> 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">html</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">head</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">charset</span><span style="color:#f92672">=</span><span style="color:#e6db74">utf-8</span> /&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">title</span>&gt;Vertical Text&lt;/<span style="color:#f92672">title</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">style</span>&gt; 
</span></span><span style="display:flex;"><span><span style="color:#f92672">h1</span> { 
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">width</span>: <span style="color:#ae81ff">50</span><span style="color:#66d9ef">px</span>; 
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">font-size</span>: <span style="color:#ae81ff">50</span><span style="color:#66d9ef">px</span>; 
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">word-wrap</span>: <span style="color:#66d9ef">break-word</span>; 
</span></span><span style="display:flex;"><span>} 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">style</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">head</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">body</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">h1</span>&gt; NETTUTS &lt;/<span style="color:#f92672">h1</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">body</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">html</span>&gt;
</span></span></code></pre></div><p>第二种方法B：同样是使用CSS，推荐使用这种方法，觉得这个方法兼容性也好，而且代码简洁，字符也容易控制。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span><span style="color:#75715e">&lt;!DOCTYPE html&gt;</span> 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">html</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">head</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">title</span>&gt;竖向排列的文字&lt;/<span style="color:#f92672">title</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">style</span>&gt; 
</span></span><span style="display:flex;"><span><span style="color:#f92672">h1</span> { 
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">width</span>: <span style="color:#ae81ff">50</span><span style="color:#66d9ef">px</span>; 
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">font-size</span>: <span style="color:#ae81ff">50</span><span style="color:#66d9ef">px</span>; 
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">word-wrap</span>: <span style="color:#66d9ef">break-word</span>; 
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">letter-spacing</span>: <span style="color:#ae81ff">20</span><span style="color:#66d9ef">px</span>; 
</span></span><span style="display:flex;"><span>} 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">style</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">head</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">body</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">h1</span>&gt;我爱北京天安门&lt;/<span style="color:#f92672">h1</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">body</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">html</span>&gt; 
</span></span></code></pre></div><p>第三种方法：使用JavaScript（不推荐，其实这么一个小小的功能，动用JS就太不划算了，毕竟我们有比这更有效、更简洁的办法）</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span><span style="color:#75715e">&lt;!DOCTYPE html&gt;</span> 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">html</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">head</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">charset</span><span style="color:#f92672">=</span><span style="color:#e6db74">utf-8</span> /&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">title</span>&gt;Vertical Text&lt;/<span style="color:#f92672">title</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">style</span>&gt; 
</span></span><span style="display:flex;"><span><span style="color:#f92672">h1</span> <span style="color:#f92672">span</span> { <span style="color:#66d9ef">display</span>: <span style="color:#66d9ef">block</span>; } 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">style</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">head</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">body</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">h1</span>&gt; NETTUTS &lt;/<span style="color:#f92672">h1</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span>&gt; 
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">h1</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">getElementsByTagName</span>(<span style="color:#e6db74">&#39;h1′)[0]; 
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">h1.innerHTML = &#39;</span><span style="color:#f92672">&lt;</span><span style="color:#a6e22e">span</span><span style="color:#f92672">&gt;</span><span style="color:#e6db74">&#39; + h1.innerHTML.split(”).join(&#39;</span><span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/span&gt;&lt;span&gt;&#39;) + &#39;&lt;/span&gt;&#39;; </span>
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">body</span>&gt; 
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">html</span>&gt;
</span></span></code></pre></div><p>四种方法介绍完了，究竟哪一种更适合您呢？自己比较下，根据你自己的实际情况选择吧，每种方法各有千秋。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>英尺(inch)、厘米(cm) JS转换</title>
      <link>https://w.toomore.us/posts/dev/%E8%8B%B1%E5%B0%BAinch%E5%8E%98%E7%B1%B3cm-js%E8%BD%AC%E6%8D%A2/</link>
      <pubDate>Tue, 21 Oct 2014 22:31:04 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/%E8%8B%B1%E5%B0%BAinch%E5%8E%98%E7%B1%B3cm-js%E8%BD%AC%E6%8D%A2/</guid>
      <description>外贸网站中经常用到的工具：
Converter:cminch Converter:inchcm 附上代码：
&amp;lt;ul&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt; Converter:&amp;lt;/strong&amp;gt;&amp;lt;input type=&amp;#34;text&amp;#34; id=&amp;#34;ctictxt&amp;#34; /&amp;gt;&amp;lt;b&amp;gt;cm&amp;lt;/b&amp;gt;&amp;lt;input type=&amp;#34;text&amp;#34; id=&amp;#34;ctiitxt&amp;#34; value=&amp;#34;0.00&amp;#34; /&amp;gt;&amp;lt;b&amp;gt;inch&amp;lt;/b&amp;gt; &amp;lt;input type=&amp;#34;button&amp;#34; value=&amp;#34;calculation&amp;#34; onclick=&amp;#34;javascript:document.getElementById(&amp;#39;ctiitxt&amp;#39;).value=(parseFloat(document.getElementById(&amp;#39;ctictxt&amp;#39;).value==&amp;#39;&amp;#39;?0:document.getElementById(&amp;#39;ctictxt&amp;#39;).value)*0.39370079).toFixed(2)&amp;#34; /&amp;gt; &amp;lt;/li&amp;gt; &amp;lt;li&amp;gt; &amp;lt;strong&amp;gt; Converter:&amp;lt;/strong&amp;gt;&amp;lt;input type=&amp;#34;text&amp;#34; id=&amp;#34;itcitxt&amp;#34; /&amp;gt;&amp;lt;b&amp;gt;inch&amp;lt;/b&amp;gt;&amp;lt;input type=&amp;#34;text&amp;#34; id=&amp;#34;itcctxt&amp;#34; value=&amp;#34;0.00&amp;#34; /&amp;gt;&amp;lt;b&amp;gt;cm&amp;lt;/b&amp;gt; &amp;lt;input type=&amp;#34;button&amp;#34; value=&amp;#34;calculation&amp;#34; onclick=&amp;#34;javascript:document.getElementById(&amp;#39;itcctxt&amp;#39;).value=(parseFloat(document.getElementById(&amp;#39;itcitxt&amp;#39;).value==&amp;#39;&amp;#39;?0:document.getElementById(&amp;#39;itcitxt&amp;#39;).value)*2.54).toFixed(2)&amp;#34; /&amp;gt; &amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; </description>
      <content:encoded><![CDATA[<p>外贸网站中经常用到的工具：</p>
<ul>
	<li>
		<strong> Converter:</strong><input type="text" style="width: 15%;margin-left: 2%;border-bottom: groove;" id="ctictxt" /><b>cm</b><input type="text"  id="ctiitxt" style="width: 15%;margin-left: 2%;border-bottom: groove;" value="0.00" /><b>inch</b> <input type="button" value="calculation" onclick="javascript:document.getElementById('ctiitxt').value=(parseFloat(document.getElementById('ctictxt').value==''?0:document.getElementById('ctictxt').value)*0.39370079).toFixed(2)" /> 
	</li>
	<li>
		<strong> Converter:</strong><input type="text" style="width: 15%;margin-left: 2%;border-bottom: groove;" id="itcitxt" /><b>inch</b><input type="text" style="width: 15%;margin-left: 2%;border-bottom: groove;" id="itcctxt" value="0.00" /><b>cm</b> <input type="button" value="calculation" onclick="javascript:document.getElementById('itcctxt').value=(parseFloat(document.getElementById('itcitxt').value==''?0:document.getElementById('itcitxt').value)*2.54).toFixed(2)" /> 
	</li>
</ul>
<p>附上代码：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">ul</span>&gt;
</span></span><span style="display:flex;"><span>	&lt;<span style="color:#f92672">li</span>&gt;
</span></span><span style="display:flex;"><span>		&lt;<span style="color:#f92672">strong</span>&gt; Converter:&lt;/<span style="color:#f92672">strong</span>&gt;&lt;<span style="color:#f92672">input</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text&#34;</span>  <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;ctictxt&#34;</span> /&gt;&lt;<span style="color:#f92672">b</span>&gt;cm&lt;/<span style="color:#f92672">b</span>&gt;&lt;<span style="color:#f92672">input</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text&#34;</span>  <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;ctiitxt&#34;</span> <span style="color:#a6e22e">value</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0.00&#34;</span> /&gt;&lt;<span style="color:#f92672">b</span>&gt;inch&lt;/<span style="color:#f92672">b</span>&gt; &lt;<span style="color:#f92672">input</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;button&#34;</span> <span style="color:#a6e22e">value</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;calculation&#34;</span> <span style="color:#a6e22e">onclick</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;javascript:document.getElementById(&#39;ctiitxt&#39;).value=(parseFloat(document.getElementById(&#39;ctictxt&#39;).value==&#39;&#39;?0:document.getElementById(&#39;ctictxt&#39;).value)*0.39370079).toFixed(2)&#34;</span> /&gt; 
</span></span><span style="display:flex;"><span>	&lt;/<span style="color:#f92672">li</span>&gt;
</span></span><span style="display:flex;"><span>	&lt;<span style="color:#f92672">li</span>&gt;
</span></span><span style="display:flex;"><span>		&lt;<span style="color:#f92672">strong</span>&gt; Converter:&lt;/<span style="color:#f92672">strong</span>&gt;&lt;<span style="color:#f92672">input</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text&#34;</span>  <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;itcitxt&#34;</span> /&gt;&lt;<span style="color:#f92672">b</span>&gt;inch&lt;/<span style="color:#f92672">b</span>&gt;&lt;<span style="color:#f92672">input</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text&#34;</span>  <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;itcctxt&#34;</span> <span style="color:#a6e22e">value</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0.00&#34;</span> /&gt;&lt;<span style="color:#f92672">b</span>&gt;cm&lt;/<span style="color:#f92672">b</span>&gt; &lt;<span style="color:#f92672">input</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;button&#34;</span> <span style="color:#a6e22e">value</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;calculation&#34;</span> <span style="color:#a6e22e">onclick</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;javascript:document.getElementById(&#39;itcctxt&#39;).value=(parseFloat(document.getElementById(&#39;itcitxt&#39;).value==&#39;&#39;?0:document.getElementById(&#39;itcitxt&#39;).value)*2.54).toFixed(2)&#34;</span> /&gt; 
</span></span><span style="display:flex;"><span>	&lt;/<span style="color:#f92672">li</span>&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">ul</span>&gt;
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>网页禁止鼠标右键</title>
      <link>https://w.toomore.us/posts/website/%E7%BD%91%E9%A1%B5%E7%A6%81%E6%AD%A2%E9%BC%A0%E6%A0%87%E5%8F%B3%E9%94%AE/</link>
      <pubDate>Tue, 21 Oct 2014 14:00:05 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/%E7%BD%91%E9%A1%B5%E7%A6%81%E6%AD%A2%E9%BC%A0%E6%A0%87%E5%8F%B3%E9%94%AE/</guid>
      <description>禁止鼠标左右键代码/禁止网页选中/禁止另存为/防复制代码 &amp;lt;body oncontextmenu=&amp;#34;return false&amp;#34; onselectstart=&amp;#34;return false&amp;#34;&amp;gt; &amp;lt;noscript&amp;gt;&amp;lt;iframe src=&amp;#34;/*.html&amp;gt;&amp;#34;;&amp;lt;/iframe&amp;gt;&amp;lt;/noscript&amp;gt; &amp;lt;script&amp;gt; function stop(){ return false; } document.oncontextmenu=stop; &amp;lt;/script&amp;gt; 禁止鼠标左右键 &amp;lt;script language=javascript&amp;gt; if (window.Event) document.captureEvents(Event.MOUSEUP); function nocontextmenu(){ event.cancelBubble = true event.returnValue = false; return false; } function norightclick(e){ if (window.Event){ if (e.which == 2 || e.which == 3) return false; } else if (event.button == 2 || event.button == 3){ event.cancelBubble = true event.returnValue = false; return false; } } document.oncontextmenu = nocontextmenu; // for IE5+ document.</description>
      <content:encoded><![CDATA[<ol>
<li>禁止鼠标左右键代码/禁止网页选中/禁止另存为/防复制代码</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">body</span> <span style="color:#a6e22e">oncontextmenu</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;return false&#34;</span> <span style="color:#a6e22e">onselectstart</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;return false&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">noscript</span>&gt;&lt;<span style="color:#f92672">iframe</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/*.html&gt;&#34;</span><span style="color:#960050;background-color:#1e0010">;&lt;/</span><span style="color:#a6e22e">iframe</span>&gt;&lt;/<span style="color:#f92672">noscript</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">stop</span>(){
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>document.<span style="color:#a6e22e">oncontextmenu</span><span style="color:#f92672">=</span><span style="color:#a6e22e">stop</span>;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span></code></pre></div><ol start="2">
<li>禁止鼠标左右键</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">language</span><span style="color:#f92672">=</span><span style="color:#e6db74">javascript</span>&gt;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (window.<span style="color:#a6e22e">Event</span>)
</span></span><span style="display:flex;"><span>        document.<span style="color:#a6e22e">captureEvents</span>(<span style="color:#a6e22e">Event</span>.<span style="color:#a6e22e">MOUSEUP</span>);
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">nocontextmenu</span>(){
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">cancelBubble</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">returnValue</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">norightclick</span>(<span style="color:#a6e22e">e</span>){
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> (window.<span style="color:#a6e22e">Event</span>){
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">e</span>.<span style="color:#a6e22e">which</span> <span style="color:#f92672">==</span> <span style="color:#ae81ff">2</span> <span style="color:#f92672">||</span> <span style="color:#a6e22e">e</span>.<span style="color:#a6e22e">which</span> <span style="color:#f92672">==</span> <span style="color:#ae81ff">3</span>)
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>            }
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">button</span> <span style="color:#f92672">==</span> <span style="color:#ae81ff">2</span> <span style="color:#f92672">||</span> <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">button</span> <span style="color:#f92672">==</span> <span style="color:#ae81ff">3</span>){
</span></span><span style="display:flex;"><span>                <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">cancelBubble</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>                <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">returnValue</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>            }
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>        document.<span style="color:#a6e22e">oncontextmenu</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">nocontextmenu</span>; <span style="color:#75715e">// for IE5+
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        document.<span style="color:#a6e22e">onmousedown</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">norightclick</span>; <span style="color:#75715e">// for all others
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span></code></pre></div><ol start="3">
<li>禁止选中代码</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">language</span><span style="color:#f92672">=</span><span style="color:#e6db74">JavaScript</span>&gt;
</span></span><span style="display:flex;"><span>document.<span style="color:#a6e22e">oncontextmenu</span><span style="color:#f92672">=</span><span style="color:#66d9ef">new</span> Function(<span style="color:#e6db74">&#34;event.returnValue=false;&#34;</span>);
</span></span><span style="display:flex;"><span>document.<span style="color:#a6e22e">onselectstart</span><span style="color:#f92672">=</span><span style="color:#66d9ef">new</span> Function(<span style="color:#e6db74">&#34;event.returnValue=false;&#34;</span>);
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span></code></pre></div><ol start="4">
<li>禁止另存为</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">noscript</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">iframe</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/*.htm&#34;</span>&gt;&lt;/<span style="color:#f92672">iframe</span>&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">noscript</span>&gt;
</span></span></code></pre></div><ol start="5">
<li>防拷贝/复制代码</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">body</span> <span style="color:#a6e22e">leftmargin</span><span style="color:#f92672">=</span><span style="color:#e6db74">0</span> <span style="color:#a6e22e">topmargin</span><span style="color:#f92672">=</span><span style="color:#e6db74">0</span> &gt;
</span></span></code></pre></div><ol start="6">
<li>禁止选择文本</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text/javascript&#34;</span>&gt;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">omitformtags</span><span style="color:#f92672">=</span>[<span style="color:#e6db74">&#34;input&#34;</span>, <span style="color:#e6db74">&#34;textarea&#34;</span>, <span style="color:#e6db74">&#34;select&#34;</span>]
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">omitformtagsomitformtags</span><span style="color:#f92672">=</span><span style="color:#a6e22e">omitformtags</span>.<span style="color:#a6e22e">join</span>(<span style="color:#e6db74">&#34;|&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">disableselect</span>(<span style="color:#a6e22e">e</span>){
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">omitformtags</span>.<span style="color:#a6e22e">indexOf</span>(<span style="color:#a6e22e">e</span>.<span style="color:#a6e22e">target</span>.<span style="color:#a6e22e">tagName</span>.<span style="color:#a6e22e">toLowerCase</span>())<span style="color:#f92672">==-</span><span style="color:#ae81ff">1</span>)
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">reEnable</span>(){
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#66d9ef">typeof</span> document.<span style="color:#a6e22e">onselectstart</span><span style="color:#f92672">!=</span><span style="color:#e6db74">&#34;undefined&#34;</span>)
</span></span><span style="display:flex;"><span>        document.<span style="color:#a6e22e">onselectstart</span><span style="color:#f92672">=</span><span style="color:#66d9ef">new</span> Function (<span style="color:#e6db74">&#34;return false&#34;</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>        document.<span style="color:#a6e22e">onmousedown</span><span style="color:#f92672">=</span><span style="color:#a6e22e">disableselect</span>
</span></span><span style="display:flex;"><span>        document.<span style="color:#a6e22e">onmouseup</span><span style="color:#f92672">=</span><span style="color:#a6e22e">reEnable</span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span></code></pre></div><ol start="7">
<li>禁用右键</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">stop</span>(){
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>document.<span style="color:#a6e22e">oncontextmenu</span><span style="color:#f92672">=</span><span style="color:#a6e22e">stop</span>;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span></code></pre></div><ol start="8">
<li>真正的鼠标右键屏蔽</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">language</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;JavaScript&#34;</span>&gt;
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!--</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (window.<span style="color:#a6e22e">Event</span>)
</span></span><span style="display:flex;"><span>    document.<span style="color:#a6e22e">captureEvents</span>(<span style="color:#a6e22e">Event</span>.<span style="color:#a6e22e">MOUSEUP</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">nocontextmenu</span>()
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">cancelBubble</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">returnValue</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">norightclick</span>(<span style="color:#a6e22e">e</span>)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (window.<span style="color:#a6e22e">Event</span>)
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">e</span>.<span style="color:#a6e22e">which</span> <span style="color:#f92672">==</span> <span style="color:#ae81ff">2</span> <span style="color:#f92672">||</span> <span style="color:#a6e22e">e</span>.<span style="color:#a6e22e">which</span> <span style="color:#f92672">==</span> <span style="color:#ae81ff">3</span>)
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">button</span> <span style="color:#f92672">==</span> <span style="color:#ae81ff">2</span> <span style="color:#f92672">||</span> <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">button</span> <span style="color:#f92672">==</span> <span style="color:#ae81ff">3</span>)
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">cancelBubble</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">returnValue</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>document.<span style="color:#a6e22e">oncontextmenu</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">nocontextmenu</span>; <span style="color:#75715e">// for IE5+
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>document.<span style="color:#a6e22e">onmousedown</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">norightclick</span>; <span style="color:#75715e">// for all others
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>Destoon 选择支付方式</title>
      <link>https://w.toomore.us/posts/dev/destoon-%E9%80%89%E6%8B%A9%E6%94%AF%E4%BB%98%E6%96%B9%E5%BC%8F/</link>
      <pubDate>Mon, 15 Sep 2014 16:33:26 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/destoon-%E9%80%89%E6%8B%A9%E6%94%AF%E4%BB%98%E6%96%B9%E5%BC%8F/</guid>
      <description>destoon商务中心支付订单的时候，点击付款直接跳到了第三方支付页面，中间没有选择支付方式的页面，后来仔细观察以后发现有选择支付方式的页面，只是一瞬间就自动跳转了。
顺藤摸瓜，查看支付页面模板（\template\default\member\charge.htm），发现此处（约419行）有一个判断：
{if $auto} &amp;lt;script type=&amp;#34;text/javascript&amp;#34;&amp;gt;Dd(&amp;#39;dform&amp;#39;).submit();&amp;lt;/script&amp;gt; {/if} &amp;lt;script type=&amp;#34;text/javascript&amp;#34;&amp;gt;s(&amp;#39;charge&amp;#39;);m(&amp;#39;action_pay&amp;#39;);&amp;lt;/script&amp;gt; {else} 如果$auto为真，就自动提交。于是找到对应的模块文件（\module\member\charge.inc.php）,因为支付订单属于charge中的支付类型，于是找到&amp;quot;case &amp;lsquo;pay&amp;rsquo;:&amp;quot;，将其中$auto的值都改为0（约211行），然后后台更新缓存、测试，到了支付方式选择页面就不会自动跳转了，想选哪个支付方式就选哪个！</description>
      <content:encoded><![CDATA[<p>destoon商务中心支付订单的时候，点击付款直接跳到了第三方支付页面，中间没有选择支付方式的页面，后来仔细观察以后发现有选择支付方式的页面，只是一瞬间就自动跳转了。</p>
<p>顺藤摸瓜，查看支付页面模板（\template\default\member\charge.htm），发现此处（约419行）有一个判断：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>{<span style="color:#66d9ef">if</span> $auto}
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">script</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text/javascript&#34;</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">Dd</span>(<span style="color:#e6db74">&#39;dform&#39;</span>)<span style="color:#f92672">.</span><span style="color:#a6e22e">submit</span>();<span style="color:#f92672">&lt;/</span><span style="color:#a6e22e">script</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>{<span style="color:#f92672">/</span><span style="color:#66d9ef">if</span>}
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">script</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text/javascript&#34;</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">s</span>(<span style="color:#e6db74">&#39;charge&#39;</span>);<span style="color:#a6e22e">m</span>(<span style="color:#e6db74">&#39;action_pay&#39;</span>);<span style="color:#f92672">&lt;/</span><span style="color:#a6e22e">script</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>{<span style="color:#66d9ef">else</span>}
</span></span></code></pre></div><p>如果$auto为真，就自动提交。于是找到对应的模块文件（<code>\module\member\charge.inc.php</code>）,因为支付订单属于charge中的支付类型，于是找到&quot;case &lsquo;pay&rsquo;:&quot;，将其中$auto的值都改为0（约211行），然后后台更新缓存、测试，到了支付方式选择页面就不会自动跳转了，想选哪个支付方式就选哪个！</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>公积金用途</title>
      <link>https://w.toomore.us/posts/youth/%E5%85%AC%E7%A7%AF%E9%87%91%E7%94%A8%E9%80%94/</link>
      <pubDate>Thu, 21 Aug 2014 13:34:08 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/%E5%85%AC%E7%A7%AF%E9%87%91%E7%94%A8%E9%80%94/</guid>
      <description>公积金的好处很多，对于打算买房的人，可以通过公积金申请低息贷款提高改善住房条件的能力；对于不需要再购房的人，公积金则成为日常的一种储蓄，可以在退休后作为养老金的补充；同时，当职工一旦遭遇失业、大病等情况的，还可以申请提取缴存的住房公积金余额，缓解职工的家庭生活困难。但是，由于人们对于公积金相关政策的不熟悉，在需要贷款和提取公积金时往往不知该如何操作，对于一些公积金使用中的常见问题也比较模糊。为了使读者对于公积金的具体用法有更清晰的了解，本文以天津为例梳理出公积金最常用的七种用法，供读者参考。
利用公积金贷款购房一直以来都是备受关注的话题。很多人都知道使用公积金购房具有低首付、低利率、提前还贷更便捷、并且可以申请到更高额的组合贷款等优势。但在具体的提取使用中，又大都对相关政策缺乏清晰的了解。此外，住房公积金作为一项惠民政策，其作用也不仅仅局限在购房这件事上，在符合一定条件的情况下，还可以用过提取公积金用于租房、建造、翻建、大修、治疗重大疾病和生活救助等方面，而这些方面恰恰是广大百姓缺乏了解又急需了解的。
住房消费用途篇
用法一：购房
1.不贷款购房可一次性提取
购买自有住房且未使用住房贷款，职工及配偶可申请提取购房合同或协议签订当月之前(含当月)的住房公积金金额，且提取金额不超过购房价款(购买定向安置经济适用住房的，不超过购房价款扣除房屋补偿款后的金额)。职工与配偶、未成年子女之外的其他人共同购房，未使用住房贷款的，共同购房人中的一人及其配偶可按以上方式提取住房公积金，其他购房人不能提取住房公积金。
2.商业贷款购房可提取用于首付
使用商业银行个人住房贷款购买自有住房的，职工本人及配偶可申请提取购房合同或协议签订当月之前(含当月)的住房公积金金额，且不超过购房首付款(购买定向安置经济适用住房的，提取金额不超过首付款扣除房屋补偿款后的金额)。职工与配偶、未成年子女之外的其他人共同购房，使用商业银行个人住房贷款的，借款人中的一人及其配偶可以按以上方式提取住房公积金，其他购房人不能提取住房公积金。
3.商业贷款购房可提取偿还本息
偿还商业银行个人住房贷款本息的，职工本人及配偶可申请提取借款合同约定的贷款到期当月之前(含当月)的住房公积金金额，且合计不超过已偿还的贷款本息。职工与配偶、未成年子女之外的其他人共同购房，使用商业银行个人住房贷款的，借款人中的一人及其配偶可以按以上方式提取住房公积金(提取人应与办理该贷款首付款一次性提取的职工一致)，其他购房人不能提取住房公积金。
4.公积金(组合)贷款购房可提取偿还本息
偿还个人住房公积金(组合)贷款本息的，职工本人及配偶可申请提取贷款结清当月之前(含当月)的住房公积金金额，且合计不超过已偿还的贷款本息。
用法二：建造、翻建、大修住房
在农村集体土地上建造、翻建、大修自有住房且未使用住房贷款的，职工及配偶可申请提取建修房被批准当月之前(含当月)的住房公积金金额，且提取金额合计不超过建修房的费用。
1.建造、翻建住房的应提供以下证明资料及一份复印件：
土地证明：集体土地使用证或建设用地许可证；
建房翻建证明文件，包括建设工程规划许可证或准建证；
建房、翻建住房的工程预算；
农业户籍户口簿。
2.大修住房的应提供以下证明资料及一份复印件：
土地证明：集体土地使用证或建设用地许可证；
大修住房鉴定证明；
大修工程预算；
农业户籍户口簿。
用法三：租房
1.支付配租或政府招租补贴的经济租赁房房租
支付配租或政府招租补贴的经济租赁房房租的，职工及配偶可申请提取住房公积金，提取金额合计不超过减除政府补贴后已支付的经济租赁房房租。
2.支付市场租房房租提取
职工在本市租赁住房用于自住、已支付房租，且符合以下条件之一的，职工及配偶可申请提取住房公积金：
a.本人及配偶名下无房，且没有住房贷款记录；
b.经国土房管部门认定具备享受廉租住房实物配租补贴、廉租住房租房补贴或经济租赁住房租房补贴资格。
职工及配偶可每季度提取一次住房公积金，每次提取金额合计不超过一个季度的房租且不超过提取限额。多人合租同一套住房的，承租人中的一人及其配偶可提取住房公积金。职工及其配偶同时租住两套（含两套）以上住房的，只能就一套住房提取住房公积金。
用法四：提取父母住房公积金购房
1.未使用住房贷款购买自有住房，可提取父母公积金。
职工于2012年5月1日（以合同签定日为准）以后购买经济适用住房、限价商品住房或首套住房（即本人及配偶名下无房，且没有住房贷款记录，购买商品住房或私产房），且未使用住房贷款的，购房人中的一人及配偶、双方父母可以就已全额支付的房款一次性提取住房公积金。提取金额不超过购房合同或协议签订当月之前（含当月）的住房公积金金额，且合计不超过购房的价款（购买定向安置经济适用住房的，不超过所购住房价款扣除房屋补偿款后的金额）。
2.使用商业银行个人住房贷款购买自有住房，支付首付款后可提取父母公积金。
职工于2012年5月1日（以合同签定日为准）以后购买经济适用住房、限价商品住房或首套住房（即本人及配偶名下无房，且没有住房贷款记录，购买商品住房或私产房），且使用商业银行个人住房贷款的，借款人中的一人及其配偶、双方父母可以就支付的首付款一次性提取住房公积金。提取金额不超过购房合同或协议签订当月之前（含当月）的住房公积金金额，且合计不超过购房的首付款（购买定向安置经济适用住房的，不超过首付款扣除房屋补偿款后的金额）。
3.使用个人住房公积金（组合）贷款购买自有住房，支付首付款后可提取父母公积金。
职工于2012年5月1日（以合同签定日为准）以后购买经济适用住房、限价商品住房或首套住房（即本人及配偶名下无房，且没有住房贷款记录，购买商品住房或私产房），且使用公积金贷款的，借款人的父母、借款人配偶的父母可申请提取购房合同或协议签订当月之前（含当月）的住房公积金金额，提取金额合计不超过购房的首付款（购买定向安置经济适用住房的，不超过首付款扣除房屋补偿款后的金额）。
【住房消费用途的办理程序和注意事项】
办理程序：
职工应凭住房公积金龙卡（集中封存户职工可提供住房公积金储蓄卡）、身份证件及相关提取资料到管理部或分中心申请提取住房公积金。
管理部或分中心自受理申请之日起3个工作日内作出是否准予提取的决定并通知职工。
经审批准予提取的，职工应凭有关资料当日到受托银行办理提取手续。提取的住房公积金转入职工住房公积金龙卡银行储蓄账户或职工在建设银行(601939,股吧)开立的其他储蓄账户。
注意事项：
1.借款人双方父母负有公积金贷款债务的，公积金贷款结清前，双方父母不能办理该提取业务。
2.《天津市住房公积金提取通知书》当日有效，提取职工、代办人应签字确认。
3.经分中心或管理部审核确认后，职工必须当日到建设银行办理提取手续。
4.未办理住房公积金龙卡的非集中封存户职工，应先办理住房公积金龙卡再办理提取手续。持住房公积金储蓄卡的职工可持储蓄卡及身份证件到住房公积金账户开立的分中心、管理部更换住房公积金龙，无住房公积金储蓄卡的职工可通过单位申请办理住房公积金龙卡。
5.提取人姓名、身份证号码登记错误的，应首先办理个人信息变更登记，变更登记需提供单位开具的《天津市住房公积金职工个人信息变更登记表》一式三联和职工身份证及复印件一份；集中封存户职工的《天津市住房公积金职工个人信息变更登记表》由集中封存的分中心、管理部出具。
6.各类提取证明资料复印件用A4纸复印。
7.在管理部开户的职工（包括集中封存户职工）可到全市各区县管理部办理提取手续；非集中封存户职工可到全市各区县管理部办理个人信息变更手续，集中封存户职工应到集中封存的管理部办理个人信息变更手续；分中心职工应到本分中心办理个人信息变更及提取手续。
8.提取人同时提取补充住房公积金、按月住房补贴的，提取额度与住房公积金合并计算。
非住房消费用途篇
用法五：销户提取全部余额
职工有下列情况之一的，可申请提取住房公积金账户全部余额，并注销个人住房公积金账户：
（一）离、退休的；
（二）农业户籍职工男满60周岁、女满55周岁的；
（三）到国外、港、澳、台地区定居的；
（四）完全丧失劳动能力、大部分丧失劳动能力或重度残疾（一级或二级残疾）并与单位解除或终止劳动关系的。
（五）领取失业保险金的；
（六）被判处刑罚、户口迁出本市、非本市户口职工与所在单位解除或终止劳动关系的；
（七）住房公积金账户转入集中封存户满两年或与原单位终止劳动关系满两年的；
（八）到本市行政区域外工作并在当地建立和缴存住房公积金的。
用法六：纳入低保或特困范围的提取使用
职工被纳入本市城镇居民最低生活保障或特困救助范围，职工本人及配偶可申请提取住房公积金，提取金额不超过被纳入最低生活保障范围或特困救助范围期间及之前的住房公积金金额。
用法七：治疗重大疾病
家庭成员（包括职工、配偶及未成年子女）患重大疾病或重大手术（包括心肌梗死；尿毒症；白血病；肝硬化；再生障碍性贫血；风心二狭二闭；脑血管畸形；脑血管意外；坏死性肠梗阻；肝萎缩；严重复合性外伤；严重电击伤；各种癌性病变；重大器官移植；冠状动脉搭桥术；心脏瓣膜手术；主动脉手术；良性脑肿瘤；严重阿尔茨海默病；严重帕金森病；严重度烧伤；严重原发性肺动脉高压；严重运动神经元病）住院治疗的，职工本人及配偶可申请提取住房公积金，申请日期应在出院之日起一年内，提取金额合计不超过住院费用个人负担部分。
【非住房消费用途的办理程序和注意事项】
办理程序：</description>
      <content:encoded><![CDATA[<p>公积金的好处很多，对于打算买房的人，可以通过公积金申请低息贷款提高改善住房条件的能力；对于不需要再购房的人，公积金则成为日常的一种储蓄，可以在退休后作为养老金的补充；同时，当职工一旦遭遇失业、大病等情况的，还可以申请提取缴存的住房公积金余额，缓解职工的家庭生活困难。但是，由于人们对于公积金相关政策的不熟悉，在需要贷款和提取公积金时往往不知该如何操作，对于一些公积金使用中的常见问题也比较模糊。为了使读者对于公积金的具体用法有更清晰的了解，本文以天津为例梳理出公积金最常用的七种用法，供读者参考。</p>
<p>利用公积金贷款购房一直以来都是备受关注的话题。很多人都知道使用公积金购房具有低首付、低利率、提前还贷更便捷、并且可以申请到更高额的组合贷款等优势。但在具体的提取使用中，又大都对相关政策缺乏清晰的了解。此外，住房公积金作为一项惠民政策，其作用也不仅仅局限在购房这件事上，在符合一定条件的情况下，还可以用过提取公积金用于租房、建造、翻建、大修、治疗重大疾病和生活救助等方面，而这些方面恰恰是广大百姓缺乏了解又急需了解的。</p>
<p>住房消费用途篇</p>
<p>用法一：购房</p>
<p>1.不贷款购房可一次性提取</p>
<p>购买自有住房且未使用住房贷款，职工及配偶可申请提取购房合同或协议签订当月之前(含当月)的住房公积金金额，且提取金额不超过购房价款(购买定向安置经济适用住房的，不超过购房价款扣除房屋补偿款后的金额)。职工与配偶、未成年子女之外的其他人共同购房，未使用住房贷款的，共同购房人中的一人及其配偶可按以上方式提取住房公积金，其他购房人不能提取住房公积金。</p>
<p>2.商业贷款购房可提取用于首付</p>
<p>使用商业银行个人住房贷款购买自有住房的，职工本人及配偶可申请提取购房合同或协议签订当月之前(含当月)的住房公积金金额，且不超过购房首付款(购买定向安置经济适用住房的，提取金额不超过首付款扣除房屋补偿款后的金额)。职工与配偶、未成年子女之外的其他人共同购房，使用商业银行个人住房贷款的，借款人中的一人及其配偶可以按以上方式提取住房公积金，其他购房人不能提取住房公积金。</p>
<p>3.商业贷款购房可提取偿还本息</p>
<p>偿还商业银行个人住房贷款本息的，职工本人及配偶可申请提取借款合同约定的贷款到期当月之前(含当月)的住房公积金金额，且合计不超过已偿还的贷款本息。职工与配偶、未成年子女之外的其他人共同购房，使用商业银行个人住房贷款的，借款人中的一人及其配偶可以按以上方式提取住房公积金(提取人应与办理该贷款首付款一次性提取的职工一致)，其他购房人不能提取住房公积金。</p>
<p>4.公积金(组合)贷款购房可提取偿还本息</p>
<p>偿还个人住房公积金(组合)贷款本息的，职工本人及配偶可申请提取贷款结清当月之前(含当月)的住房公积金金额，且合计不超过已偿还的贷款本息。</p>
<p>用法二：建造、翻建、大修住房</p>
<p>在农村集体土地上建造、翻建、大修自有住房且未使用住房贷款的，职工及配偶可申请提取建修房被批准当月之前(含当月)的住房公积金金额，且提取金额合计不超过建修房的费用。</p>
<p>1.建造、翻建住房的应提供以下证明资料及一份复印件：</p>
<p>土地证明：集体土地使用证或建设用地许可证；</p>
<p>建房翻建证明文件，包括建设工程规划许可证或准建证；</p>
<p>建房、翻建住房的工程预算；</p>
<p>农业户籍户口簿。</p>
<p>2.大修住房的应提供以下证明资料及一份复印件：</p>
<p>土地证明：集体土地使用证或建设用地许可证；</p>
<p>大修住房鉴定证明；</p>
<p>大修工程预算；</p>
<p>农业户籍户口簿。</p>
<p>用法三：租房</p>
<p>1.支付配租或政府招租补贴的经济租赁房房租</p>
<p>支付配租或政府招租补贴的经济租赁房房租的，职工及配偶可申请提取住房公积金，提取金额合计不超过减除政府补贴后已支付的经济租赁房房租。</p>
<p>2.支付市场租房房租提取</p>
<p>职工在本市租赁住房用于自住、已支付房租，且符合以下条件之一的，职工及配偶可申请提取住房公积金：</p>
<p>a.本人及配偶名下无房，且没有住房贷款记录；</p>
<p>b.经国土房管部门认定具备享受廉租住房实物配租补贴、廉租住房租房补贴或经济租赁住房租房补贴资格。</p>
<p>职工及配偶可每季度提取一次住房公积金，每次提取金额合计不超过一个季度的房租且不超过提取限额。多人合租同一套住房的，承租人中的一人及其配偶可提取住房公积金。职工及其配偶同时租住两套（含两套）以上住房的，只能就一套住房提取住房公积金。</p>
<p>用法四：提取父母住房公积金购房</p>
<p>1.未使用住房贷款购买自有住房，可提取父母公积金。</p>
<p>职工于2012年5月1日（以合同签定日为准）以后购买经济适用住房、限价商品住房或首套住房（即本人及配偶名下无房，且没有住房贷款记录，购买商品住房或私产房），且未使用住房贷款的，购房人中的一人及配偶、双方父母可以就已全额支付的房款一次性提取住房公积金。提取金额不超过购房合同或协议签订当月之前（含当月）的住房公积金金额，且合计不超过购房的价款（购买定向安置经济适用住房的，不超过所购住房价款扣除房屋补偿款后的金额）。</p>
<p>2.使用商业银行个人住房贷款购买自有住房，支付首付款后可提取父母公积金。</p>
<p>职工于2012年5月1日（以合同签定日为准）以后购买经济适用住房、限价商品住房或首套住房（即本人及配偶名下无房，且没有住房贷款记录，购买商品住房或私产房），且使用商业银行个人住房贷款的，借款人中的一人及其配偶、双方父母可以就支付的首付款一次性提取住房公积金。提取金额不超过购房合同或协议签订当月之前（含当月）的住房公积金金额，且合计不超过购房的首付款（购买定向安置经济适用住房的，不超过首付款扣除房屋补偿款后的金额）。</p>
<p>3.使用个人住房公积金（组合）贷款购买自有住房，支付首付款后可提取父母公积金。</p>
<p>职工于2012年5月1日（以合同签定日为准）以后购买经济适用住房、限价商品住房或首套住房（即本人及配偶名下无房，且没有住房贷款记录，购买商品住房或私产房），且使用公积金贷款的，借款人的父母、借款人配偶的父母可申请提取购房合同或协议签订当月之前（含当月）的住房公积金金额，提取金额合计不超过购房的首付款（购买定向安置经济适用住房的，不超过首付款扣除房屋补偿款后的金额）。</p>
<p>【住房消费用途的办理程序和注意事项】</p>
<p>办理程序：</p>
<ol>
<li>
<p>职工应凭住房公积金龙卡（集中封存户职工可提供住房公积金储蓄卡）、身份证件及相关提取资料到管理部或分中心申请提取住房公积金。</p>
</li>
<li>
<p>管理部或分中心自受理申请之日起3个工作日内作出是否准予提取的决定并通知职工。</p>
</li>
<li>
<p>经审批准予提取的，职工应凭有关资料当日到受托银行办理提取手续。提取的住房公积金转入职工住房公积金龙卡银行储蓄账户或职工在建设银行(601939,股吧)开立的其他储蓄账户。</p>
</li>
</ol>
<p>注意事项：</p>
<p>1.借款人双方父母负有公积金贷款债务的，公积金贷款结清前，双方父母不能办理该提取业务。</p>
<p>2.《天津市住房公积金提取通知书》当日有效，提取职工、代办人应签字确认。</p>
<p>3.经分中心或管理部审核确认后，职工必须当日到建设银行办理提取手续。</p>
<p>4.未办理住房公积金龙卡的非集中封存户职工，应先办理住房公积金龙卡再办理提取手续。持住房公积金储蓄卡的职工可持储蓄卡及身份证件到住房公积金账户开立的分中心、管理部更换住房公积金龙，无住房公积金储蓄卡的职工可通过单位申请办理住房公积金龙卡。</p>
<p>5.提取人姓名、身份证号码登记错误的，应首先办理个人信息变更登记，变更登记需提供单位开具的《天津市住房公积金职工个人信息变更登记表》一式三联和职工身份证及复印件一份；集中封存户职工的《天津市住房公积金职工个人信息变更登记表》由集中封存的分中心、管理部出具。</p>
<p>6.各类提取证明资料复印件用A4纸复印。</p>
<p>7.在管理部开户的职工（包括集中封存户职工）可到全市各区县管理部办理提取手续；非集中封存户职工可到全市各区县管理部办理个人信息变更手续，集中封存户职工应到集中封存的管理部办理个人信息变更手续；分中心职工应到本分中心办理个人信息变更及提取手续。</p>
<p>8.提取人同时提取补充住房公积金、按月住房补贴的，提取额度与住房公积金合并计算。</p>
<p>非住房消费用途篇</p>
<p>用法五：销户提取全部余额</p>
<p>职工有下列情况之一的，可申请提取住房公积金账户全部余额，并注销个人住房公积金账户：</p>
<p>（一）离、退休的；</p>
<p>（二）农业户籍职工男满60周岁、女满55周岁的；</p>
<p>（三）到国外、港、澳、台地区定居的；</p>
<p>（四）完全丧失劳动能力、大部分丧失劳动能力或重度残疾（一级或二级残疾）并与单位解除或终止劳动关系的。</p>
<p>（五）领取失业保险金的；</p>
<p>（六）被判处刑罚、户口迁出本市、非本市户口职工与所在单位解除或终止劳动关系的；</p>
<p>（七）住房公积金账户转入集中封存户满两年或与原单位终止劳动关系满两年的；</p>
<p>（八）到本市行政区域外工作并在当地建立和缴存住房公积金的。</p>
<p>用法六：纳入低保或特困范围的提取使用</p>
<p>职工被纳入本市城镇居民最低生活保障或特困救助范围，职工本人及配偶可申请提取住房公积金，提取金额不超过被纳入最低生活保障范围或特困救助范围期间及之前的住房公积金金额。</p>
<p>用法七：治疗重大疾病</p>
<p>家庭成员（包括职工、配偶及未成年子女）患重大疾病或重大手术（包括心肌梗死；尿毒症；白血病；肝硬化；再生障碍性贫血；风心二狭二闭；脑血管畸形；脑血管意外；坏死性肠梗阻；肝萎缩；严重复合性外伤；严重电击伤；各种癌性病变；重大器官移植；冠状动脉搭桥术；心脏瓣膜手术；主动脉手术；良性脑肿瘤；严重阿尔茨海默病；严重帕金森病；严重度烧伤；严重原发性肺动脉高压；严重运动神经元病）住院治疗的，职工本人及配偶可申请提取住房公积金，申请日期应在出院之日起一年内，提取金额合计不超过住院费用个人负担部分。</p>
<p>【非住房消费用途的办理程序和注意事项】</p>
<p>办理程序：</p>
<ol>
<li>
<p>职工凭住房公积金龙卡（集中封存户职工可提供住房公积金储蓄卡）、身份证件及相关提取资料到管理部或分中心申请提取住房公积金。</p>
</li>
<li>
<p>管理部或分中心自受理申请之日起7个工作日内作出是否准予提取的决定并通知职工。</p>
</li>
<li>
<p>经审批准予提取的，职工应凭有关资料当日到受托银行办理提取手续。提取的住房公积金转入职工住房公积金龙卡银行储蓄账户或职工在建设银行开立的其他储蓄账户。</p>
</li>
</ol>
<p>注意事项：</p>
<ol>
<li>职工同时负有个人住房公积金（组合）贷款（以下简称“公积金贷款”）债务，职工公积金贷款结清前，职工及配偶不能办理该提取业务。</li>
</ol>
<p>2.《天津市住房公积金提取通知书》当日有效，提取职工、代办人应签字确认。</p>
<p>3.经分中心或管理部审核确认后，职工必须当日到建设银行办理提取手续。</p>
<p>4.提取人姓名、身份证号码登记错误的，应首先办理个人信息变更登记，变更登记需提供单位开具的《天津市住房公积金职工个人信息变更登记表》一式三联和职工身份证及复印件一份；集中封存户职工的《天津市住房公积金职工个人信息变更登记表》由集中封存的分中心、管理部出具。</p>
<p>5.各类提取证明资料复印件用A4纸复印。</p>
<p>6.在管理部开户的职工（包括集中封存户职工）可到全市各区县管理部办理提取手续；非集中封存户职工可到全市各区县管理部办理个人信息变更手续，集中封存户职工应到集中封存的管理部办理个人信息变更手续；分中心职工应到本分中心办理个人信息变更及提取手续。</p>
<p>7.提取人同时提取补充住房公积金、按月住房补贴的，提取额度与住房公积金合并计算。</p>
<p>什么是公积金</p>
<p>什么是住房公积金？住房公积金，是指在职职工个人及其所在单位按照职工工资收入一定比例逐月缴存的、具有保障性和互助性的职工个人长期住房储金。职工个人缴存的住房公积金和职工所在单位为职工缴存的住房公积金，属于职工个人所有。缴存住房公积金的职工，符合提取条件的可以申请提取住房公积金，购房的可以申请住房公积金贷款。</p>
<p>哪些情况可以申请提取住房公积金？发生以下行为的，职工可以申请提取住房公积金：一是购买、建造、翻建自有住房的，二是偿还住房贷款的，三是离休、退休的，四是完全丧失劳动能力并与所在单位终止劳动关系的，五是到国外、港、澳、台地区定居的，六是与单位终止劳动关系满两年未就业的、领取失业保险金、被纳入低保的、重大疾病等情况的。</p>
<p>公积金热点问答</p>
<p>由于广大读者对公积金的相关政策缺乏必要的了解，导致在工作生活中常因公积金的提取、使用、缴纳、转移、索要、补办等事宜而苦恼。为此，《今晚经济周报》特别采访了天津市公积金管理中心相关负责人，就读者反馈的一些共性问题进行答疑解惑。</p>
<p>1.公积金转移</p>
<p>问：我进入新公司，需要把公积金从原单位转到现在单位，因为自己实在不能请假，不知道是否能找人代办？</p>
<p>答：您好，这项业务应由您原单位住房公积金经办人员办理，也可由您自己就近在全市各区县公积金管理部办理。同时，我们在周六全天也受理住房公积金业务，您也可以进行办理。转移业务需提供以下资料：《天津市住房公积金本市转移清册》一式二份，并请您签字，且加盖原单位公章或财务章；转移职工本人身份证及一份复印件。</p>
<p>2.账户状态的问题</p>
<p>问：我在4月份从老单位辞职，5月份在新单位开始上班。现在我的公积金个人账户状态是“转入未确认”。我想问一下，这种情况是需要我新单位确认还是本人需要提交什么申请？或者说这种状态该如何办理？谢谢。</p>
<p>答：您好，新单位为您汇缴住房公积金后，您的账户状态即可变为正常汇缴。</p>
<p>3.离职员工怎样向单位索要住房公积金</p>
<p>问：你好，我已经与原来单位解除劳动合同，单位一直没有给缴纳住房公积金，我应该怎样向单位索取，需要哪些证明文件？</p>
<p>答：您好，您需要持本人身份证、劳动合同、工资单、社保缴存证明等材料到原单位所在区县住房公积金管理部进行投诉。</p>
<p>4.公积金卡丢失补办问题</p>
<p>问：你好，我们公司用来给员工交公积金的卡不见了，我想问一下这个卡可以补办么？需要些什么证件和程序？</p>
<p>答：您好，住房公积金单位卡遗失的，单位经办人可到开户的公积金分中心或管理部申请补办，需要携带公积金缴存登记证副本和经办人身份证及一份复印件。</p>
<p>5.单位应该什么时候为职工办理住房公积金</p>
<p>问：我刚刚换了工作进入一家新公司，已经工作了一个多月，询问单位人事部门还未得到办理公积金的消息，请问单位应该何时为职工办理公积金呢？</p>
<p>答：您好，新设立的单位应当自设立之日起三十日内，持单位设立批准文件或者营业执照到单位辖区住房公积金管理部门办理住房公积金缴存登记；单位录用或者调入职工的，应当自录用或者调入职工之日起三十日内到辖区公积金管理部门为职工办理账户设立手续。</p>
<p>6.补缴欠缴的住房公积金是否只是单位的义务？</p>
<p>问：我所在单位欠缴其三年的住房公积金，在向公积金中心反映后，经执法人员对单位上门宣传政策后，单位同意为我补缴，但在进行补缴时，为什么也同时要求我个人补缴？</p>
<p>答：您好，《天津市住房公积金条例》第三条“本条例所称住房公积金，是指在职职工个人及其所在单位按照职工工资收入一定比例逐月缴存的、具有保障性和互助性的职工个人长期住房储金”的规定，住房公积金是由单位和职工共同缴存的长期住房储金，因此您和单位都有进行补缴的义务。</p>
<p>7.试用期间，单位是否该为职工上公积金？</p>
<p>问：您好，我正在一家民营企业试用，单位说转正后才给上公积金，是这样吗？</p>
<p>答：您好，根据《住房公积金管理条例》规定，单位为在职职工缴存住房公积金是法定的义务，试用期也属于劳动关系的存续期间，因此，试用期内单位也必须为职工缴纳住房公积金。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>可单独关闭对联广告两枚</title>
      <link>https://w.toomore.us/posts/website/%E5%8F%AF%E5%8D%95%E7%8B%AC%E5%85%B3%E9%97%AD%E5%AF%B9%E8%81%94%E5%B9%BF%E5%91%8A%E4%B8%A4%E6%9E%9A/</link>
      <pubDate>Tue, 12 Aug 2014 13:36:58 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/%E5%8F%AF%E5%8D%95%E7%8B%AC%E5%85%B3%E9%97%AD%E5%AF%B9%E8%81%94%E5%B9%BF%E5%91%8A%E4%B8%A4%E6%9E%9A/</guid>
      <description>&amp;lt;!--对联广告开始--&amp;gt; &amp;lt;style type=&amp;#34;text/css&amp;#34;&amp;gt; html,body{ height:1000px; } #zzjs_net_1,#zzjs_net_2{ width:170px; height:360px; background-color:#eee; border:1px solid #ddd; } #www_zzjs_net{ height:1000px; } &amp;lt;/style&amp;gt; &amp;lt;script language=&amp;#34;javascript&amp;#34; type=&amp;#34;text/javascript&amp;#34;&amp;gt; lastScrollY=0; function heartBeat(){ var diffY; if (document.documentElement &amp;amp;&amp;amp; document.documentElement.scrollTop) diffY = document.documentElement.scrollTop; else if (document.body) diffY = document.body.scrollTop else {/*Netscape stuff*/} //alert(diffY); percent=.1*(diffY-lastScrollY); if(percent&amp;gt;0) percent=Math.ceil(percent); else percent=Math.floor(percent); document.getElementById(&amp;#34;zzjs_net_1&amp;#34;).style.top=parseInt(document.getElementById (&amp;#34;zzjs_net_1&amp;#34;).style.top)+percent+&amp;#34;px&amp;#34;; document.getElementById(&amp;#34;zzjs_net_2&amp;#34;).style.top=parseInt(document.getElementById (&amp;#34;zzjs_net_1&amp;#34;).style.top)+percent+&amp;#34;px&amp;#34;; lastScrollY=lastScrollY+percent; //alert(lastScrollY); } j1=&amp;#34;&amp;lt;div id=\&amp;#34;zzjs_net_1\&amp;#34; style=&amp;#39;left:2px;position:absolute;top:120px;&amp;#39;&amp;gt;&amp;lt;span style=&amp;#39;display:inline-block;float:right;cursor:pointer&amp;#39; onclick=&amp;#39;this.parentNode.style.display=\&amp;#34;none\&amp;#34;&amp;#39;&amp;gt;关闭&amp;lt;/span&amp;gt;&amp;lt;a href=&amp;#39;http://www.baidu.com&amp;#39; target=&amp;#39;blank&amp;#39;&amp;gt;&amp;lt;img src=&amp;#39;http://danbao.test.cn/skin/images/002.jpg&amp;#39; width=&amp;#39;170px&amp;#39; height=&amp;#39;360px&amp;#39;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;#34; j2=&amp;#34;&amp;lt;div id=\&amp;#34;zzjs_net_2\&amp;#34; style=&amp;#39;right:2px;position:absolute;top:120px;&amp;#39;&amp;gt;&amp;lt;span style=&amp;#39;display:inline-block;float:right;cursor:pointer&amp;#39; onclick=&amp;#39;this.parentNode.style.display=\&amp;#34;none\&amp;#34;&amp;#39;&amp;gt;关闭&amp;lt;/span&amp;gt;&amp;lt;a href=&amp;#39;http://www.</description>
      <content:encoded><![CDATA[<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span><span style="color:#75715e">&lt;!--对联广告开始--&gt;</span>
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">style</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text/css&#34;</span>&gt;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">html</span><span style="color:#f92672">,</span><span style="color:#f92672">body</span>{
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">height</span>:<span style="color:#ae81ff">1000</span><span style="color:#66d9ef">px</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    #zzjs_net_1<span style="color:#f92672">,</span>#zzjs_net_2{
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">width</span>:<span style="color:#ae81ff">170</span><span style="color:#66d9ef">px</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">height</span>:<span style="color:#ae81ff">360</span><span style="color:#66d9ef">px</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">background-color</span>:<span style="color:#ae81ff">#eee</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">border</span>:<span style="color:#ae81ff">1</span><span style="color:#66d9ef">px</span> <span style="color:#66d9ef">solid</span> <span style="color:#ae81ff">#ddd</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    #www_zzjs_net{
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">height</span>:<span style="color:#ae81ff">1000</span><span style="color:#66d9ef">px</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">style</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">language</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;javascript&#34;</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text/javascript&#34;</span>&gt;
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">lastScrollY</span><span style="color:#f92672">=</span><span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">heartBeat</span>(){
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">diffY</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (document.<span style="color:#a6e22e">documentElement</span> <span style="color:#f92672">&amp;&amp;</span> document.<span style="color:#a6e22e">documentElement</span>.<span style="color:#a6e22e">scrollTop</span>)
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">diffY</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">documentElement</span>.<span style="color:#a6e22e">scrollTop</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">else</span> <span style="color:#66d9ef">if</span> (document.<span style="color:#a6e22e">body</span>)
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">diffY</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">body</span>.<span style="color:#a6e22e">scrollTop</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            {<span style="color:#75715e">/*Netscape stuff*/</span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">//alert(diffY);
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            <span style="color:#a6e22e">percent</span><span style="color:#f92672">=</span>.<span style="color:#ae81ff">1</span><span style="color:#f92672">*</span>(<span style="color:#a6e22e">diffY</span><span style="color:#f92672">-</span><span style="color:#a6e22e">lastScrollY</span>);
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">percent</span><span style="color:#f92672">&gt;</span><span style="color:#ae81ff">0</span>)
</span></span><span style="display:flex;"><span>                <span style="color:#a6e22e">percent</span><span style="color:#f92672">=</span>Math.<span style="color:#a6e22e">ceil</span>(<span style="color:#a6e22e">percent</span>);
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">else</span> 
</span></span><span style="display:flex;"><span>                <span style="color:#a6e22e">percent</span><span style="color:#f92672">=</span>Math.<span style="color:#a6e22e">floor</span>(<span style="color:#a6e22e">percent</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>            document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">&#34;zzjs_net_1&#34;</span>).<span style="color:#a6e22e">style</span>.<span style="color:#a6e22e">top</span><span style="color:#f92672">=</span>parseInt(document.<span style="color:#a6e22e">getElementById</span>
</span></span><span style="display:flex;"><span>            (<span style="color:#e6db74">&#34;zzjs_net_1&#34;</span>).<span style="color:#a6e22e">style</span>.<span style="color:#a6e22e">top</span>)<span style="color:#f92672">+</span><span style="color:#a6e22e">percent</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#34;px&#34;</span>;
</span></span><span style="display:flex;"><span>            document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">&#34;zzjs_net_2&#34;</span>).<span style="color:#a6e22e">style</span>.<span style="color:#a6e22e">top</span><span style="color:#f92672">=</span>parseInt(document.<span style="color:#a6e22e">getElementById</span>
</span></span><span style="display:flex;"><span>            (<span style="color:#e6db74">&#34;zzjs_net_1&#34;</span>).<span style="color:#a6e22e">style</span>.<span style="color:#a6e22e">top</span>)<span style="color:#f92672">+</span><span style="color:#a6e22e">percent</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#34;px&#34;</span>;
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">lastScrollY</span><span style="color:#f92672">=</span><span style="color:#a6e22e">lastScrollY</span><span style="color:#f92672">+</span><span style="color:#a6e22e">percent</span>;
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">//alert(lastScrollY);
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">j1</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;&lt;div id=\&#34;zzjs_net_1\&#34; style=&#39;left:2px;position:absolute;top:120px;&#39;&gt;&lt;span style=&#39;display:inline-block;float:right;cursor:pointer&#39; onclick=&#39;this.parentNode.style.display=\&#34;none\&#34;&#39;&gt;关闭&lt;/span&gt;&lt;a href=&#39;http://www.baidu.com&#39; target=&#39;blank&#39;&gt;&lt;img src=&#39;http://danbao.test.cn/skin/images/002.jpg&#39; width=&#39;170px&#39; height=&#39;360px&#39;&gt;&lt;/a&gt;&lt;/div&gt;&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">j2</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;&lt;div id=\&#34;zzjs_net_2\&#34; style=&#39;right:2px;position:absolute;top:120px;&#39;&gt;&lt;span style=&#39;display:inline-block;float:right;cursor:pointer&#39; onclick=&#39;this.parentNode.style.display=\&#34;none\&#34;&#39;&gt;关闭&lt;/span&gt;&lt;a href=&#39;http://www.baidu.com&#39; target=&#39;blank&#39;&gt;&lt;img src=&#39;http://danbao.test.cn/skin/images/002.jpg&#39; width=&#39;170px&#39; height=&#39;360px&#39;&gt;&lt;/a&gt;&lt;/div&gt;&#34;</span>
</span></span><span style="display:flex;"><span>    document.<span style="color:#a6e22e">write</span>(<span style="color:#a6e22e">j1</span>);
</span></span><span style="display:flex;"><span>    document.<span style="color:#a6e22e">write</span>(<span style="color:#a6e22e">j2</span>);
</span></span><span style="display:flex;"><span>    window.<span style="color:#a6e22e">setInterval</span>(<span style="color:#e6db74">&#34;heartBeat()&#34;</span>,<span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!--对联广告结束--&gt;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span><span style="color:#75715e">&lt;!--对联广告开始--&gt;</span>
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">style</span>&gt;
</span></span><span style="display:flex;"><span>    .<span style="color:#a6e22e">couplet_ad</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">/* 底部固定*/</span>{<span style="color:#66d9ef">position</span>:<span style="color:#66d9ef">fixed</span>;<span style="color:#66d9ef">bottom</span>:<span style="color:#66d9ef">auto</span>; <span style="color:#66d9ef">top</span>:<span style="color:#ae81ff">0</span>; <span style="color:#66d9ef">width</span>: <span style="color:#ae81ff">170</span><span style="color:#66d9ef">px</span>; <span style="color:#66d9ef">height</span>: <span style="color:#ae81ff">360</span><span style="color:#66d9ef">px</span>; <span style="color:#66d9ef">z-index</span>:<span style="color:#ae81ff">99999</span>; <span style="color:#66d9ef">margin-top</span>:<span style="color:#ae81ff">200</span><span style="color:#66d9ef">px</span>;}
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">*</span> <span style="color:#f92672">html</span> .<span style="color:#a6e22e">couplet_ad</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">/* IE6 底部固定*/</span>{_position:<span style="color:#66d9ef">absolute</span>;
</span></span><span style="display:flex;"><span>    _bottom:<span style="color:#66d9ef">auto</span>;
</span></span><span style="display:flex;"><span>    _top:<span style="color:#a6e22e">expression</span>(<span style="color:#a6e22e">eval</span>(document<span style="color:#960050;background-color:#1e0010">.</span>documentElement<span style="color:#960050;background-color:#1e0010">.</span>scrollTop));}
</span></span><span style="display:flex;"><span>    .<span style="color:#a6e22e">couplet_ad</span> <span style="color:#f92672">a</span>{ <span style="color:#66d9ef">display</span>:<span style="color:#66d9ef">block</span>; <span style="color:#66d9ef">cursor</span>:<span style="color:#66d9ef">pointer</span>;}
</span></span><span style="display:flex;"><span>    #ad_left{ <span style="color:#66d9ef">left</span>: <span style="color:#ae81ff">0</span><span style="color:#66d9ef">px</span>;}
</span></span><span style="display:flex;"><span>    #ad_right{ <span style="color:#66d9ef">right</span>: <span style="color:#ae81ff">0</span><span style="color:#66d9ef">px</span>;}
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">style</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">language</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;javascript&#34;</span>&gt;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">ad_left</span>(){
</span></span><span style="display:flex;"><span>        document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">&#39;ad_left&#39;</span>).<span style="color:#a6e22e">style</span>.<span style="color:#a6e22e">display</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;none&#34;</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">ad_right</span>(){
</span></span><span style="display:flex;"><span>        document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">&#39;ad_right&#39;</span>).<span style="color:#a6e22e">style</span>.<span style="color:#a6e22e">display</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;none&#34;</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#39;couplet_ad&#39;</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#39;ad_right&#39;</span>&gt;
</span></span><span style="display:flex;"><span>	{ad(33)}
</span></span><span style="display:flex;"><span>	&lt;<span style="color:#f92672">a</span> <span style="color:#a6e22e">onClick</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;ad_right();&#34;</span>&gt;&lt;<span style="color:#f92672">img</span>  <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;http://filesimg.111cn.net/2013/12/18/20131218034510670.gif&#34;</span>  /&gt;&lt;/<span style="color:#f92672">a</span>&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#39;couplet_ad&#39;</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#39;ad_left&#39;</span>&gt;
</span></span><span style="display:flex;"><span>	{ad(32)}
</span></span><span style="display:flex;"><span>	&lt;<span style="color:#f92672">a</span> <span style="color:#a6e22e">onClick</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;ad_left();&#34;</span>&gt;&lt;<span style="color:#f92672">img</span>  <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;http://filesimg.111cn.net/2013/12/18/20131218034510670.gif&#34;</span>  /&gt;&lt;/<span style="color:#f92672">a</span>&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!--对联广告结束--&gt;</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>网页打开不是在最顶部，而是跳到中间位置解决方法</title>
      <link>https://w.toomore.us/posts/website/%E7%BD%91%E9%A1%B5%E6%89%93%E5%BC%80%E4%B8%8D%E6%98%AF%E5%9C%A8%E6%9C%80%E9%A1%B6%E9%83%A8%E8%80%8C%E6%98%AF%E8%B7%B3%E5%88%B0%E4%B8%AD%E9%97%B4%E4%BD%8D%E7%BD%AE%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</link>
      <pubDate>Mon, 07 Jul 2014 14:37:09 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/%E7%BD%91%E9%A1%B5%E6%89%93%E5%BC%80%E4%B8%8D%E6%98%AF%E5%9C%A8%E6%9C%80%E9%A1%B6%E9%83%A8%E8%80%8C%E6%98%AF%E8%B7%B3%E5%88%B0%E4%B8%AD%E9%97%B4%E4%BD%8D%E7%BD%AE%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</guid>
      <description>今天碰到个纠结的问题，网站首页打开总是跳到中间位置，而不是最顶部。四处询问请教没有找到原因，最后碰到一位大神，问题得到解决。
原来是该页面有一个登录框，默认设置了焦点，打开页面后鼠标自动定位到该位置造成。
&amp;lt;input autofocus=&amp;#34;autofocus&amp;#34; name=&amp;#34;username&amp;#34; size=&amp;#34;50&amp;#34; type=&amp;#34;text&amp;#34; class=&amp;#34;IN1&amp;#34; /&amp;gt; 解决方法：只要将autofocus=&amp;quot;autofocus&amp;quot;去掉，问题就解决了。</description>
      <content:encoded><![CDATA[<p>今天碰到个纠结的问题，网站首页打开总是跳到中间位置，而不是最顶部。四处询问请教没有找到原因，最后碰到一位大神，问题得到解决。</p>
<p>原来是该页面有一个登录框，默认设置了焦点，打开页面后鼠标自动定位到该位置造成。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">input</span> <span style="color:#a6e22e">autofocus</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;autofocus&#34;</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;username&#34;</span> <span style="color:#a6e22e">size</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;50&#34;</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text&#34;</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;IN1&#34;</span> /&gt;
</span></span></code></pre></div><p>解决方法：只要将<code>autofocus=&quot;autofocus&quot;</code>去掉，问题就解决了。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecmall iis 伪静态规则</title>
      <link>https://w.toomore.us/posts/dev/ecmall-iis-%E4%BC%AA%E9%9D%99%E6%80%81%E8%A7%84%E5%88%99/</link>
      <pubDate>Thu, 12 Jun 2014 08:44:23 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecmall-iis-%E4%BC%AA%E9%9D%99%E6%80%81%E8%A7%84%E5%88%99/</guid>
      <description>貌似按照官方的伪静态操作方法在iis不起作用，于是对官方伪静态规则进行了修改，问题得到解决。
官方给的伪静态规则如下：
-----内容开始，不要复制本行----- [ISAPI_Rewrite] # 为了确保重写规则不影响服务器上的其他站点 # 请将下面的语句前的#号去掉，并将(?:www\.)?site1\.com改为商店所在域名 #RewriteCond %{HTTP:Host} (?:www\.)?site1\.com RewriteRule ^goods/([0-9]+)/?$ index.php?app=goods&amp;amp;id=$1 [I] RewriteRule ^goods/([0-9]+)/([^/]+)/?$ index.php?app=goods&amp;amp;id=$1&amp;amp;act=$2 [I] RewriteRule ^goods/([0-9]+)/([^/]+)/page_([^/]+)/?$ index.php?app=goods&amp;amp;id=$1&amp;amp;act=$2&amp;amp;page=$3 [I] RewriteRule ^groupbuy/([0-9]+)/?$ index.php?app=groupbuy&amp;amp;id=$1 [I] RewriteRule ^category/goods/?$ index.php?app=category [I] RewriteRule ^category/(.*)/?$ index.php?app=category&amp;amp;act=$1 [I] RewriteRule ^brand/?$ index.php?app=brand [I] RewriteRule ^article/([0-9]+).html$ index.php?app=article&amp;amp;act=view&amp;amp;article_id=$1 [I] RewriteRule ^store/([0-9]+)/?$ index.php?app=store&amp;amp;id=$1 [I] RewriteRule ^store/article/([0-9]+).html$ index.php?app=store&amp;amp;act=article&amp;amp;id=$1 [I] RewriteRule ^store/([0-9]+)/credit/?$ index.php?app=store&amp;amp;id=$1&amp;amp;act=credit [I] RewriteRule ^store/([0-9]+)/credit/page_([^/]+)/?$ index.php?app=store&amp;amp;id=$1&amp;amp;act=credit&amp;amp;page=$2 [I] RewriteRule ^store/([0-9]+)/credit/([0-9]+)/?$ index.php?app=store&amp;amp;id=$1&amp;amp;act=credit&amp;amp;eval=$2 [I] RewriteRule ^store/([0-9]+)/credit/([0-9]+)/page_([^/]+)/?$ index.php?app=store&amp;amp;id=$1&amp;amp;act=credit&amp;amp;eval=$2&amp;amp;page=$3 [I] RewriteRule ^store/([0-9]+)/goods/?$ index.php?app=store&amp;amp;id=$1&amp;amp;act=search [I] RewriteRule ^store/([0-9]+)/goods/page_([^/]+)/?</description>
      <content:encoded><![CDATA[<p>貌似按照官方的伪静态操作方法在iis不起作用，于是对官方伪静态规则进行了修改，问题得到解决。</p>
<p>官方给的伪静态规则如下：</p>
<pre tabindex="0"><code>-----内容开始，不要复制本行-----

[ISAPI_Rewrite]

# 为了确保重写规则不影响服务器上的其他站点
# 请将下面的语句前的#号去掉，并将(?:www\.)?site1\.com改为商店所在域名

#RewriteCond %{HTTP:Host} (?:www\.)?site1\.com

RewriteRule ^goods/([0-9]+)/?$ index.php?app=goods&amp;id=$1 [I]
RewriteRule ^goods/([0-9]+)/([^/]+)/?$ index.php?app=goods&amp;id=$1&amp;act=$2 [I]
RewriteRule ^goods/([0-9]+)/([^/]+)/page_([^/]+)/?$ index.php?app=goods&amp;id=$1&amp;act=$2&amp;page=$3 [I]
RewriteRule ^groupbuy/([0-9]+)/?$ index.php?app=groupbuy&amp;id=$1 [I]
RewriteRule ^category/goods/?$ index.php?app=category [I]
RewriteRule ^category/(.*)/?$ index.php?app=category&amp;act=$1 [I]
RewriteRule ^brand/?$ index.php?app=brand [I]
RewriteRule ^article/([0-9]+).html$ index.php?app=article&amp;act=view&amp;article_id=$1 [I]
RewriteRule ^store/([0-9]+)/?$ index.php?app=store&amp;id=$1 [I]
RewriteRule ^store/article/([0-9]+).html$ index.php?app=store&amp;act=article&amp;id=$1 [I]
RewriteRule ^store/([0-9]+)/credit/?$ index.php?app=store&amp;id=$1&amp;act=credit [I]
RewriteRule ^store/([0-9]+)/credit/page_([^/]+)/?$ index.php?app=store&amp;id=$1&amp;act=credit&amp;page=$2 [I]
RewriteRule ^store/([0-9]+)/credit/([0-9]+)/?$ index.php?app=store&amp;id=$1&amp;act=credit&amp;eval=$2 [I]
RewriteRule ^store/([0-9]+)/credit/([0-9]+)/page_([^/]+)/?$ index.php?app=store&amp;id=$1&amp;act=credit&amp;eval=$2&amp;page=$3 [I]
RewriteRule ^store/([0-9]+)/goods/?$ index.php?app=store&amp;id=$1&amp;act=search [I]
RewriteRule ^store/([0-9]+)/goods/page_([^/]+)/?$ index.php?app=store&amp;id=$1&amp;act=search&amp;page=$2 [I]
RewriteRule ^store/([0-9]+)/category/([0-9]+)/?$ index.php?app=store&amp;id=$1&amp;act=search&amp;cate_id=$2 [I]
RewriteRule ^store/([0-9]+)/category/([0-9]+)/page_([^/]+)/?$ index.php?app=store&amp;id=$1&amp;act=search&amp;cate_id=$2&amp;page=$3 [I]
RewriteRule ^store/([0-9]+)/groupbuy/?$ index.php?app=store&amp;id=$1&amp;act=groupbuy [I]
RewriteRule ^store/([0-9]+)/groupbuy/page_([^/]+)/?$ index.php?app=store&amp;id=$1&amp;act=groupbuy&amp;page=$2 [I]
-----内容结束，不要复制本行-----
</code></pre><p>修改后的伪静态规则：</p>
<pre tabindex="0"><code>[ISAPI_Rewrite]

# 3600 = 1 hour
CacheClockRate 3600

RepeatLimit 32


#商品详情
RewriteRule /goods/([0-9]+)/?$ /index\.php\?app=goods&amp;id=$1 [L]
RewriteRule /goods/([0-9]+)/([^/]+)/?$ /index\.php\?app=goods&amp;id=$1&amp;act=$2 [L]
RewriteRule /goods/([0-9]+)/([^/]+)/page_([^/]+)/?$ /index.php\?app=goods&amp;id=$1&amp;act=$2&amp;page=$3 [L]
RewriteRule /groupbuy/([0-9]+)/?$ /index\.php\?app=groupbuy&amp;id=$1 [L]

#分类
RewriteRule /category/goods/?$ /index\.php\?app=category [L]
RewriteRule /category/(.*)/?$ /index\.php\?app=category&amp;act=$1 [L]

#品牌
RewriteRule /brand/?$ /index\.php\?app=brand [L]

#文章
RewriteRule /article/([0-9]+).html$ /index\.php\?app=article&amp;act=view&amp;article_id=$1 [L]

#店铺页面
RewriteRule /store/([0-9]+)/?$ /index\.php\?app=store&amp;id=$1 [L]
RewriteRule /store/article/([0-9]+).html$ /index\.php\?app=store&amp;act=article&amp;id=$1 [L]
RewriteRule /store/([0-9]+)/credit/?$ /index\.php\?app=store&amp;id=$1&amp;act=credit [L]
RewriteRule /store/([0-9]+)/credit/page_([^/]+)/?$ /index\.php\?app=store&amp;id=$1&amp;act=credit&amp;page=$2 [L]
RewriteRule /store/([0-9]+)/credit/([0-9]+)/?$ /index\.php\?app=store&amp;id=$1&amp;act=credit&amp;eval=$2 [L]
RewriteRule /store/([0-9]+)/credit/([0-9]+)/page_([^/]+)/?$ /index\.php\?app=store&amp;id=$1&amp;act=credit&amp;eval=$2&amp;page=$3 [L]
RewriteRule /store/([0-9]+)/goods/?$ /index\.php\?app=store&amp;id=$1&amp;act=search [L]
RewriteRule /store/([0-9]+)/goods/page_([^/]+)/?$ /index\.php\?app=store&amp;id=$1&amp;act=search&amp;page=$2 [L]
RewriteRule /store/([0-9]+)/category/([0-9]+)/?$ /index\.php\?app=store&amp;id=$1&amp;act=search&amp;cate_id=$2 [L]
RewriteRule /store/([0-9]+)/category/([0-9]+)/page_([^/]+)/?$ /index\.php\?app=store&amp;id=$1&amp;act=search&amp;cate_id=$2&amp;page=$3 [L]
RewriteRule /store/([0-9]+)/groupbuy/?$ /index\.php\?app=store&amp;id=$1&amp;act=groupbuy [L]
RewriteRule /store/([0-9]+)/groupbuy/page_([^/]+)/?$ /index\.php\?app=store&amp;id=$1&amp;act=groupbuy&amp;page=$2 [L]
</code></pre><p>其他步骤请参考官方文档！</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecshop 重置后台密码 MD5&#43;salt</title>
      <link>https://w.toomore.us/posts/dev/ecshop-%E9%87%8D%E7%BD%AE%E5%90%8E%E5%8F%B0%E5%AF%86%E7%A0%81-md5&#43;salt/</link>
      <pubDate>Tue, 10 Jun 2014 10:51:39 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecshop-%E9%87%8D%E7%BD%AE%E5%90%8E%E5%8F%B0%E5%AF%86%E7%A0%81-md5&#43;salt/</guid>
      <description>ecshop密码加密方式：
MD5 32位+salt，简单来说就是明文密码用MD5加密一次，然后在得到的 MD5 字符后边加上 salt 字段值(salt值为系统随机生成，生成以后不再改变)再进行一次 MD5 加密，得到的结果插入 password 字段。
所以如果忘记后台密码需要重置的话要进行以下操作：
以把密码重置成admin123为例：
一、用MD5加密工具对 admin123 进行32位加密得到 0192023a7bbd73250516f069df18b500；
二、用 phpmyadmin 打开数据库 ecs_admin_user 表，查看后台用户 salt 字段的值例如 3996；
三、对字符串 0192023a7bbd73250516f069df18b5003996再次进行 MD5 32 位加密得到ff7c0d9076ca4dcc6a88e6141a18a2d6；
四、将第三步得到的字符串填写到 ecs_admin_user 表后台用户的 passowrd 字段，然后执行。
经过以上四步，后台密码就重置成 admin123 了。</description>
      <content:encoded><![CDATA[<p>ecshop密码加密方式：</p>
<p>MD5 32位+salt，简单来说就是明文密码用MD5加密一次，然后在得到的 MD5 字符后边加上 salt 字段值(<code>salt值为系统随机生成，生成以后不再改变</code>)再进行一次 MD5 加密，得到的结果插入 <code>password</code> 字段。</p>
<p>所以如果忘记后台密码需要重置的话要进行以下操作：</p>
<p>以把密码重置成<code>admin123</code>为例：</p>
<p>一、用MD5加密工具对 <code>admin123</code> 进行32位加密得到 <code>0192023a7bbd73250516f069df18b500</code>；</p>
<p>二、用 <code>phpmyadmin</code> 打开数据库 <code>ecs_admin_user</code> 表，查看后台用户 <code>salt</code> 字段的值例如 <code>3996</code>；</p>
<p>三、对字符串 <code>0192023a7bbd73250516f069df18b5003996</code>再次进行 MD5 32 位加密得到<code>ff7c0d9076ca4dcc6a88e6141a18a2d6</code>；</p>
<p>四、将第三步得到的字符串填写到 <code>ecs_admin_user</code> 表后台用户的 <code>passowrd</code> 字段，然后执行。</p>
<p>经过以上四步，后台密码就重置成 <code>admin123</code> 了。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Destoon 复制商城模块</title>
      <link>https://w.toomore.us/posts/dev/destoon-%E5%A4%8D%E5%88%B6%E5%95%86%E5%9F%8E%E6%A8%A1%E5%9D%97/</link>
      <pubDate>Fri, 06 Jun 2014 10:19:02 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/destoon-%E5%A4%8D%E5%88%B6%E5%95%86%E5%9F%8E%E6%A8%A1%E5%9D%97/</guid>
      <description>废话不多说，直接说咋弄！
一、进数据库导出所有 destoon_mall 开头的表。（注：数据库操作工具为：phpmyadmin 4.0.4.1，貌似早一些的版本不支持复制）
二、用编辑器打开导出的sql文件，查找 destoon_mall 替换为 destoon_xxx (xxx为你要新建的商城模块的名称)，保存并导入到数据库。
三、打开 destoon_module 表，复制商城mall这条数据，更改相应的信息，填写模块ID、模块目录改成你要新建的模块xxx，各个地方出现的xxx要求保一致。
四、把根目录下的 /mall 文件夹复制一份重命名为 xxx， 打开其中的 config.inc.php 文件，将 $moduleid = 28; 改为你第三步填写的模块ID。
五、把 /module/ 目录下的 mall 文件夹复制一份重命名为 xxx，将其中的 mall.class.php 文件重命名为 xxx.class.php，利用文件查找将该文件夹下的所有文件中的 mall 替换为 xxx 。
六、将模板目录 /template/default/ 下的 mall 文件夹复制一份重命名为 xxx 。(default 为默认模板目录，如果使用的是其他模板则复制相应模板目录下的 mall 文件夹并重命名为 xxx)。
七、后台系统维护：更新全站、生成首页，然后刷新在后台、前台就可以看到新复制的商城模块xxx了。
不要高兴的太早，还没有大功告成，如果仅到这一步，你会发现后台在新建的商城模块xxx添加商品的时候不能上传图片什么的，好多不能操作，所以还需要一步操作才可以。
八、后台模块管理找到xxx模块，点击模块设置你会发现设置里面都是空的，没有配置。你只需要按照默认的商城模块配置，对xxx模块进行配置就可以了，配置完后，更新全站生成首页，一切就都搞定了。</description>
      <content:encoded><![CDATA[<p>废话不多说，直接说咋弄！</p>
<p>一、进数据库导出所有 <code>destoon_mall</code> 开头的表。（注：数据库操作工具为：phpmyadmin 4.0.4.1，貌似早一些的版本不支持复制）</p>
<p>二、用编辑器打开导出的sql文件，查找 <code>destoon_mall</code> 替换为 <code>destoon_xxx</code> (xxx为你要新建的商城模块的名称)，保存并导入到数据库。</p>
<p>三、打开 <code>destoon_module</code> 表，复制商城mall这条数据，更改相应的信息，填写模块ID、模块目录改成你要新建的模块xxx，各个地方出现的xxx要求保一致。</p>
<p><img loading="lazy" src="/images/content/posts/php/20220116/6a974fb56f72d66b904c8d04399019ee9f558a880bf814e3a02cfc769a7f1a5a.png" alt="新模块字段说明"  />
</p>
<p>四、把根目录下的 <code>/mall</code> 文件夹复制一份重命名为 <code>xxx</code>， 打开其中的 <code>config.inc.php</code> 文件，将 <code>$moduleid = 28</code>; 改为你第三步填写的模块ID。</p>
<p>五、把 <code>/module/</code> 目录下的 <code>mall</code> 文件夹复制一份重命名为 <code>xxx</code>，将其中的 <code>mall.class.php</code> 文件重命名为 <code>xxx.class.php</code>，利用文件查找将该文件夹下的所有文件中的 <code>mall</code> 替换为 <code>xxx</code> 。</p>
<p>六、将模板目录 <code>/template/default/</code> 下的 <code>mall</code> 文件夹复制一份重命名为 <code>xxx</code> 。(<code>default</code> 为默认模板目录，如果使用的是其他模板则复制相应模板目录下的 <code>mall</code> 文件夹并重命名为 <code>xxx</code>)。</p>
<p>七、后台系统维护：更新全站、生成首页，然后刷新在后台、前台就可以看到新复制的商城模块xxx了。</p>
<p>不要高兴的太早，还没有大功告成，如果仅到这一步，你会发现后台在新建的商城模块xxx添加商品的时候不能上传图片什么的，好多不能操作，所以还需要一步操作才可以。</p>
<p>八、后台模块管理找到xxx模块，点击模块设置你会发现设置里面都是空的，没有配置。你只需要按照默认的商城模块配置，对xxx模块进行配置就可以了，配置完后，更新全站生成首页，一切就都搞定了。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>QQ在线客服设置 QQ开启临时会话教程</title>
      <link>https://w.toomore.us/posts/website/qq%E5%9C%A8%E7%BA%BF%E5%AE%A2%E6%9C%8D%E8%AE%BE%E7%BD%AE-qq%E5%BC%80%E5%90%AF%E4%B8%B4%E6%97%B6%E4%BC%9A%E8%AF%9D%E6%95%99%E7%A8%8B/</link>
      <pubDate>Tue, 03 Jun 2014 10:21:04 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/qq%E5%9C%A8%E7%BA%BF%E5%AE%A2%E6%9C%8D%E8%AE%BE%E7%BD%AE-qq%E5%BC%80%E5%90%AF%E4%B8%B4%E6%97%B6%E4%BC%9A%E8%AF%9D%E6%95%99%E7%A8%8B/</guid>
      <description>如果您在点击在线客服以后出现下面提示框，“您需要添加对方好友，才能发送回话消息。”，表示您的客服QQ没有开启临时会话功能，需要开启以后才可以正常使用在线客服。
设置方法如下：
一、在QQ设置面板里面开启临时回话功能
二、在浏览器中打开下边的链接
http://shang.qq.com/v3/index.html
1、用您需要设置的QQ号码在这里登录
2、如果您没有开通通讯组件，会提示您立即免费开通，选择立即开通即可。
3、开通以后自动跳转到设置页面，自动回复语里面填写您要自动回复的内容，点击保存。
4、回话能力前面全部打上对勾，点击保存。
5、其他设置保持默认就可以了。
设置成功以后再点击QQ客服会出现以下界面，可以直接QQ窗口聊天或者选择发起网页聊天，进行咨询了。</description>
      <content:encoded><![CDATA[<p>如果您在点击在线客服以后出现下面提示框，“您需要添加对方好友，才能发送回话消息。”，表示您的客服QQ没有开启临时会话功能，需要开启以后才可以正常使用在线客服。</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/d64fe45c7ec11e8f232407f72e4bb4e7f07aa988a467814c6b903649cb789fb4.png" alt="设置前"  />
</p>
<p>设置方法如下：</p>
<p>一、在QQ设置面板里面开启临时回话功能</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/b11088f4f7bf5e66aff7849daeda2d884af6ca06d02d7971e21c65e6e47f1617.png" alt="点击设置按钮"  />
</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/1cd401e9bcb521a22a86fb45c4155e1de1f430ee2d5882b6956557a164d1dfe0.png" alt="权限设置"  />
</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/6c84b05612204473148531a8a921989f53158e7bdd80c54724bf1ba7f957771f.png" alt="临时会话"  />
</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/746834e26d88ab46872d536b01243d15a49b1791095ec3e35c168f68cbb0ed45.png" alt="允许临时会话"  />
</p>
<p>二、在浏览器中打开下边的链接</p>
<p><a href="http://shang.qq.com/v3/index.html">http://shang.qq.com/v3/index.html</a></p>
<p>1、用您需要设置的QQ号码在这里登录</p>
<p>2、如果您没有开通通讯组件，会提示您立即免费开通，选择立即开通即可。</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/d29c58e983846fac5cca498254dce71de9cabcaa9aef2e23cb54d8e616d5e640.png" alt="开通通讯组件"  />
</p>
<p>3、开通以后自动跳转到设置页面，自动回复语里面填写您要自动回复的内容，点击保存。</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/09f5c2eccc013e641ea97b65a151115ddab2a05e9a3cff1caa2d78bf8707feca.png" alt="自动回复语"  />
</p>
<p>4、回话能力前面全部打上对勾，点击保存。</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/96ba87cce58f3f7a5eededd100b2ddd663da6fd38c1d5e3303865aab3aa67cca.png" alt="勾选会话能力"  />
</p>
<p>5、其他设置保持默认就可以了。</p>
<p>设置成功以后再点击QQ客服会出现以下界面，可以直接QQ窗口聊天或者选择发起网页聊天，进行咨询了。</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/c8bb1a63b93a6c64fe3a0da00aa8d001b0d1aa760f1f44cefe5beb75fb0044ff.png" alt="设置后"  />
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecshop加入购物车js报错</title>
      <link>https://w.toomore.us/posts/dev/ecshop%E5%8A%A0%E5%85%A5%E8%B4%AD%E7%89%A9%E8%BD%A6js%E6%8A%A5%E9%94%99/</link>
      <pubDate>Thu, 15 May 2014 11:29:28 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecshop%E5%8A%A0%E5%85%A5%E8%B4%AD%E7%89%A9%E8%BD%A6js%E6%8A%A5%E9%94%99/</guid>
      <description>点击加入购物车没反应，用浏览器调试一看，点一下报一个错误，错误代码如下：
Uncaught transport.js/parseResult() error: can&amp;#39;t parse to JSON. &amp;lt;br /&amp;gt; &amp;lt;b&amp;gt;Warning&amp;lt;/b&amp;gt;: number_format() expects parameter 1 to be double, string given in &amp;lt;b&amp;gt;D:\xampp\htdocs\ecshop\includes\lib_common.php&amp;lt;/b&amp;gt; on line &amp;lt;b&amp;gt;959&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt; {&amp;#34;error&amp;#34;:6,&amp;#34;me...&amp;lt;omitted&amp;gt;...0} transport.js:412 Transport.parseResult transport.js:412 xhr.onreadystatechange 相信很多跟我一样的菜鸟都碰到这个问题了，而且官网的模板同样有这个错误，各种百度、google你懂的，都是相互转载的东西，问题也没得到解决。后来终于找到一个大神的帖子，问题解决了。
方法如下：
按照错误提示打开 \includes\lib_common.php 文件，对应的959行，将代码：
$price = number_format($price, 2, &amp;#39;.&amp;#39;, &amp;#39;&amp;#39;); 改为：
$price = number_format((double)$price, 2, &amp;#39;.&amp;#39;, &amp;#39;&amp;#39;); OK问题解决！ 大神原帖：http://bbs.ecshop.com/thread-152014-1-1.html 四楼那位大师!</description>
      <content:encoded><![CDATA[<p>点击加入购物车没反应，用浏览器调试一看，点一下报一个错误，错误代码如下：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javaScript" data-lang="javaScript"><span style="display:flex;"><span><span style="color:#a6e22e">Uncaught</span> <span style="color:#a6e22e">transport</span>.<span style="color:#a6e22e">js</span><span style="color:#f92672">/</span><span style="color:#a6e22e">parseResult</span>() <span style="color:#a6e22e">error</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">can</span><span style="color:#960050;background-color:#1e0010">&#39;</span><span style="color:#a6e22e">t</span> <span style="color:#a6e22e">parse</span> <span style="color:#a6e22e">to</span> <span style="color:#a6e22e">JSON</span>.
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;</span><span style="color:#a6e22e">br</span> <span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;</span><span style="color:#a6e22e">b</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">Warning</span><span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/b&gt;:  number_format() expects parameter 1 to be double, string given in &lt;b&gt;D:\xampp\htdocs\ecshop\includes\lib_common.php&lt;/b&gt; on line &lt;b&gt;959&lt;/b&gt;&lt;br /&gt;</span>
</span></span><span style="display:flex;"><span>{<span style="color:#e6db74">&#34;error&#34;</span><span style="color:#f92672">:</span><span style="color:#ae81ff">6</span>,<span style="color:#960050;background-color:#1e0010">&#34;</span><span style="color:#a6e22e">me</span>...<span style="color:#f92672">&lt;</span><span style="color:#a6e22e">omitted</span><span style="color:#f92672">&gt;</span>...<span style="color:#ae81ff">0</span>} <span style="color:#a6e22e">transport</span>.<span style="color:#a6e22e">js</span><span style="color:#f92672">:</span><span style="color:#ae81ff">412</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Transport</span>.<span style="color:#a6e22e">parseResult</span> <span style="color:#a6e22e">transport</span>.<span style="color:#a6e22e">js</span><span style="color:#f92672">:</span><span style="color:#ae81ff">412</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">xhr</span>.<span style="color:#a6e22e">onreadystatechange</span>
</span></span></code></pre></div><p>相信很多跟我一样的菜鸟都碰到这个问题了，而且官网的模板同样有这个错误，各种百度、google你懂的，都是相互转载的东西，问题也没得到解决。后来终于找到一个大神的帖子，问题解决了。</p>
<p>方法如下：</p>
<p>按照错误提示打开 <code>\includes\lib_common.php</code> 文件，对应的959行，将代码：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>$price <span style="color:#f92672">=</span> <span style="color:#a6e22e">number_format</span>($price, <span style="color:#ae81ff">2</span>, <span style="color:#e6db74">&#39;.&#39;</span>, <span style="color:#e6db74">&#39;&#39;</span>);
</span></span></code></pre></div><p>改为：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>$price <span style="color:#f92672">=</span> <span style="color:#a6e22e">number_format</span>((<span style="color:#a6e22e">double</span>)$price, <span style="color:#ae81ff">2</span>, <span style="color:#e6db74">&#39;.&#39;</span>, <span style="color:#e6db74">&#39;&#39;</span>);
</span></span></code></pre></div><p>OK问题解决！ 大神原帖：http://bbs.ecshop.com/thread-152014-1-1.html 四楼那位大师!</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>IE浏览器“浏览器模式”和“文本模式”</title>
      <link>https://w.toomore.us/posts/website/ie%E6%B5%8F%E8%A7%88%E5%99%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E6%A8%A1%E5%BC%8F%E5%92%8C%E6%96%87%E6%9C%AC%E6%A8%A1%E5%BC%8F/</link>
      <pubDate>Fri, 09 May 2014 11:34:29 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/ie%E6%B5%8F%E8%A7%88%E5%99%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E6%A8%A1%E5%BC%8F%E5%92%8C%E6%96%87%E6%9C%AC%E6%A8%A1%E5%BC%8F/</guid>
      <description>浏览器模式与文档模式概念 在较新的IE浏览器中（如IE8, IE9, IE10），为了解决兼容性的问题，引入了浏览器模式和文本模式两个概念，浏览网页时可以通过按F12键看到这两种模式。
浏览器模式的主要作用是为兼容较早版本的IE，它会控制浏览器发出的UserAgent，表示以哪个版本的浏览器发出请求，以此来允许为某个特定IE版本设计的代码正确执行（举例来说：有些代码真是判断ie版本的，还有css里也有判断ie版本的）。
文本模式的主要作用是影响浏览器显示网页HTML的方式，在接到返回的HTML文件后，决定以哪个IE版本的文本模式解析该页面（举例来说：JS脚本就是依赖文档模式，IE9的js变化就需要IE9文档模式来支持）。
如何使WebBrowser运行在IE9浏览器模式下
在安装了IE9的计算机上，Webbrowser并不是直接运行在IE9模式下，而是默认工作在IE9兼容视图（也就是IE7 Mode）下，为了让Webbrowser工作在IE9下，需要修改注册表，为应用程序指明使用IE9版本。
32位计算机需要修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION，增加YourApplication.exe，值为十进制9999。
64位计算机需要修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION，增加YourApplication.exe，值为十进制9999。
注意：9999最正确，9000则不推荐用，因为它不彻底。
如何使Htm页面使用IE9文本模式
如果htm页面中没有doctype，那么WebBrowser将不会使用IE9文本模式来解析页面(哪怕已经设置了注册表9999)，而是仍沿用之前兼容旧版IE的 Quirks模来渲染，解释页面，JS脚本也将同样处置。这样的缺点是无法使用Html5新特性，优点是您的系统升级到IE9的兼容性改造工作将会大为减少。
修改Htm页面的方法之一是，在Head-&amp;gt;Title下添加&amp;lt;META http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=9&amp;quot; &amp;gt; &amp;lt;/META&amp;gt;，这样可确保HTM页面工作在IE9标准文档模式下。
注意：msdn上写的关于9999可以无视doctype而自动使页面运行在ie9文档模式的说法是错误的，这一点已经得到了权威的认可。
总结
欲使你的系统作为整体（包括WebBrowser和Htm页面）工作在IE9下，则以上2, 3两步均需遵守，缺一不可。
后记：发现３确实不可或缺，但２却不必了，因为３的优先级比２高，基本上，有了３就可以了。</description>
      <content:encoded><![CDATA[<ol>
<li>
<p>浏览器模式与文档模式概念
在较新的IE浏览器中（如IE8, IE9, IE10），为了解决兼容性的问题，引入了浏览器模式和文本模式两个概念，浏览网页时可以通过按F12键看到这两种模式。</p>
<p>浏览器模式的主要作用是为兼容较早版本的IE，它会控制浏览器发出的UserAgent，表示以哪个版本的浏览器发出请求，以此来允许为某个特定IE版本设计的代码正确执行（举例来说：有些代码真是判断ie版本的，还有css里也有判断ie版本的）。</p>
<p>文本模式的主要作用是影响浏览器显示网页HTML的方式，在接到返回的HTML文件后，决定以哪个IE版本的文本模式解析该页面（举例来说：JS脚本就是依赖文档模式，IE9的js变化就需要IE9文档模式来支持）。</p>
</li>
<li>
<p>如何使WebBrowser运行在IE9浏览器模式下<br>
在安装了IE9的计算机上，Webbrowser并不是直接运行在IE9模式下，而是默认工作在IE9兼容视图（也就是IE7 Mode）下，为了让Webbrowser工作在IE9下，需要修改注册表，为应用程序指明使用IE9版本。</p>
<p>32位计算机需要修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION，增加YourApplication.exe，值为十进制9999。</p>
<p>64位计算机需要修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION，增加YourApplication.exe，值为十进制9999。</p>
<p>注意：9999最正确，9000则不推荐用，因为它不彻底。</p>
</li>
<li>
<p>如何使Htm页面使用IE9文本模式<br>
如果htm页面中没有doctype，那么WebBrowser将不会使用IE9文本模式来解析页面(哪怕已经设置了注册表9999)，而是仍沿用之前兼容旧版IE的 Quirks模来渲染，解释页面，JS脚本也将同样处置。这样的缺点是无法使用Html5新特性，优点是您的系统升级到IE9的兼容性改造工作将会大为减少。</p>
<p>修改Htm页面的方法之一是，在Head-&gt;Title下添加<code>&lt;META http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=9&quot; &gt; &lt;/META&gt;</code>，这样可确保HTM页面工作在IE9标准文档模式下。</p>
<p>注意：msdn上写的关于9999可以无视doctype而自动使页面运行在ie9文档模式的说法是错误的，这一点已经得到了权威的认可。</p>
</li>
<li>
<p>总结<br>
欲使你的系统作为整体（包括WebBrowser和Htm页面）工作在IE9下，则以上2, 3两步均需遵守，缺一不可。</p>
</li>
</ol>
<hr>
<p>后记：发现３确实不可或缺，但２却不必了，因为３的优先级比２高，基本上，有了３就可以了。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>网站图片在IE浏览器下不显示</title>
      <link>https://w.toomore.us/posts/website/%E7%BD%91%E7%AB%99%E5%9B%BE%E7%89%87%E5%9C%A8ie%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%8B%E4%B8%8D%E6%98%BE%E7%A4%BA/</link>
      <pubDate>Fri, 09 May 2014 11:27:02 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/%E7%BD%91%E7%AB%99%E5%9B%BE%E7%89%87%E5%9C%A8ie%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%8B%E4%B8%8D%E6%98%BE%E7%A4%BA/</guid>
      <description>很多站长都碰到过这个问题，明明有的图片，在浏览器中打开网页就是不显示。这种情况怎么办？这是因为您用的是IE浏览器，而且您的图片是CMYK格式的，而不是RGB格式，在IE浏览器下面，CMYK格式的图片是无法显示的，而在chrome等浏览器下面，CMYK格式的图片是可以打开的。
如果碰到上面的情况，很简单，把图片下载到本地，使用photoshop修改图片为RGB格式就可以了。</description>
      <content:encoded><![CDATA[<p>很多站长都碰到过这个问题，明明有的图片，在浏览器中打开网页就是不显示。这种情况怎么办？这是因为您用的是IE浏览器，而且您的图片是CMYK格式的，而不是RGB格式，在IE浏览器下面，CMYK格式的图片是无法显示的，而在chrome等浏览器下面，CMYK格式的图片是可以打开的。</p>
<p>如果碰到上面的情况，很简单，把图片下载到本地，使用photoshop修改图片为RGB格式就可以了。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecshop 去掉头部版权信息</title>
      <link>https://w.toomore.us/posts/dev/ecshop-%E5%8E%BB%E6%8E%89%E5%A4%B4%E9%83%A8%E7%89%88%E6%9D%83%E4%BF%A1%E6%81%AF/</link>
      <pubDate>Tue, 06 May 2014 15:57:54 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecshop-%E5%8E%BB%E6%8E%89%E5%A4%B4%E9%83%A8%E7%89%88%E6%9D%83%E4%BF%A1%E6%81%AF/</guid>
      <description>打开文件：\includes\cls_template.php，查找 Generator，在1102行，
删除或注释以下代码就OK了！
/* 在头部加入版本信息 */ $source = preg_replace(&amp;#39;/&amp;lt;head&amp;gt;/i&amp;#39;, &amp;#34;&amp;lt;head&amp;gt;\r\n&amp;lt;meta name=\&amp;#34;Generator\&amp;#34; content=\&amp;#34;&amp;#34; . APPNAME .&amp;#39; &amp;#39; . VERSION . &amp;#34;\&amp;#34; /&amp;gt;&amp;#34;, $source); </description>
      <content:encoded><![CDATA[<p>打开文件：<code>\includes\cls_template.php</code>，查找 <code>Generator</code>，在1102行，</p>
<p>删除或注释以下代码就OK了！</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>    <span style="color:#75715e">/* 在头部加入版本信息 */</span>
</span></span><span style="display:flex;"><span>    $source <span style="color:#f92672">=</span> <span style="color:#a6e22e">preg_replace</span>(<span style="color:#e6db74">&#39;/&lt;head&gt;/i&#39;</span>, <span style="color:#e6db74">&#34;&lt;head&gt;</span><span style="color:#ae81ff">\r\n</span><span style="color:#e6db74">&lt;meta name=</span><span style="color:#ae81ff">\&#34;</span><span style="color:#e6db74">Generator</span><span style="color:#ae81ff">\&#34;</span><span style="color:#e6db74"> content=</span><span style="color:#ae81ff">\&#34;</span><span style="color:#e6db74">&#34;</span> <span style="color:#f92672">.</span> <span style="color:#a6e22e">APPNAME</span> <span style="color:#f92672">.</span><span style="color:#e6db74">&#39; &#39;</span> <span style="color:#f92672">.</span> <span style="color:#a6e22e">VERSION</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;</span><span style="color:#ae81ff">\&#34;</span><span style="color:#e6db74"> /&gt;&#34;</span>,  $source);
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>echsop “transport.js/run() error:&#39;process_request&#39; 未定义”-解决方法</title>
      <link>https://w.toomore.us/posts/dev/echsop-transport.js-run-errorprocess_request%E6%9C%AA%E5%AE%9A%E4%B9%89-%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</link>
      <pubDate>Mon, 05 May 2014 17:30:15 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/echsop-transport.js-run-errorprocess_request%E6%9C%AA%E5%AE%9A%E4%B9%89-%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</guid>
      <description>由于工作需要才接触ecshop时间不长，今天套模板的时候，N个页面总是弹出如下错误：
transport.js/run() error:&amp;lsquo;process_request&amp;rsquo; 未定义
总之弹窗无处不在！
各种搜索以后发现原来是修改模板时删除了 library 目录下 &amp;ldquo;page_header.lbi&amp;rdquo; 文件顶部的系统关键代码：
&amp;lt;script type=&amp;#34;text/javascript&amp;#34;&amp;gt; var process_request = &amp;#34;{$lang.process_request}&amp;#34;; &amp;lt;/script&amp;gt; OK！那就再给它加回去，问题解决！
多谢这位仁兄：http://hi.baidu.com/hudnc/item/6fbdcbd74d68dacb1b72b40b</description>
      <content:encoded><![CDATA[<p>由于工作需要才接触ecshop时间不长，今天套模板的时候，N个页面总是弹出如下错误：</p>
<p>transport.js/run() error:&lsquo;process_request&rsquo; 未定义</p>
<p>总之弹窗无处不在！</p>
<p>各种搜索以后发现原来是修改模板时删除了 library 目录下 &ldquo;page_header.lbi&rdquo; 文件顶部的系统关键代码：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text/javascript&#34;</span>&gt;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">process_request</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;{$lang.process_request}&#34;</span>;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span></code></pre></div><p>OK！那就再给它加回去，问题解决！</p>
<p>多谢这位仁兄：http://hi.baidu.com/hudnc/item/6fbdcbd74d68dacb1b72b40b</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecshop Deprecated:Assigning the Return Value of New by Reference Is Deprecated in 报错解决方法</title>
      <link>https://w.toomore.us/posts/dev/ecshop-deprecatedassigning-the-return-value-of-new-by-reference-is-deprecated-in-%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</link>
      <pubDate>Mon, 14 Apr 2014 09:55:20 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecshop-deprecatedassigning-the-return-value-of-new-by-reference-is-deprecated-in-%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</guid>
      <description>今天本地测试ecshop，后台操作站点地图是报如下错误：
Deprecated: Assigning the return value of new by reference is deprecated in D:\wamp\www\ecshop\admin\sitemap.php on line 46 Deprecated: Assigning the return value of new by reference is deprecated in D:\wamp\www\ecshop\admin\sitemap.php on line 47 Deprecated: Assigning the return value of new by reference is deprecated in D:\wamp\www\ecshop\admin\sitemap.php on line 68 Deprecated: Assigning the return value of new by reference is deprecated in D:\wamp\www\ecshop\admin\sitemap.php on line 79 Deprecated: Assigning the return value of new by reference is deprecated in D:\wamp\www\ecshop\admin\sitemap.</description>
      <content:encoded><![CDATA[<p>今天本地测试ecshop，后台操作站点地图是报如下错误：</p>
<pre tabindex="0"><code>Deprecated: Assigning the return value of new by reference is deprecated in D:\wamp\www\ecshop\admin\sitemap.php on line 46

Deprecated: Assigning the return value of new by reference is deprecated in D:\wamp\www\ecshop\admin\sitemap.php on line 47

Deprecated: Assigning the return value of new by reference is deprecated in D:\wamp\www\ecshop\admin\sitemap.php on line 68

Deprecated: Assigning the return value of new by reference is deprecated in D:\wamp\www\ecshop\admin\sitemap.php on line 79

Deprecated: Assigning the return value of new by reference is deprecated in D:\wamp\www\ecshop\admin\sitemap.php on line 90

Deprecated: Assigning the return value of new by reference is deprecated in D:\wamp\www\ecshop\admin\sitemap.php on line 102
</code></pre><p>于是百度了一下，发现好多童鞋出现这个问题，<del>原来是PHP 5.3 中直接可以使用“=”，已经弃用了“=&amp;”</del>。再定位错误行发现，每一行都有&quot;=&amp;&quot;，于是将所有的“=&amp;”都替换成“=”,问题得到解决。</p>
<pre tabindex="0"><code>$sm     =&amp; new google_sitemap();
$smi    =&amp; new google_sitemap_item($domain, $today, $_POST[&#39;homepage_changefreq&#39;], $_POST[&#39;homepage_priority&#39;]);
</code></pre><hr>
<p>后记：</p>
<p>2022-01-16 整理博客记</p>
<p>回头看以前写的东西，不禁发笑，都是啥玩意？</p>
<p>这个问题其实并不是<code>原来是PHP 5.3 中直接可以使用“=”，已经弃用了“=&amp;”</code>，当时瞎猫碰上死耗子，百度胡乱搜，不知道看文档，只是碰巧把问题解决了。</p>
<p>真实原因 PHP 手册里面写的很清楚：</p>
<blockquote>
<p>new 运算符自动返回一个引用，因此对 new 的结果进行引用赋值是错误的。<br>
&ndash; <cite><a href="https://www.php.net/manual/zh/language.operators.assignment.php#language.operators.assignment.reference">引用赋值</a></cite><br>
&ndash; <cite><a href="https://www.php.net/manual/zh/language.references.php">引用的解释</a></cite></p>
</blockquote>
]]></content:encoded>
    </item>
    
    <item>
      <title>PHPCMS全局循环调用二级类目导航</title>
      <link>https://w.toomore.us/posts/dev/phpcms%E5%85%A8%E5%B1%80%E5%BE%AA%E7%8E%AF%E8%B0%83%E7%94%A8%E4%BA%8C%E7%BA%A7%E7%B1%BB%E7%9B%AE%E5%AF%BC%E8%88%AA/</link>
      <pubDate>Fri, 28 Feb 2014 16:29:59 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/phpcms%E5%85%A8%E5%B1%80%E5%BE%AA%E7%8E%AF%E8%B0%83%E7%94%A8%E4%BA%8C%E7%BA%A7%E7%B1%BB%E7%9B%AE%E5%AF%BC%E8%88%AA/</guid>
      <description>{pc:content action=&amp;#34;category&amp;#34; catid=&amp;#34;0&amp;#34; num=&amp;#34;25&amp;#34; siteid=&amp;#34;$siteid&amp;#34; order=&amp;#34;listorder ASC&amp;#34;} &amp;lt;a href=&amp;#34;{siteurl($siteid)}&amp;#34;&amp;gt;首页&amp;lt;/a&amp;gt; {loop $data $r}&amp;lt;!-- 一级栏目循环开始 --&amp;gt; &amp;lt;a href=&amp;#34;{$r[url]}&amp;#34;&amp;gt;{$r[catname]}&amp;lt;/a&amp;gt; {if $r[arrchildid]} &amp;lt;!--是否有子栏目--&amp;gt; {pc:content action=&amp;#34;category&amp;#34; catid=&amp;#34;$r[catid]&amp;#34; num=&amp;#34;15&amp;#34; siteid=&amp;#34;$siteid&amp;#34; order=&amp;#34;listorder ASC&amp;#34; return=&amp;#34;data2&amp;#34;} {loop $data2 $v}&amp;lt;!--子栏目循环开始--&amp;gt; &amp;lt;a href=&amp;#34;{$v[url]}&amp;#34;&amp;gt;{$v[catname]}&amp;lt;/a&amp;gt; {/loop}&amp;lt;!--子栏目循环结束--&amp;gt; {/pc} {/if} {/loop}&amp;lt;!-- 一级栏目循环结束--&amp;gt; {/pc} </description>
      <content:encoded><![CDATA[<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>{<span style="color:#a6e22e">pc</span><span style="color:#f92672">:</span><span style="color:#a6e22e">content</span> <span style="color:#a6e22e">action</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;category&#34;</span> <span style="color:#a6e22e">catid</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0&#34;</span> <span style="color:#a6e22e">num</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;25&#34;</span> <span style="color:#a6e22e">siteid</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">$siteid</span><span style="color:#e6db74">&#34;</span> <span style="color:#a6e22e">order</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;listorder ASC&#34;</span>}
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;{siteurl(</span><span style="color:#e6db74">$siteid</span><span style="color:#e6db74">)}&#34;</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">首页</span><span style="color:#f92672">&lt;/</span><span style="color:#a6e22e">a</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>    {<span style="color:#a6e22e">loop</span> $data $r}<span style="color:#f92672">&lt;!--</span>  <span style="color:#a6e22e">一级栏目循环开始</span>  <span style="color:#f92672">--&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">{</span>$r[<span style="color:#a6e22e">url</span>]<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span><span style="color:#f92672">&gt;</span>{$r[<span style="color:#a6e22e">catname</span>]}<span style="color:#f92672">&lt;/</span><span style="color:#a6e22e">a</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>        {<span style="color:#66d9ef">if</span> $r[<span style="color:#a6e22e">arrchildid</span>]} <span style="color:#f92672">&lt;!--</span><span style="color:#a6e22e">是否有子栏目</span><span style="color:#f92672">--&gt;</span>
</span></span><span style="display:flex;"><span>            {<span style="color:#a6e22e">pc</span><span style="color:#f92672">:</span><span style="color:#a6e22e">content</span> <span style="color:#a6e22e">action</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;category&#34;</span> <span style="color:#a6e22e">catid</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">$r[catid]</span><span style="color:#e6db74">&#34;</span> <span style="color:#a6e22e">num</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;15&#34;</span> <span style="color:#a6e22e">siteid</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">$siteid</span><span style="color:#e6db74">&#34;</span> <span style="color:#a6e22e">order</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;listorder ASC&#34;</span> <span style="color:#66d9ef">return</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;data2&#34;</span>}
</span></span><span style="display:flex;"><span>                    {<span style="color:#a6e22e">loop</span> $data2 $v}<span style="color:#f92672">&lt;!--</span><span style="color:#a6e22e">子栏目循环开始</span><span style="color:#f92672">--&gt;</span>
</span></span><span style="display:flex;"><span>                        <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">{</span>$v[<span style="color:#a6e22e">url</span>]<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span><span style="color:#f92672">&gt;</span>{$v[<span style="color:#a6e22e">catname</span>]}<span style="color:#f92672">&lt;/</span><span style="color:#a6e22e">a</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>                    {<span style="color:#f92672">/</span><span style="color:#a6e22e">loop</span>}<span style="color:#f92672">&lt;!--</span><span style="color:#a6e22e">子栏目循环结束</span><span style="color:#f92672">--&gt;</span>
</span></span><span style="display:flex;"><span>            {<span style="color:#f92672">/</span><span style="color:#a6e22e">pc</span>}
</span></span><span style="display:flex;"><span>        {<span style="color:#f92672">/</span><span style="color:#66d9ef">if</span>}
</span></span><span style="display:flex;"><span>    {<span style="color:#f92672">/</span><span style="color:#a6e22e">loop</span>}<span style="color:#f92672">&lt;!--</span>  <span style="color:#a6e22e">一级栏目循环结束</span><span style="color:#f92672">--&gt;</span>
</span></span><span style="display:flex;"><span>{<span style="color:#f92672">/</span><span style="color:#a6e22e">pc</span>}
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>如何使EditPlus打开tpl文件高亮显示代码</title>
      <link>https://w.toomore.us/posts/dev/%E5%A6%82%E4%BD%95%E4%BD%BFeditplus%E6%89%93%E5%BC%80tpl%E6%96%87%E4%BB%B6%E9%AB%98%E4%BA%AE%E6%98%BE%E7%A4%BA%E4%BB%A3%E7%A0%81/</link>
      <pubDate>Wed, 26 Feb 2014 18:07:47 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/%E5%A6%82%E4%BD%95%E4%BD%BFeditplus%E6%89%93%E5%BC%80tpl%E6%96%87%E4%BB%B6%E9%AB%98%E4%BA%AE%E6%98%BE%E7%A4%BA%E4%BB%A3%E7%A0%81/</guid>
      <description>问：如何使 EditPlus 打开 .tpl 文件高亮显示代码？
答：在“工具” -&amp;gt; 首选项 -&amp;gt; 下，类别选“文件” -&amp;gt; “语法”，文件类型选“HTML”，在对应的文件扩展名加上tpl。确认保存即可。</description>
      <content:encoded><![CDATA[<p>问：如何使 <code>EditPlus</code> 打开 <code>.tpl</code> 文件高亮显示代码？</p>
<p>答：在“工具” -&gt; 首选项 -&gt; 下，类别选“文件” -&gt; “语法”，文件类型选“HTML”，在对应的文件扩展名加上tpl。确认保存即可。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecshop前台英文后台中文实现方法</title>
      <link>https://w.toomore.us/posts/dev/ecshop%E5%89%8D%E5%8F%B0%E8%8B%B1%E6%96%87%E5%90%8E%E5%8F%B0%E4%B8%AD%E6%96%87%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95/</link>
      <pubDate>Sun, 09 Feb 2014 17:24:52 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecshop%E5%89%8D%E5%8F%B0%E8%8B%B1%E6%96%87%E5%90%8E%E5%8F%B0%E4%B8%AD%E6%96%87%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95/</guid>
      <description>第一步：
通过后台设置实现前台英文。
进入 后台 》系统设置 》商店设置 》基本设置，将系统语言选项设为 en_us ，确定保存。
第二步：
打开 /admin/includes/init.php 文件 找到
$_CFG = load_config(); // 在它下面增加一行代码 $_CFG[&amp;#39;lang&amp;#39;]= &amp;#34;zh_cn&amp;#34;; 再到后台清除下缓存，OK。</description>
      <content:encoded><![CDATA[<p>第一步：</p>
<p>通过后台设置实现前台英文。</p>
<p>进入 后台 》系统设置 》商店设置 》基本设置，将系统语言选项设为 en_us ，确定保存。</p>
<p>第二步：</p>
<p>打开 <code>/admin/includes/init.php</code> 文件
找到</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>$_CFG <span style="color:#f92672">=</span> <span style="color:#a6e22e">load_config</span>(); <span style="color:#75715e">// 在它下面增加一行代码
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>$_CFG[<span style="color:#e6db74">&#39;lang&#39;</span>]<span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;zh_cn&#34;</span>;
</span></span></code></pre></div><p>再到后台清除下缓存，OK。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ecshop安装报错warning：date_default_timezone_get()</title>
      <link>https://w.toomore.us/posts/dev/ecshop%E5%AE%89%E8%A3%85%E6%8A%A5%E9%94%99warningdate_default_timezone_get/</link>
      <pubDate>Sun, 09 Feb 2014 16:31:07 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/ecshop%E5%AE%89%E8%A3%85%E6%8A%A5%E9%94%99warningdate_default_timezone_get/</guid>
      <description>今天安装 ECShop_V2.7.3_UTF8_release1106 时出现如下错误：
Warning: date_default_timezone_get(): It is not safe to rely on the system&amp;rsquo;s timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected &amp;lsquo;UTC&amp;rsquo; for &amp;lsquo;8.0/no DST&amp;rsquo; instead in F:\yolin_www\ecshop\install\includes\lib_installer.php on line 223
导致安装无法进行，然后谷歌度娘的问找到如下解决方法：
找到 php.ini 搜索 date.timezone 将前面的分号去掉，date.timezone = &amp;quot;Asia/Shanghai&amp;quot; ，设置时区。</description>
      <content:encoded><![CDATA[<p>今天安装 <code>ECShop_V2.7.3_UTF8_release1106</code> 时出现如下错误：</p>
<blockquote>
<p>Warning: date_default_timezone_get(): It is not safe to rely on the system&rsquo;s timezone settings. You are <em>required</em> to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected &lsquo;UTC&rsquo; for &lsquo;8.0/no DST&rsquo; instead in F:\yolin_www\ecshop\install\includes\lib_installer.php on line 223</p>
</blockquote>
<p>导致安装无法进行，然后谷歌度娘的问找到如下解决方法：</p>
<p>找到 <code>php.ini</code> 搜索 <code>date.timezone</code> 将前面的分号去掉，<code>date.timezone = &quot;Asia/Shanghai&quot; </code>，设置时区。</p>
<p>修改完以后重启web服务器即可。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>「转」程序员视角分析丰田刹车失灵事件</title>
      <link>https://w.toomore.us/posts/internet/%E7%A8%8B%E5%BA%8F%E5%91%98%E8%A7%86%E8%A7%92%E5%88%86%E6%9E%90%E4%B8%B0%E7%94%B0%E5%88%B9%E8%BD%A6%E5%A4%B1%E7%81%B5%E4%BA%8B%E4%BB%B6/</link>
      <pubDate>Wed, 06 Nov 2013 19:42:05 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/%E7%A8%8B%E5%BA%8F%E5%91%98%E8%A7%86%E8%A7%92%E5%88%86%E6%9E%90%E4%B8%B0%E7%94%B0%E5%88%B9%E8%BD%A6%E5%A4%B1%E7%81%B5%E4%BA%8B%E4%BB%B6/</guid>
      <description>【第一部分】背景简介 前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审，2007年一辆2005年凯美瑞暴冲（Unintended Acceleration，UA）致一死一伤事件中丰田被判有责。引起广泛关注的是庭审中主要证人Michael Barr的证词让陪审团同意丰田的动力系统软件存在巨大漏洞可能导致此类事件。这是丰田在同类事件中第一次被判有责。庭审过后丰田马上同意支付300万美元进入调解程序。
出于好奇，我漫不经心地下载了Barr的286页证词，却一下子被吸引住了。几天内读完，算是对这次事件进行了一次深入了解。下面就从外行角度总结一下这份证词并尝试以更简单的语言解释里面提到的暴冲原因以及丰田犯下的错误。
Barr的证词下载自他的个人博客Barr Code，但现在该文已经被删除。见2楼。
Michael Barr是谁？他是一位拥有20年以上行业经验的嵌入式系统工程师。在十八个月中，有12位嵌入式系统专家，包Barr，受原告诉讼团所托，被关在马里兰州一间高度保安的房间内对丰田动力控制系统软件（主要是2005年的凯美瑞）源代码进行深度审查。这房间没有英特网，没有手机信号，他们进出不能携带任何纸张、记录甚至皮带。最后的调查结果被写入一份800页，13章的详细报告。而鉴于保密协议，调查内容一直没有公布，直至俄克拉荷马这次庭审才首度部分公开（报告本身似乎还没公开）。
回到正题。丰田的软件有没有缺陷？根据Barr的调查，答案是有。这其实是废话，任何软件都会有缺陷，关键在于是什么样的缺陷。丰田的软件缺陷分为三类：
非常业余的结构设计 软件设计的基本要求是模块尽量简单化，因为这样可以一来更易于阅读二来更易于维护。但丰田的工程师显然没有遵循这原则。Barr使用一种工具自动根据代码的可能分支数量评估函数的复杂度，结果是丰田的软件中至少有67条函数复杂度超过50，意味着运行这个函数可能出现超过50种不同的执行结果，属于“非可测”级别。因为为了测试这50个不同的结果，必须准备至少50条不同的测试用例以及相应的文档，在生产环境中一般是不现实的。作为比较，Barr表示他自己的公司严格执行的其中一条规定就是任何代码复杂度不能超过30，否则不合格。而在这67条函数中还有12条复杂度超过100，达到“非可维护”级别，意味着一旦发现缺陷（Bug）也无法修复，因为实在太复杂，修复缺陷的过程中会产生新的缺陷。其中最复杂的一条函数有超过1300行代码，146个可能执行路径——正好用于根据各传感器数值计算节气门开关角度。
如果你不知道什么是节气门，那么这里我稍微解释一下。为了让内燃机运行，有三大要素：燃油、空气和点火时机。空气和燃油的混合物进入气缸，被火花塞在正确的时间点燃推动活塞并最终推动曲轴和车轮前进。在电喷技术发明以后直到2002年以前，三大要素的燃油和点火时间是由电子设备控制，节气门机械连接加速踏板，由司机直接控制。节气门大致是一个连接加速踏板的“空气龙头”——踩下去越多，“龙头”打开得越大，允许越多的空气进入发动机输出更大的动力。2002年以后，丰田引入的“电子油门”让电子系统掌管了最后一个要素：空气。加速踏板不再机械连接节气门，而是连接一些传感器，由行车电脑将这些传感器数值计算成节气门开启角度再由马达控制节气门。我们稍后会再讨论节气门开合。
极复杂的代码带来的是极复杂的功能。下面说一下被称为“厨房洗涤盆”的Task X。这里先解释一下，丰田的软件系统和很多别的软件系统一样，都是由一个统领程序（称之为“操作系统”）和若干小程序（称之为Task）组成。就好比电脑上跑的Windows是统领全局的操作系统，网络浏览器和记事本是跑在操作系统上的小程序。丰田的系统里每个Task都有自己的名字，但这些名字非常敏感，敏感到每次被提及的时候律师都要求法庭内的没有阅读代码权限的人全部清场。为了减少清场次数，Barr将这个最重要的小程序称为Task X。这个Task X有多重要呢？跟厨房里的洗涤盆一样重要。它负责非常多的事情，包括计算节气门开启角度、速度监测和保持、定速巡航监测等等。Task X的不正常运行被认为是暴冲事件的元凶。稍后会再继续讨论Task X。 还有一些别的匪夷所思的发现。比如丰田的软件包含了超过一万一千个全局变量。如果你不知道什么是全局变量，那么只需要知道软件设计的一般原则是要尽量少使用全局变量，因为有可能带来无法预测的结果。这里的“少”的意思是“尽量接近零”，绝对不会是一万一千个。
不符合软件开发规范 如同很多行业一样，汽车行业也有自己的规范。更具体一点，由于汽车的危险性质，汽车控制系统被划分为“安全关键性系统（Safety Critical System）”——说白了就是安全性非常重要，弄不好会死人的。为了达到这一特殊要求，汽车相关软件开发人员定期举行会议讨论并发布编程规范，称为MISRA C。该规范的2004年版的感谢列表里还能看到丰田员工的名字，至少让外界认为丰田确实也在遵循这些规范。
真的吗？根据源代码来看，答案是否定的。对此之前的NASA报告也有所提及，丰田辩称他们遵循的不是行业规范，而是丰田内部编程规范。这一规范与行业规范的吻合程度达到50%。但是Barr认为根据他的调查，两个规范之间吻合度小于10%，甚至有若干规范条目相互冲突。后来发现丰田的代码甚至没有遵循丰田内部规范，当然比起别的问题这个已经无关紧要了。
MISRA C拥有超过100条规范，NASA的调查只使用了到其中35条进行校对，发现超过7000处违规代码。Barr使用全部条目，对照结果是丰田的程序拥有超过80000处违规代码。
这些数字说明了什么？根据统计，违规数量可以用于预测代码中暗藏的缺陷（Bug）数量。在之前提到的汽车相关软件开发人员会议中，有人就这一主题发表过专题演讲，提出每30处违规代码可能包含一个重大缺陷和十个轻微缺陷。讽刺的是这人是丰田员工。
特别需要指出MISRA C其中一个规则的内容是不得使用递归。
如果你不知道什么是递归，那么这里我稍微解释一下。递归是一种计算方法。但一般计算方法要么是自己算，要么询问别的计算模块索要结果。而递归则是通过问一层层问自己的方法完成计算。好处是代码简单，坏处是计算层数不固定。可能会2层就出结果了，也可能会是10000层，在设计程序的时候无从得知。
软件计算需要消耗存储器。越繁琐、越长的计算自然需要占用越多的存储器。递归的问题在于其嵌套层数无法预测，从而导致可能消耗的存储器容量无法控制。稍后会再讨论存储器。
对关键变量缺乏保护。 什么是变量？变量就是存在一段存储器的0和1的集合。这些变量既可以是一些函数的处理结果，也可以是另一些函数的处理原材料。比方说前面提到有一条程序专门计算节气门开合角度，比如说是20度，这个20就是一个变量，存在存储器的一个指定位置。
另一个程序专门负责开合节气门，它知道去那个指定位置读取这个20，然后把节气门开启20度。
什么是保护？嵌入式系统，或者任何系统，都会在一定条件下发生硬件或者软件错误。客观上这是无法避免的。而且汽车作为一个时常在震动、发热、位移的系统，它的内部环境不能说不恶劣，发生硬件错误的可能性甚至更高。什么样的硬件错误呢？别忘了变量都是0和1的组合，这些0和1由存储器上的高低电平代表。由于某些不可抗原因，一个电平从高变成低，或者反过来，那么这个变量就被更改了。这被称为“位反转（Bit Flip）”。为了对抗这样的事情发生，需要对变量进行保护。保护的方法一般是镜像法。简单来说就是在两个不同的地方写入同一个变量，读取的时候两边都读，比较是不是一致。如果不一致，那么可以得知这个变量已经不可靠，需要进行容错处理。
丰田的程序总体上对其上万个变量进行了有效保护，但问题出在操作系统上。前面提到丰田的软件本质上分为操作系统和Task。Task是由丰田自己开发，但是操作系统则是由芯片供应商提供，固化在芯片里的。丰田在这里的过失是没有对供应商提供的代码进行深度审核，拿到什么用什么。
另一个保护措施是错误校验码（Error Detective and Correction Codes，EDAC）。这是一个硬件层面的数据保护措施。简而言之就是给内存中每一个字节（8比特）后面物理地增加几比特校验码。这样万一变量出错了，可以通过校验码得知，甚至可以通过校验码修复一些轻微错误。这个措施十分简单有效，但是在2005年款凯美瑞的系统中完全没有使用，丰田却告诉NASA他们用了。而在2008年款凯美瑞中使用了3比特长的EDAC。Barr认为是为了节省成本，否则应该使用5比特长。
还有值得一提的是，汽车相关的软件行业有那么几家操作系统供应商，早已形成了一套成熟标准称为OSEK。各供应商开发的符合OSEK认证的操作系统至少都能达到一定的质量。但丰田选用的操作系统却没有通过认证，让人不解。
现在我们知道丰田在编写软件的时候至少有三种缺陷。那么重点问题：丰田的这些软件缺陷是否会导致车辆暴冲？根据Barr的调查，答案是有可能。暴冲的起因需要结合上述三种缺陷来说明。
汽车正常运行需要倚靠若干程序（这里叫Task）的同时运作。Task有很多，CPU只有一块，在任何时刻只能处理一个Task，怎么办呢？这需要操作系统的统筹规划，合理分配CPU的任务，让每个Task都能按时执行。如果出现某种意外，让某个Task突然不执行了，那么就称为这个Task“死亡”。Task死了，自然不能执行它的任务。根据Barr的测试，在某些特定情况下，Task X的死亡可以导致节气门敞开——因为Task X的其中一个任务就是根据司机的操作计算节气门开合角度，它死了也就没法重新计算这个角度，即使司机把脚挪开加速踏板，节气门也无法关闭。此为暴冲的直接原因。更糟糕的是，节气门的开合角度这个数值，被Task X算出来以后保存在一个变量中。这个特定的变量正好没有被保护（缺陷3）。意味着万一Task X死亡并且停止计算，这个数值有可能因为不可抗原因被改变，而程序无从得知。
那么Task X为何会死亡呢？一般是因为内存出错。这个出错可能是一个小小的位反转，也可能是内存里的数值被别的程序错误覆盖。同一系统内同时运行了若干程序，这些程序需要共享一块内存，内存内部必然要被划分成若干块。比如第一块给程序1，第二块给程序2，等等。如果程序1因为某些原因（比如Bug）写到第二块内存上去，就会导致程序2读取了错误的信息。这就是所谓的内存出错。丰田的系统里，正好有这么两块相邻的内存块。第一块被称为“堆栈（Stack）”，这是所有Task存储它们运行状态的地方，大小为4KB。与之相邻的地方储存了操作系统进行任务分配的记录。那么可以想象，如果很多Task给堆栈里写入太多东西，超过4KB，那么就会错误地写入与之相邻的任务分配表。这种错误被称为“堆栈溢出”。操作系统拿到了错误的任务分配表，就会错误地分配任务，造成某些Task多执行几次，某些Task少执行几次，某些Task甚至就再也不执行——死了！必须指出的是，程序死亡并不罕见，甚至可以认为是正常现象。稍后解释处理方法。
那么堆栈为什么会溢出呢？显然是因为要写入的数据超过了堆栈的容量。在设计程序的时候要计算最坏的情况并且允许冗余。即使作出了正确的设计，这种错误也相对常见，所以NASA在他们的调查中重点排查堆栈溢出的可能性。于是NASA问丰田，丰田的回复是最坏的情况下4KB堆栈只写入了41%的数据，换句话说发生溢出的可能性非常低。NASA直接取信了这个数字并没有再深入调查。但Barr他们发现丰田的回答有严重低估，实际上最坏的情况会达到94%，而且还不算递归。丰田在代码中使用了递归（缺陷2）。因而实际数字有可能超过94%而且无法预计上限，因为递归计算的嵌套层数是无法预测的。所以实际情况下堆栈溢出的可能性相当可观。一旦溢出，相邻的任务分配表不可避免就会遭到破坏。此为暴冲的根本原因其中之一。之所以说“其中之一”，是因为堆栈溢出仅仅是损坏任务分配表的其中一个原因，别的还有许多可能性并没有被Barr在法庭上深入解释。而且任务分配表的损坏也仅仅是导致Task死亡的原因之一。
顺便提一句，2005年的凯美瑞的这部分供应商是电装，没有搭载堆栈实时监测功能——溢出了也不知道。同年的卡罗拉却搭载了，因为供应商是通用。
到这里我小结一下，串链子。左边是原因，右边是后果。
堆栈溢出→（可能导致）→任务分配表被改写→（可能导致）→Task X死亡→（可能导致）→节气门敞开→（导致）→汽车暴冲
必须指出的是，这条链子从最左边一直到Task X死亡，都还算是嵌入式系统的常见故障。虽然程序代码写得不好也许导致更容易出错，客观上丰田并没有特别大的过错。只要处理得当，这些故障都不会导致暴冲。
到此为止还只是前奏而已，接下来我们来看看丰田到底做错了什么。
【第二部分】丰田之罪 上面反复提到，嵌入式系统中内存出错或者程序死亡其实是一种正常现象——至少从Barr的证词可以得出这个结论——现在连我们都知道了，嵌入式工程师肯定比我们更清楚才对。确实，为了使系统正常运行不被错误干扰，一般的做法是设置若干层防护措施（Failsafe），让运行中出现的错误无法轻易突破，得到妥善处理。丰田的工程师自然也懂得这一点。很可惜，他们搞砸了。
上面那条链子应该修改成这样：
（防护措施0）→堆栈溢出→（防护措施1）→（可能导致）→任务分配表被改写→（防护措施2）→（可能导致）→Task X死亡→（防护措施3）→（可能导致）→节气门敞开→（防护措施4）→（导致）→汽车暴冲
可以看到，防护措施不可谓不多。只要处理得当，这链条应该是走不通的。现在让我们从左到右看一个小小的内存错误是如何一层层突破防护最终导致汽车暴冲的。
首先防护措施0： 这个其实上面提到了，因为设计缺陷低估了最大占用的存储容量，并且不符合规范地使用了递归，最终可能导致堆栈溢出。
然后到防护措施1： 上面也提到了，任务分配表紧邻堆栈。作为外行我都觉得这是个十分危险的设计——既然堆栈这么容易溢出，好歹应该将任务分配表放远一点啊。当然我是外行，可能实际上比想象中复杂很多。这段Barr的证词中并未特别提到，属于我的个人理解。</description>
      <content:encoded><![CDATA[<h2 id="第一部分背景简介">【第一部分】背景简介</h2>
<p>前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审，2007年一辆2005年凯美瑞暴冲（Unintended Acceleration，UA）致一死一伤事件中丰田被判有责。引起广泛关注的是庭审中主要证人Michael Barr的证词让陪审团同意丰田的动力系统软件存在巨大漏洞可能导致此类事件。这是丰田在同类事件中第一次被判有责。庭审过后丰田马上同意支付300万美元进入调解程序。</p>
<p>出于好奇，我漫不经心地下载了Barr的286页证词，却一下子被吸引住了。几天内读完，算是对这次事件进行了一次深入了解。下面就从外行角度总结一下这份证词并尝试以更简单的语言解释里面提到的暴冲原因以及丰田犯下的错误。</p>
<p>Barr的证词下载自他的个人博客Barr Code，但现在该文已经被删除。见2楼。</p>
<p>Michael Barr是谁？他是一位拥有20年以上行业经验的嵌入式系统工程师。在十八个月中，有12位嵌入式系统专家，包Barr，受原告诉讼团所托，被关在马里兰州一间高度保安的房间内对丰田动力控制系统软件（主要是2005年的凯美瑞）源代码进行深度审查。这房间没有英特网，没有手机信号，他们进出不能携带任何纸张、记录甚至皮带。最后的调查结果被写入一份800页，13章的详细报告。而鉴于保密协议，调查内容一直没有公布，直至俄克拉荷马这次庭审才首度部分公开（报告本身似乎还没公开）。</p>
<p>回到正题。丰田的软件有没有缺陷？根据Barr的调查，答案是有。这其实是废话，任何软件都会有缺陷，关键在于是什么样的缺陷。丰田的软件缺陷分为三类：</p>
<h3 id="非常业余的结构设计">非常业余的结构设计</h3>
<p>软件设计的基本要求是模块尽量简单化，因为这样可以一来更易于阅读二来更易于维护。但丰田的工程师显然没有遵循这原则。Barr使用一种工具自动根据代码的可能分支数量评估函数的复杂度，结果是丰田的软件中至少有67条函数复杂度超过50，意味着运行这个函数可能出现超过50种不同的执行结果，属于“非可测”级别。因为为了测试这50个不同的结果，必须准备至少50条不同的测试用例以及相应的文档，在生产环境中一般是不现实的。作为比较，Barr表示他自己的公司严格执行的其中一条规定就是任何代码复杂度不能超过30，否则不合格。而在这67条函数中还有12条复杂度超过100，达到“非可维护”级别，意味着一旦发现缺陷（Bug）也无法修复，因为实在太复杂，修复缺陷的过程中会产生新的缺陷。其中最复杂的一条函数有超过1300行代码，146个可能执行路径——正好用于根据各传感器数值计算节气门开关角度。</p>
<p>如果你不知道什么是节气门，那么这里我稍微解释一下。为了让内燃机运行，有三大要素：燃油、空气和点火时机。空气和燃油的混合物进入气缸，被火花塞在正确的时间点燃推动活塞并最终推动曲轴和车轮前进。在电喷技术发明以后直到2002年以前，三大要素的燃油和点火时间是由电子设备控制，节气门机械连接加速踏板，由司机直接控制。节气门大致是一个连接加速踏板的“空气龙头”——踩下去越多，“龙头”打开得越大，允许越多的空气进入发动机输出更大的动力。2002年以后，丰田引入的“电子油门”让电子系统掌管了最后一个要素：空气。加速踏板不再机械连接节气门，而是连接一些传感器，由行车电脑将这些传感器数值计算成节气门开启角度再由马达控制节气门。我们稍后会再讨论节气门开合。</p>
<p>极复杂的代码带来的是极复杂的功能。下面说一下被称为“厨房洗涤盆”的Task X。这里先解释一下，丰田的软件系统和很多别的软件系统一样，都是由一个统领程序（称之为“操作系统”）和若干小程序（称之为Task）组成。就好比电脑上跑的Windows是统领全局的操作系统，网络浏览器和记事本是跑在操作系统上的小程序。丰田的系统里每个Task都有自己的名字，但这些名字非常敏感，敏感到每次被提及的时候律师都要求法庭内的没有阅读代码权限的人全部清场。为了减少清场次数，Barr将这个最重要的小程序称为Task X。这个Task X有多重要呢？跟厨房里的洗涤盆一样重要。它负责非常多的事情，包括计算节气门开启角度、速度监测和保持、定速巡航监测等等。Task X的不正常运行被认为是暴冲事件的元凶。稍后会再继续讨论Task X。
还有一些别的匪夷所思的发现。比如丰田的软件包含了超过一万一千个全局变量。如果你不知道什么是全局变量，那么只需要知道软件设计的一般原则是要尽量少使用全局变量，因为有可能带来无法预测的结果。这里的“少”的意思是“尽量接近零”，绝对不会是一万一千个。</p>
<h3 id="不符合软件开发规范">不符合软件开发规范</h3>
<p>如同很多行业一样，汽车行业也有自己的规范。更具体一点，由于汽车的危险性质，汽车控制系统被划分为“安全关键性系统（Safety Critical System）”——说白了就是安全性非常重要，弄不好会死人的。为了达到这一特殊要求，汽车相关软件开发人员定期举行会议讨论并发布编程规范，称为MISRA C。该规范的2004年版的感谢列表里还能看到丰田员工的名字，至少让外界认为丰田确实也在遵循这些规范。</p>
<p>真的吗？根据源代码来看，答案是否定的。对此之前的NASA报告也有所提及，丰田辩称他们遵循的不是行业规范，而是丰田内部编程规范。这一规范与行业规范的吻合程度达到50%。但是Barr认为根据他的调查，两个规范之间吻合度小于10%，甚至有若干规范条目相互冲突。后来发现丰田的代码甚至没有遵循丰田内部规范，当然比起别的问题这个已经无关紧要了。</p>
<p>MISRA C拥有超过100条规范，NASA的调查只使用了到其中35条进行校对，发现超过7000处违规代码。Barr使用全部条目，对照结果是丰田的程序拥有超过80000处违规代码。</p>
<p>这些数字说明了什么？根据统计，违规数量可以用于预测代码中暗藏的缺陷（Bug）数量。在之前提到的汽车相关软件开发人员会议中，有人就这一主题发表过专题演讲，提出每30处违规代码可能包含一个重大缺陷和十个轻微缺陷。讽刺的是这人是丰田员工。</p>
<p>特别需要指出MISRA C其中一个规则的内容是不得使用递归。</p>
<p>如果你不知道什么是递归，那么这里我稍微解释一下。递归是一种计算方法。但一般计算方法要么是自己算，要么询问别的计算模块索要结果。而递归则是通过问一层层问自己的方法完成计算。好处是代码简单，坏处是计算层数不固定。可能会2层就出结果了，也可能会是10000层，在设计程序的时候无从得知。</p>
<p>软件计算需要消耗存储器。越繁琐、越长的计算自然需要占用越多的存储器。递归的问题在于其嵌套层数无法预测，从而导致可能消耗的存储器容量无法控制。稍后会再讨论存储器。</p>
<h3 id="对关键变量缺乏保护">对关键变量缺乏保护。</h3>
<p>什么是变量？变量就是存在一段存储器的0和1的集合。这些变量既可以是一些函数的处理结果，也可以是另一些函数的处理原材料。比方说前面提到有一条程序专门计算节气门开合角度，比如说是20度，这个20就是一个变量，存在存储器的一个指定位置。</p>
<p>另一个程序专门负责开合节气门，它知道去那个指定位置读取这个20，然后把节气门开启20度。</p>
<p>什么是保护？嵌入式系统，或者任何系统，都会在一定条件下发生硬件或者软件错误。客观上这是无法避免的。而且汽车作为一个时常在震动、发热、位移的系统，它的内部环境不能说不恶劣，发生硬件错误的可能性甚至更高。什么样的硬件错误呢？别忘了变量都是0和1的组合，这些0和1由存储器上的高低电平代表。由于某些不可抗原因，一个电平从高变成低，或者反过来，那么这个变量就被更改了。这被称为“位反转（Bit Flip）”。为了对抗这样的事情发生，需要对变量进行保护。保护的方法一般是镜像法。简单来说就是在两个不同的地方写入同一个变量，读取的时候两边都读，比较是不是一致。如果不一致，那么可以得知这个变量已经不可靠，需要进行容错处理。</p>
<p>丰田的程序总体上对其上万个变量进行了有效保护，但问题出在操作系统上。前面提到丰田的软件本质上分为操作系统和Task。Task是由丰田自己开发，但是操作系统则是由芯片供应商提供，固化在芯片里的。丰田在这里的过失是没有对供应商提供的代码进行深度审核，拿到什么用什么。</p>
<p>另一个保护措施是错误校验码（Error Detective and Correction Codes，EDAC）。这是一个硬件层面的数据保护措施。简而言之就是给内存中每一个字节（8比特）后面物理地增加几比特校验码。这样万一变量出错了，可以通过校验码得知，甚至可以通过校验码修复一些轻微错误。这个措施十分简单有效，但是在2005年款凯美瑞的系统中完全没有使用，丰田却告诉NASA他们用了。而在2008年款凯美瑞中使用了3比特长的EDAC。Barr认为是为了节省成本，否则应该使用5比特长。</p>
<p>还有值得一提的是，汽车相关的软件行业有那么几家操作系统供应商，早已形成了一套成熟标准称为OSEK。各供应商开发的符合OSEK认证的操作系统至少都能达到一定的质量。但丰田选用的操作系统却没有通过认证，让人不解。</p>
<p>现在我们知道丰田在编写软件的时候至少有三种缺陷。那么重点问题：丰田的这些软件缺陷是否会导致车辆暴冲？根据Barr的调查，答案是有可能。暴冲的起因需要结合上述三种缺陷来说明。</p>
<p>汽车正常运行需要倚靠若干程序（这里叫Task）的同时运作。Task有很多，CPU只有一块，在任何时刻只能处理一个Task，怎么办呢？这需要操作系统的统筹规划，合理分配CPU的任务，让每个Task都能按时执行。如果出现某种意外，让某个Task突然不执行了，那么就称为这个Task“死亡”。Task死了，自然不能执行它的任务。根据Barr的测试，在某些特定情况下，Task X的死亡可以导致节气门敞开——因为Task X的其中一个任务就是根据司机的操作计算节气门开合角度，它死了也就没法重新计算这个角度，即使司机把脚挪开加速踏板，节气门也无法关闭。此为暴冲的直接原因。更糟糕的是，节气门的开合角度这个数值，被Task X算出来以后保存在一个变量中。这个特定的变量正好没有被保护（缺陷3）。意味着万一Task X死亡并且停止计算，这个数值有可能因为不可抗原因被改变，而程序无从得知。</p>
<p>那么Task X为何会死亡呢？一般是因为内存出错。这个出错可能是一个小小的位反转，也可能是内存里的数值被别的程序错误覆盖。同一系统内同时运行了若干程序，这些程序需要共享一块内存，内存内部必然要被划分成若干块。比如第一块给程序1，第二块给程序2，等等。如果程序1因为某些原因（比如Bug）写到第二块内存上去，就会导致程序2读取了错误的信息。这就是所谓的内存出错。丰田的系统里，正好有这么两块相邻的内存块。第一块被称为“堆栈（Stack）”，这是所有Task存储它们运行状态的地方，大小为4KB。与之相邻的地方储存了操作系统进行任务分配的记录。那么可以想象，如果很多Task给堆栈里写入太多东西，超过4KB，那么就会错误地写入与之相邻的任务分配表。这种错误被称为“堆栈溢出”。操作系统拿到了错误的任务分配表，就会错误地分配任务，造成某些Task多执行几次，某些Task少执行几次，某些Task甚至就再也不执行——死了！必须指出的是，程序死亡并不罕见，甚至可以认为是正常现象。稍后解释处理方法。</p>
<p>那么堆栈为什么会溢出呢？显然是因为要写入的数据超过了堆栈的容量。在设计程序的时候要计算最坏的情况并且允许冗余。即使作出了正确的设计，这种错误也相对常见，所以NASA在他们的调查中重点排查堆栈溢出的可能性。于是NASA问丰田，丰田的回复是最坏的情况下4KB堆栈只写入了41%的数据，换句话说发生溢出的可能性非常低。NASA直接取信了这个数字并没有再深入调查。但Barr他们发现丰田的回答有严重低估，实际上最坏的情况会达到94%，而且还不算递归。丰田在代码中使用了递归（缺陷2）。因而实际数字有可能超过94%而且无法预计上限，因为递归计算的嵌套层数是无法预测的。所以实际情况下堆栈溢出的可能性相当可观。一旦溢出，相邻的任务分配表不可避免就会遭到破坏。此为暴冲的根本原因其中之一。之所以说“其中之一”，是因为堆栈溢出仅仅是损坏任务分配表的其中一个原因，别的还有许多可能性并没有被Barr在法庭上深入解释。而且任务分配表的损坏也仅仅是导致Task死亡的原因之一。</p>
<p>顺便提一句，2005年的凯美瑞的这部分供应商是电装，没有搭载堆栈实时监测功能——溢出了也不知道。同年的卡罗拉却搭载了，因为供应商是通用。</p>
<p>到这里我小结一下，串链子。左边是原因，右边是后果。</p>
<p>堆栈溢出→（可能导致）→任务分配表被改写→（可能导致）→Task X死亡→（可能导致）→节气门敞开→（导致）→汽车暴冲</p>
<p>必须指出的是，这条链子从最左边一直到Task X死亡，都还算是嵌入式系统的常见故障。虽然程序代码写得不好也许导致更容易出错，客观上丰田并没有特别大的过错。只要处理得当，这些故障都不会导致暴冲。</p>
<p>到此为止还只是前奏而已，接下来我们来看看丰田到底做错了什么。</p>
<h2 id="第二部分丰田之罪">【第二部分】丰田之罪</h2>
<p>上面反复提到，嵌入式系统中内存出错或者程序死亡其实是一种正常现象——至少从Barr的证词可以得出这个结论——现在连我们都知道了，嵌入式工程师肯定比我们更清楚才对。确实，为了使系统正常运行不被错误干扰，一般的做法是设置若干层防护措施（Failsafe），让运行中出现的错误无法轻易突破，得到妥善处理。丰田的工程师自然也懂得这一点。很可惜，他们搞砸了。</p>
<p>上面那条链子应该修改成这样：</p>
<p>（防护措施0）→堆栈溢出→（防护措施1）→（可能导致）→任务分配表被改写→（防护措施2）→（可能导致）→Task X死亡→（防护措施3）→（可能导致）→节气门敞开→（防护措施4）→（导致）→汽车暴冲</p>
<p>可以看到，防护措施不可谓不多。只要处理得当，这链条应该是走不通的。现在让我们从左到右看一个小小的内存错误是如何一层层突破防护最终导致汽车暴冲的。</p>
<h3 id="首先防护措施0">首先防护措施0：</h3>
<p>这个其实上面提到了，因为设计缺陷低估了最大占用的存储容量，并且不符合规范地使用了递归，最终可能导致堆栈溢出。</p>
<h3 id="然后到防护措施1">然后到防护措施1：</h3>
<p>上面也提到了，任务分配表紧邻堆栈。作为外行我都觉得这是个十分危险的设计——既然堆栈这么容易溢出，好歹应该将任务分配表放远一点啊。当然我是外行，可能实际上比想象中复杂很多。这段Barr的证词中并未特别提到，属于我的个人理解。</p>
<h3 id="防护措施2">防护措施2：</h3>
<p>从这里开始丰田的错误越发严重。任务表被改写导致某些Task运行异常，在软件层应该有若干检测措施，比方说用特殊的监视Task来监视别的Task是否正常。但丰田是怎么做的呢？还记得上面的“厨房洗涤盆”Task X吗？它是如此复杂（缺陷1），除了控制汽车运行的任务之外竟然还兼任大部分的监视任务，比如生成DTC。</p>
<p>DTC（diagnostic trouble codes），是汽车电脑系统会根据情况生成的错误代码。有的车主可能会遇到汽车某报警灯常亮，修车师傅拿个仪器插在行车电脑上得出一个代码，再查表就知道哪个元件坏了——这就是DTC。除了用于修车，DTC还被用于检测行车电脑和各传感器的异常状态。</p>
<p>可以想象，这个既是运动员又是裁判的Task X一旦死亡，软件层的检测措施大部分就失效了。</p>
<h3 id="防护措施3">防护措施3：</h3>
<p>在这里丰田的错误开始到达顶峰。即使设置正确无误，上面提到的监视Task也只不过是另一个Task而已，与它的监视对象算是平级——监视Task自己同样有可能出现故障。嵌入式系统的一般做法是在所有程序之上再设置一道屏障，被称为“看门狗（Watchdog）”。所谓看门狗，是一个优先级很高的倒计时程序。别的程序需要在运行的时候特意去重置一下这个计时器让它重新开始倒计时，这个动作被称为“喂狗”。如果因为程序出问题太长时间不喂狗，倒计时完成，看门狗知道什么地方卡住了，马上采取措施，比如重启整个系统。重启系统听起来似乎很严重，实际上却是一件相当普通的事情。嵌入式系统的重启非常快，时速100公里的汽车中动力系统可以在半米之内完成重启——车上的人根本觉察不到。</p>
<p>通过阅读代码和拟真实验，Barr惊讶地发现上述嵌入式系统的常识性做法竟然在丰田软件系统内不存在！丰田的软件确实有一只看门狗，但它竟然不是用于监视Task异常，而是用于防止CPU过载。首先这个做法不能说后无来者至少算是前无古人。还记得上面提到的800页13章的报告吗？目瞪口呆的Barr将丰田看门狗的分析结果写入了报告的第一章，因为他实在太震惊。其次，丰田看门狗的防止CPU过载功能也相当蹩脚，在拟真测试发现即使它正常工作，还是会允许CPU过载时间长达1.5秒——时速100公里的车能跑40米以上。CPU一旦过载，就会导致所有的Task进入一种“假死”状态，无法处理信息，这时司机无法控制汽车动力，十分危险。</p>
<p>另外，丰田的工程师还犯了一个嵌入式课堂上被反复提到的经典错误：使用硬件时钟中断喂狗。硬件中断拥有非常高的优先级，即使Task卡住（比如出现死循环）也不能阻止硬件中断——可想而知这样一来看门狗就等于完全白瞎了。</p>
<p>这里也提一句，同年的普锐斯却令人意外地搭载了一只运作正常的看门狗，反而让人摸不着头脑。</p>
<p>还没完。这一层防护是嵌入式系统的关键阵地。前面都是电子系统，后面马上进入机械运作，足以造成灾难了。所以仅仅拥有软件级别的防护还不足够，丰田的做法是在主CPU之外单独设置了一块监视芯片，从硬件级别对系统的运作进行监视。监视芯片有两个任务。</p>
<p>第一，它运行一种叫做系统卫士（System Guard）的程序，原理上来说是专门用于防止暴冲。主CPU和监视芯片上都会运行系统卫士，可是研究发现Task X一旦死亡，这些系统卫士统统都不起作用了。</p>
<p>第二，它运行一个被称为“刹车回声检查（Brake Echo Check）”的程序。这个程序从代码上来看似乎可以检测出Task X的死亡，并且采取相应措施：关闭节气门。听起来像是好消息，但是同样有问题：首先这个程序不太可靠，即使正常运行，理论上也有失效的可能。最关键的是该程序不会自动运行，需要司机先对刹车踏板有“动作”才会触发。注意这里我特意没用“踩刹车”这个词，因为根据分析“触发动作”十分令人困惑。它分两种情况：如果Task X死亡的那一刻司机的脚不在刹车踏板上，那么触发动作是踩刹车。还算可以理解。另一种情况，如果Task X死亡那一刻司机的脚踩在刹车踏板上，那么触发动作是完全释放刹车踏板。</p>
<p>没错，察觉车子在不正常加速的司机需要停止踩刹车才能让控制系统关闭节气门！这种违背人类认知的行为应该不是丰田工程师特意设计的。如果是，他们到底在想什么啊？</p>
<p>到此为止，上面提到的都算是“战术层面”的错误，都是“小错”。在讲解这块监视芯片的时候，可以发现丰田犯下最严重的“战略层面”错误——基础设计。Barr认为，如果基础设计正确，上述那些小错都完全不会导致汽车暴冲——不管代码写得多业余，不管内存错误多严重，不管Task死得多频繁，统统不会致命。让我们回到2002年以前，没有电子油门的时候。那时候的拉线油门是由油门踏板机械连接的。当驾驶员的右脚踩下刹车，他的右脚必然不在油门踏板上，节气门自然而然地被关闭。这个动作如此自然，甚至算不上安全措施，仅仅因为每人只有一只右脚，不可能同时踩油门和刹车。当丰田设计电子油门的时候，只要稍微有点常识，都应该从设计阶段就将这一“自然而然”发生的动作考虑进去。但是很显然，他们没这么做。监视芯片上运行的代码是用汇编语言（一种更加接近机器执行代码，远离人类语言，更加难懂的编程语言）编写的，运行层次比主CPU的C语言更低。Barr认为如果设计得当，现有的监视芯片完全有能力胜任上述功能，需要的仅仅是几百行代码，别的什么都不用更改——不会提高任何生产成本。很遗憾，他们没有做到。</p>
<h3 id="防护措施4">防护措施4：</h3>
<p>现在已经脱离电子系统，节气门已经敞开，发动机全速运转，需要使用机械运作来阻止机械运作了。如何让向前冲的车子停下来？不开车的人都知道，刹车！现代汽车都装备了刹车助力，助力来自于发动机运转的时候产生的负压。我们知道发动机需要吸入空气，吸入体积等于排气量乘以转速。节气门又是用来阻挡空气的，那么节气门关闭而发动机转速相对高的时候（比如高速丢油门），发动机的实际空气吸入量比它能吸入的体积要少，那么从节气门到气缸进气口之间会形成明显低气压（所谓负压，比大气压力小）。刹车助力就是利用了这个负压推动气鼓产生更大的推力带动刹车片抓紧刹车盘。但是如果节气门敞开让空气随便进来，低气压就不存在了，这时刹车助力大大减弱，刹车效率也大大降低。这就是为什么暴冲事件当事人都说全油门的时候根本刹不住的重要原因。这个现象称为“真空损失（Vacuum Loss）”，存在于所有自然吸气的汽油发动机汽车（柴油和增压发动机没影响），不算丰田的错。但丰田迟迟不搭载刹车优先系统（Brake Override System）允许刹车的同时敞开节气门，毫无疑问是这个现象的帮凶。</p>
<p>所谓刹车优先系统，指的是保证同时踩下刹车油门两个踏板的时候无条件关闭节气门的功能。这么做很显然主要是为了降低发动机输出，同时也保证刹车助力。丰田在2010年的凯美瑞上终于搭载了刹车优先系统，但是别高兴得太早。根据Barr的调查，丰田竟然将如此重要的修改“理所当然”地写入了他们的“厨房洗涤盆”——Task X。我只能“哑然失笑，扼腕叹息”。</p>
<p>好了，到此为止都还是Barr的一面之词，而且大部分都是在那间守卫森严的房间内进行拟真测试得出的“理论结果”。那么实车测试情况如何呢？丰田对Barr的证词如何反驳呢？</p>
<p>先说说实车测试。为了证明理论，他们把2008年和2005年的凯美瑞放在马力机上，固定车身架起前轮模拟车辆运行情况。他们的做法是首先让车子运行在时速68英里（110公里），启动巡航，脚离开油门踏板。然后暂停巡航，速度开始下降。下降到一定程度恢复巡航，速度开始上升。在到达68英里的设定时速以前，他们用一台连接行车电脑的笔记本“注入”错误。所谓注入错误，就是人为地反转一个特定比特——将0改成1，或者反过来——模拟内存损坏。结果完全符合理论，时速超过68英里也不停止加速，直至时速90英里（145公里），测试人员踩下刹车。大约1秒以后节气门被关闭，Barr认为这是上述“刹车回声检查”的功劳。</p>
<p>实车测试证明了Barr的理论，却并不是全无破绽。丰田辩护律师就两点提出质疑：</p>
<p>实车测试使用人工注入错误的方法，并不能证明现实中这种错误就一定会发生。</p>
<p>对此Barr的回答是测试的局限性。因为测试时间、样本有限，而待测试的样本空间无穷大。如果要等待那个特定的错误自然出现，可能需要成百万上亿小时的不间断测试，显然是不现实的。更何况从科学上而言，没有办法对这个错误证伪——就好比无法证明宇宙里没有外星人，最多只能证明火星上找不到而已。但是这个测试足以证明一个小小的位反转确实可以突破重重障碍最终导致暴冲，足以证明丰田的软件存在不能容忍的隐患。</p>
<p>Bookout女士（本案原告）声称，在她驾驶汽车离开高速的时候发现不受控加速，她拼命反复踩下刹车并且拉起手刹，现场留下了刹车痕迹。但并没有迹象表明发动机动力中断——换言之“刹车回声检测”没起作用。暗指Barr的理论站不住。</p>
<p>对此Barr的回答是首先尽管在实车测试中每次都生效，但代码分析表明“刹车回声检查”这一功能在理论上靠不住。其次这一功能的另外一个触发动作是要让脚完完全全离开刹车踏板。试想车子正在不受控地往前冲，任何人都会不由自主地踩刹车，让人完全不踩刹车踏板根本就是违背认知的。Bookout女士即使如同她所称反复踩刹车，很可能只是一直将脚放在踏板上往复运动，从未完全挪开。Barr还引用一位丰田自己的软件专家的证词。该专家承认，如果发生暴冲的时刻脚正好接触到刹车踏板，并且之后一直没挪开，那么汽车的暴冲距离“取决于还剩多少汽油”。</p>
<p>最后顺带说一下那份800页，13章的详细报告完成后，Barr将其提交给了丰田的软件部门，等待他们的反驳。最终结果是“非常少（Very little）”，13章中的11章，包括堆栈溢出的部分、代码混乱的部分、违反开发规范的部分、Task X过于臃肿甚至兼任节气门控制和防护措施的部分、看门狗形同虚设的部分、无EDAC的部分、重要变量缺乏保护的部分、使用了非标准化操作系统的部分，全部没受到任何形式的反驳。</p>
<h2 id="第三部分后记">【第三部分】后记</h2>
<p>写到这里，谈谈人们比较关心的几点。当然还是外行眼光。</p>
<p>NASA / NHTSA怎么没发现这些问题？</p>
<blockquote>
<p>NHTSA本身不具备检验电子系统的能力，于是委托NASA。NASA检验的是整个电控系统，包括电控传动部分，范围比较宽，只有很少一部分资源被用于检验软件系统，也没有投入足够的人力进行逐行代码审阅。更何况在很多关键问题，比如之前提到的EDAC的使用、堆栈的设计，NASA都直接采信丰田的回复，最终被证明不正确。甚至NASA从来都没拿到过监视芯片的源代码，丰田的说法是“他们没说要啊”。NASA报告虽然没能找到软件系统导致暴冲的确切原因，但没有否定其可能性。与之相比Barr的团队全部都是嵌入式系统专家，投入上千小时，深入程度甚至超过丰田自身对这个系统的理解（比如丰田没看过供应商的OS代码，Barr看了）。</p>
</blockquote>
<p>能否100%确定本案就是由软件错误造成的？</p>
<blockquote>
<p>不能。并没有直接证据。诉讼团认为，软件错误造成该事故的可能性比软件错误没造成该事故的可能性大（原文：more likely than not）。</p>
</blockquote>
<p>这里再提一句，2005年款的凯美瑞没有搭载行车数据记录器（俗称“黑盒子”），后来的车款渐渐开始搭载。但是Barr发现这个记录功能并不可靠，完全有可能记录错误信息。比如司机踩刹车了可能会被记录成没踩。</p>
<h3 id="本案的意义">本案的意义</h3>
<p>之前虽然丰田赔了不少钱，但是从未在涉及人身伤害的案件上承责。所以本案意义在于开先例。美国的法律又特别注重先例，今后丰田的法务部门要头疼了。</p>
<p>本案提到的有缺陷软件涉及了哪些车型？</p>
<blockquote>
<p>全部是美国的车型。Barr的调查重点是2005年款凯美瑞，另外审阅过的包括雷克萨斯ES、Tacoma、卡罗拉和普锐斯等等，生产年份大致在2002年（电子油门元年）与2010年之间。其中凯美瑞、雷克萨斯ES和Tacoma使用的软件系统大致接近（原文：Substantially similar）。另外根据统计，汽车暴冲投诉中与2004年款以后的凯美瑞有关的案件数量激增400%。</p>
</blockquote>
<p>太可怕了，这（丰田）车还能开吗？</p>
<blockquote>
<p>我认为不必过度惊恐。首先暴冲事故的出现可能性还是相当低的，有许多案例都被证实是司机操作错误。再者本案也没能直接证明软件缺陷肯定就是暴冲事故原因。万一真的出现暴冲也不是无法挽救，证词中提及了驾驶员使用N档或者P档成功脱险的案例。但是今后有必要留个心眼，注意一下车的档位切换，开车时集中精神对路况进行预判，出现情况的时候冷静应对。要不也可以试试Barr的发现：全部丢掉刹车然后再踩（汗）。</p>
</blockquote>
<p>最后的最后，放上本案关键证人Michael Barr的独家访谈：</p>
<p>我：这么看来似乎手动档汽车更安全，你怎么认为？</p>
<p>Barr：很多专家都这么认为，离合器至少可以物理断开动力系统。但是我翻阅卷宗，发现其中有个案例是受害者开手动档凯美瑞载着家人，突然巡航系统失灵，无法取消。他踩下离合，同时试图躲避前方慢速车辆结果失控冲出路面造成单车事故。幸运的是没死人。</p>
<p>我：现在我们都知道丰田的软件很糟糕。可是你对整个汽车行业的软件水平有什么看法？丰田的软件在同行内属于什么水平？</p>
<p>Barr：我没有接触过丰田以外的软件代码。但是请注意，这次发现的最严重问题是丰田在设计源头上没有考虑安全，软件质量反倒没有那么重要。只要一个安全为先的设计，比如刹车和关闭节气门的可靠互动、防止节气门开启降低刹车效率的机制等等，不管软件有多差劲也不会造成致命结果。只是我真不知道软件还能怎么差。</p>
<p>我：终极问题，你开什么车？</p>
<p>Barr：我不开丰田。接触该案以来我没买过新车。老实说我现在非常害怕买新车。我倒是问过一个与车企斗争了三十多年的职业律师同样的问题，他开宝马。</p>
<p>【全文完】</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>1970年1月1日（00:00:00 GMT）Unix时间戳（Unix Timestamp）</title>
      <link>https://w.toomore.us/posts/dev/1970%E5%B9%B41%E6%9C%881%E6%97%A5000000-gmtunix%E6%97%B6%E9%97%B4%E6%88%B3unix-timestamp/</link>
      <pubDate>Mon, 04 Nov 2013 20:42:19 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/dev/1970%E5%B9%B41%E6%9C%881%E6%97%A5000000-gmtunix%E6%97%B6%E9%97%B4%E6%88%B3unix-timestamp/</guid>
      <description>今天在看 Python API 时，看到time模块:
The epoch is the point where the time starts. On January 1st of that year, at 0 hours,the “time since the epoch” is zero. For Unix, the epoch is 1970. To find out what the epoch is, look at gmtime(0).
定义time从1970年1月1日开始，忽然想到在JAVA里，Oracle数据库时间也是从1970年1月1日开始计算。
比如java类代码:
Date date = new Date(0); System.out.println(date); 打印出来的结果:
Thu Jan 01 08:00:00 CST 1970
也是1970年1月1日，实际上时分秒是0点0分0秒(这里打印出来是8点，稍后会作解释)。
为什么这个时间会定义在1970年1月1日这个时候呢?
于是开始了Google，中文网页根本找不到答案。于是试着搜索英文关键字,在 Sun java 论坛总算找到准确的帖子:
http://forums.sun.com/thread.jspa?threadID=595140&amp;amp;start=15
其中有一个回复:
I suspect that Java was born and raised on a UNIX system.</description>
      <content:encoded><![CDATA[<p>今天在看 Python API 时，看到time模块:</p>
<blockquote>
<p>The epoch is the point where the time starts. On January 1st of that year, at 0 hours,the “time since the epoch” is zero. For Unix, the epoch is 1970. To find out what the epoch is, look at gmtime(0).</p>
</blockquote>
<p>定义time从1970年1月1日开始，忽然想到在JAVA里，Oracle数据库时间也是从1970年1月1日开始计算。</p>
<p>比如java类代码:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>Date date <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> Date(0);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>System.<span style="color:#a6e22e">out</span>.<span style="color:#a6e22e">println</span>(date);
</span></span></code></pre></div><p>打印出来的结果:</p>
<p>Thu Jan 01 08:00:00 CST 1970</p>
<p>也是1970年1月1日，实际上时分秒是0点0分0秒(这里打印出来是8点，稍后会作解释)。</p>
<p>为什么这个时间会定义在1970年1月1日这个时候呢?</p>
<p>于是开始了Google，中文网页根本找不到答案。于是试着搜索英文关键字,在 Sun java 论坛总算找到准确的帖子:</p>
<p><a href="http://forums.sun.com/thread.jspa?threadID=595140&amp;start=15">http://forums.sun.com/thread.jspa?threadID=595140&amp;start=15</a></p>
<p>其中有一个回复:</p>
<blockquote>
<p>I suspect that Java was born and raised on a UNIX system.
UNIX considers the epoch (when did time begin) to be midnight, January 1, 1970.</p>
</blockquote>
<p>是说java起源于UNIX系统，而UNIX认为1970年1月1日0点是时间纪元.</p>
<p>但这依然没很好的解释&quot;为什么&quot;,出于好奇，继续Google，总算找到了答案:</p>
<p><a href="http://en.wikipedia.org/wiki/Unix_time">http://en.wikipedia.org/wiki/Unix_time</a></p>
<p>这里的解释是:</p>
<p>最初计算机操作系统是32位，而时间也是用32位表示。</p>
<blockquote>
<p>System.out.println(Integer.MAX_VALUE);<br>
2147483647</p>
</blockquote>
<p>Integer在JAVA内用32位表示，因此32位能表示的最大值是2147483647。另外1年365天的总秒数是31536000，2147483647/31536000 = 68.1,也就是说32位能表示的最长时间是68年，而实际上到2038年01月19日03时14分07秒，便会到达最大时间，过了这个时间点，所有32位操作系统时间便会变为10000000 00000000 00000000 00000000也就是1901年12月13日20时45分52秒，这样便会出现时间回归的现象，很多软件便会运行异常了。</p>
<p>到这里，我想问题的答案已经出来了:</p>
<p>因为用32位来表示时间的最大间隔是68年，而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间)，而java自然也遵循了这一约束。</p>
<p>至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决，因为用64位操作系统可以表示到292,277,026,596年12月4日15时30分08秒，相信我们的N代子孙，哪怕地球毁灭那天都不用愁不够用了，因为这个时间已经是千亿年以后了。</p>
<p>最后一个问题:</p>
<p>上面System.out.println(new Date(0))，打印出来的时间是8点而非0点，原因是存在系统时间和本地时间的问题，其实系统时间依然是0点，只不过我的电脑时区设置为东8区，故打印的结果是8点。</p>
<p>我想以上问题如果作为面试题，也能难倒一批人了</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>黑莓bb微信 2.6 for os5</title>
      <link>https://w.toomore.us/posts/blackberry/%E9%BB%91%E8%8E%93bb%E5%BE%AE%E4%BF%A12.6foros5/</link>
      <pubDate>Thu, 18 Jul 2013 17:50:54 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/blackberry/%E9%BB%91%E8%8E%93bb%E5%BE%AE%E4%BF%A12.6foros5/</guid>
      <description>黑莓BB微信2.6 for OS5 ！建议使用berrybox或者BBctrl安装。
点这里下载</description>
      <content:encoded><![CDATA[<p>黑莓BB微信2.6 for OS5 ！建议使用berrybox或者BBctrl安装。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/4c8b3c66e2faf1290b44f70264c7dbecd94e95156fce1926da289cc836658193.png" alt="Wechat2.6"  />
</p>
<p><a href="/attachs/weixin2620bb.zip">点这里下载</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>给县级地方门户网站兄弟的N个建议</title>
      <link>https://w.toomore.us/posts/website/%E7%BB%99%E5%8E%BF%E7%BA%A7%E5%9C%B0%E6%96%B9%E9%97%A8%E6%88%B7%E7%BD%91%E7%AB%99%E5%85%84%E5%BC%9F%E7%9A%84n%E4%B8%AA%E5%BB%BA%E8%AE%AE/</link>
      <pubDate>Sat, 18 May 2013 09:33:28 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/%E7%BB%99%E5%8E%BF%E7%BA%A7%E5%9C%B0%E6%96%B9%E9%97%A8%E6%88%B7%E7%BD%91%E7%AB%99%E5%85%84%E5%BC%9F%E7%9A%84n%E4%B8%AA%E5%BB%BA%E8%AE%AE/</guid>
      <description>这应该是我第三篇关于县级地方门户论坛文章，给那些还在路上奔波的网友几点建议，还包括运营!
一、域名选择! 首先说明，由于是县级地方门户，你首先要考虑的是网民的水平确实不高，大部分的网民对域名还限制在.com这个阶段，至于 la,cc这样的后缀，对于他们来说，还前卫了点，也不方便记忆，所以我首先给站长的建议是：首选.com。理由：中国网民上网的域名初步认识，还来源于 163.com，sina.com，sohu.com，所以县级网民还只记得.com，其余对于他们来说还太陌生了点!如果你不相信我的话，你可以到街上去做个测试，你问问网站地址的后缀是什么，80%的人都会回答.com.
另外，在域名注册的时候，单纯的地名拼音已经注册不到，那么首选的是缩写加数字，缩写可以是地名缩写，数字最好是区号，本人不太赞成用邮编作为域名，等你做大了你就知道，看上去就是一个游击队，散打队!也许每个站长开始都是小打小闹，想顺便弄点小钱，等你不经意开始赚钱的时候，你才发现你的域名很有问题!顺便啰嗦下，不要轻易换域名，网民会适应不过来的!!
不知道有几个地方门户网站的站长发现一个奇怪的形象没有：每天从百度搜索你的论坛名字来的很多!很多站长在纳闷，为什么不直接输入地址而要百度一下来的。以前我也迷惑，后来我去看过几个客户访问我的论坛，才发现他们的首页都是hao123,他们访问我们的论坛习惯了在百度里面输入论坛中文名，然后再点击!所以初期的时候，给每个网民推广如何识记我们的域名地址是非常有必要的，这个大家可以参考下宜宾的论坛，他们已经快6年了，目前还在推广如何识记他们的域名。
二、程序的选择 目前论坛可选的，肯定是pw和DZ!但是我还是建议大家初期尽量选择DZ!理由很简单，DZ占据了中国BBS 60%的市场份额，网民平时搜索到的论坛，基本都是DZ!PW对于做地方门户，确实很多细节可圈可点,但是很多bug也是长期存在无法解决!但是我建议中期才开始转过去!DZ上手很简单，特别是图片，视频这些的编辑器界面，确实DZ优于PW! 目前衡量一个网站优良的一个最最基本的标准，恐怕还是发帖数量和质量。发帖数量从哪来，两个方面：发帖回帖界面和编辑器!至于内容运营，我后面会仔细谈到!但是建议技术不到家的站长，无法独当一面的站长，选择PW!pw的技术服务绝对一流，我现在的网站还是直接给了PW客服ftp账号密码，管理员账号密码，有什么问题，直接发过去，他们等会就给发来：处理好了!PW服务那是耿耿的!
三、界面 地方门户论坛，我建议初期，至少在初期的2年内，应该保持一个纯论坛，不应该增加门户!让网民进入你的网站，直接就可以发帖回帖，而不是要去门户寻找入口界面!单纯的论坛最大的好处就是入口一目了然，我需要什么，我可以做什么，我需要怎么做，明明白白!
那么为什么到了中期又要参加门户了呢?增加门户主要是为了把优秀的帖子第一时间展示在网民的眼球下!因为运行了很长的时间，帖子积累到了一定的数量，很多优秀的帖子已经无法第一时间展示出来，同时由于板块的增加，目标人群已经开始固定，比如有的人每天只来看本地新闻，有的人每天只来看娱乐新闻，有的人每天到处转转，那么我们只有把优秀的内裤翻出口全部穿在外面，才像个超人!
网站初期，没有必要在美工上花费很多时间，很多站长一天到晚都在修改风格，都在做插件，很NB吗?有P用!简单素净应该是第一的追求，而不是去一味的模仿!很多地方门户站长喜欢19lou风格，喜欢天一的风格，但是你为什么喜欢，你真的知道吗?19lou为什么设置为那个样子，有什么好处，对盈利有什么优化的地方你想过吗?不要以为做了一个19lou风格，你就可以和19lou相提并论，其实你差的老远!风格美不美，网民并不关心，那只是你站长一个人自我陶醉自我欣赏的玩意，好比意淫一个道理!所以我建议站长第三点：入口简单，界面简单素净!
四、内容 地方门户都在说内容为王!但是有很少站长给你们讲内容怎么来，怎么做内容，今天给大家讲讲!
内容来自于网友的自发提供，但是这些东西都是很少的一部分，想留住人，想吸引更多的人，必须要网站自己要提供海量的信息!地方门户，最热闹的，肯定是本地新闻，本地新闻怎么来?靠网友自己爆料，数量不多!怎么办?你需要主动出击：自己每天保证更新几天最新的新闻，比如车祸啊，吵架啊，都可以爆料进去!如果人手不够怎么办?你可以在每个乡镇，设置一个信息联络员，有什么小道消息，立马爆料给你，然后你再根据爆料的简单说明丰满下就可以了!本地新闻最吃香的就是图文结合，特别是车祸类的，文字说明都是苍白无力的!那么信息联络员涉及一个费用的问题，但是不太建议各位给money，你可以经常请他喝酒吃饭，年底顺便一个小红包!本来这些对于他来说也是爱好，不会影响他的正常生活!我自己的论坛是：版主以上管理人员，包括信息联络员，网友聚会一律由论坛买单!这样可以在一定程度上收买人心!但是最凶狠的一招还是给大家推荐帮助你的管理人员解决实际的一些问题：因为你的论坛做到了一定的影响力，你完全有能力帮助他们解决他们自己无法解决的问题。比如我的论坛，有几个版主的儿子6岁了还没有上户口，最后我知道了，给公安局说了，公安局直接给他们办了!他们非常感激!情感投资无非为你要带来的是本地的最新资讯，最快的小道消息!&amp;quot;
别的论坛的热点，转过来，把地名换为本地的，然后加以引导，增加讨论的话题性!建议大家经常参考本地门户话题网站：化龙巷、厦门小鱼、合肥论坛、天一论坛、昆山论坛、眉山人论坛。 比如化龙巷有个帖子说：建议汽车司机别开远灯，为了市民安全。这样的话题完全可以转过来，换为自己城市的地址就可以了!
互联网的热点，焦点引导，最后的目的是要把这个话题引导到我们身边来!比如前段时间说泸州有小孩打预防针死人的问题，完全可以就这个话题，让大家讨论下，现在我们这个县城预防针是否安全，大家有什么担心的，或者有什么东西对政府的建议的，这样话题性就出来了.
如果你有钱，你完全可以请一个家伙，每天弄个自行车在城区，背个相机到处转，看到有什么新奇的东西都可以拍摄和下来，然后晚上全部整理出来;当然发布的时候不要用同一账号发布，尽量多用几个账号来发，因为没有人喜欢一个版面都是一个家伙发的，那样显的很boring!
五、运营 很多站长不知道什么叫 运营，说白了就是如何把人气转化为现金流!在运营里面，很重要的一点是：首先要给网友表现出，你这是一个很火爆的论坛，不是一个僵尸站!怎么办?马甲!比如一个话题，你完全可以用50个左右的马甲进行回复炒作，帖子回复越多，新人参与讨论越多!别人一看也很热闹，慢慢就热闹起来了!那么对于一个论坛来说，网站编辑是非常有必要的!网站编辑做什么?内容的收集和内容的炒作以及引导网民参与讨论!
六、转化现金流 非常重要：很多站长，根本没有什么人气的时候，就开始挂广告!甚至很多是假广告，这个非常错误!与其根本没有收入自欺欺人，不如把广告位置空白起!很多站长，初期就是：广告位招商!你的论坛广告位置越多，招租越多，说明你的人气不好，说明你的生意很臭，更没有人愿意来做广告!在地方门户，从众心理非常现实，某个商家进来了，同行的都想进来!所以给大家一个无比重要的建议：头几个广告，一定要做本地知名度最高的广告，小广告建议不接!因为网络广告的效果，不决定于你的论坛流量，你的影响力，其实是商家本身的品牌!品牌越好，生意越好，你给他做了广告，他的期望值比小商家小的多，小商家太现实了，今天做了广告，希望明天有效果!
舆情：地方门户网站，基本都没有新闻的资质，但是这不重要，有人的地方，有话题讨论的地方，有议论的地方，就有影响力，就是舆情!通过舆情和政府很多部门建议良好的关系，首先别问要钱，要钱之前你先要免费给他们他们想要的，政府无非要政绩，而你要的只是money!比如某个部门有负面帖子，第一时间联系他们，叫他们出来解释，有的时候甚至你可以帮他们写!你帮助他们多了，他们都懂的，网媒时代，大家都明白!你问到要钱，他们很不舒服;他们主动给你钱，他们还很愉快，感觉你收了他们的钱，也不欠人情了，反正是***的钱，也不是那个当官的自己掏腰包!再说说舆情，比如我收了某个单位的钱，不代表我可以给你删除帖子，收了钱的单位，他一打电话你就删除帖子，你在他们心理的分量就轻了很多，自然也不重视你，他们感觉你就是他们喂得狗，但是不删除吧，好像也不近人情，收了钱不办事也说不过去啊，所以我建议：别删除帖子，直接喊他们解释，然后你用马甲账号疯狂的表扬，正面引导大家的回复!
硬广告：本人不太赞成在你网站还不成气候的时候，出去拉广告!首先你的对话成本很高，因为你首先要给别人解释你是做什么的，你们有什么优势，你可以给商家带来什么，如果你的影响力很大了，以上的都可以直接跳过，直接谈钱和做的方式!因为商家每天也在关注你的论坛，也知道这个地方有什么他需要的，可以给他提供什么，对话的落差已经降低到了最小!同时，初期出去拉广告，都是芝麻广告，也没有什么影响力!长久下去，大家都看见论坛都是本地的小商家，也会默认为你的论坛就是一个小杂牌!所以在CCTV做广告和本地的户外广告效果是不一样的!在CCTV能够做广告，本身代表商家的一种实力，一个品牌，CCTV为这个品牌增加了美誉度，商品同时也衬托了CCTV的权威性，这种关系非常重要!
商家联盟：县级门户，最好不要做商家联盟!如果你确实要做，建议给商家免费，给会员卡免费!但是可以推荐商家店铺界面给大家：就是把这个城市的所有的2年以上商家的店铺，电话，地址，经营什么，这些东西完全放在一个页面，做成一个导航的形式!我之所以说2年以上是因为：很多短寿的铺子就不要登记了，今后有些小麻烦，会员找不到具体位置，要骂娘的!那么这个导航的好处是，要培养当地人的习惯，今后要找那个铺子的电话，首先上你的论坛，首先给商家免费广告，然后再针对商家的具体要求提供有偿增值服务!这个，大家可以学习下360:免费吸引用户，有偿提供增值服务，这个其实也是DZ、Pw的模式!
这个文章，终于写完了!想了很久，觉得有必要给大家分享下，希望各位站长赚钱!有机会可以见面交流!谢谢大家!以上文字来源本人全部心得，完全无保留!
文章转自：http://news.im286.com/webmaster/jingyan/3523.shtml</description>
      <content:encoded><![CDATA[<p>这应该是我第三篇关于县级地方门户论坛文章，给那些还在路上奔波的网友几点建议，还包括运营!</p>
<h2 id="一域名选择">一、域名选择!</h2>
<p>首先说明，由于是县级地方门户，你首先要考虑的是网民的水平确实不高，大部分的网民对域名还限制在.com这个阶段，至于 la,cc这样的后缀，对于他们来说，还前卫了点，也不方便记忆，所以我首先给站长的建议是：首选.com。理由：中国网民上网的域名初步认识，还来源于 163.com，sina.com，sohu.com，所以县级网民还只记得.com，其余对于他们来说还太陌生了点!如果你不相信我的话，你可以到街上去做个测试，你问问网站地址的后缀是什么，80%的人都会回答.com.</p>
<p>另外，在域名注册的时候，单纯的地名拼音已经注册不到，那么首选的是缩写加数字，缩写可以是地名缩写，数字最好是区号，本人不太赞成用邮编作为域名，等你做大了你就知道，看上去就是一个游击队，散打队!也许每个站长开始都是小打小闹，想顺便弄点小钱，等你不经意开始赚钱的时候，你才发现你的域名很有问题!顺便啰嗦下，不要轻易换域名，网民会适应不过来的!!</p>
<p>不知道有几个地方门户网站的站长发现一个奇怪的形象没有：每天从百度搜索你的论坛名字来的很多!很多站长在纳闷，为什么不直接输入地址而要百度一下来的。以前我也迷惑，后来我去看过几个客户访问我的论坛，才发现他们的首页都是hao123,他们访问我们的论坛习惯了在百度里面输入论坛中文名，然后再点击!所以初期的时候，给每个网民推广如何识记我们的域名地址是非常有必要的，这个大家可以参考下宜宾的论坛，他们已经快6年了，目前还在推广如何识记他们的域名。</p>
<h2 id="二程序的选择">二、程序的选择</h2>
<p>目前论坛可选的，肯定是pw和DZ!但是我还是建议大家初期尽量选择DZ!理由很简单，DZ占据了中国BBS 60%的市场份额，网民平时搜索到的论坛，基本都是DZ!PW对于做地方门户，确实很多细节可圈可点,但是很多bug也是长期存在无法解决!但是我建议中期才开始转过去!DZ上手很简单，特别是图片，视频这些的编辑器界面，确实DZ优于PW! 目前衡量一个网站优良的一个最最基本的标准，恐怕还是发帖数量和质量。发帖数量从哪来，两个方面：发帖回帖界面和编辑器!至于内容运营，我后面会仔细谈到!但是建议技术不到家的站长，无法独当一面的站长，选择PW!pw的技术服务绝对一流，我现在的网站还是直接给了PW客服ftp账号密码，管理员账号密码，有什么问题，直接发过去，他们等会就给发来：处理好了!PW服务那是耿耿的!</p>
<h2 id="三界面">三、界面</h2>
<p>地方门户论坛，我建议初期，至少在初期的2年内，应该保持一个纯论坛，不应该增加门户!让网民进入你的网站，直接就可以发帖回帖，而不是要去门户寻找入口界面!单纯的论坛最大的好处就是入口一目了然，我需要什么，我可以做什么，我需要怎么做，明明白白!</p>
<p>那么为什么到了中期又要参加门户了呢?增加门户主要是为了把优秀的帖子第一时间展示在网民的眼球下!因为运行了很长的时间，帖子积累到了一定的数量，很多优秀的帖子已经无法第一时间展示出来，同时由于板块的增加，目标人群已经开始固定，比如有的人每天只来看本地新闻，有的人每天只来看娱乐新闻，有的人每天到处转转，那么我们只有把优秀的内裤翻出口全部穿在外面，才像个超人!</p>
<p>网站初期，没有必要在美工上花费很多时间，很多站长一天到晚都在修改风格，都在做插件，很NB吗?有P用!简单素净应该是第一的追求，而不是去一味的模仿!很多地方门户站长喜欢19lou风格，喜欢天一的风格，但是你为什么喜欢，你真的知道吗?19lou为什么设置为那个样子，有什么好处，对盈利有什么优化的地方你想过吗?不要以为做了一个19lou风格，你就可以和19lou相提并论，其实你差的老远!风格美不美，网民并不关心，那只是你站长一个人自我陶醉自我欣赏的玩意，好比意淫一个道理!所以我建议站长第三点：入口简单，界面简单素净!</p>
<h2 id="四内容">四、内容</h2>
<p>地方门户都在说内容为王!但是有很少站长给你们讲内容怎么来，怎么做内容，今天给大家讲讲!</p>
<ol>
<li>
<p>内容来自于网友的自发提供，但是这些东西都是很少的一部分，想留住人，想吸引更多的人，必须要网站自己要提供海量的信息!地方门户，最热闹的，肯定是本地新闻，本地新闻怎么来?靠网友自己爆料，数量不多!怎么办?你需要主动出击：自己每天保证更新几天最新的新闻，比如车祸啊，吵架啊，都可以爆料进去!如果人手不够怎么办?你可以在每个乡镇，设置一个信息联络员，有什么小道消息，立马爆料给你，然后你再根据爆料的简单说明丰满下就可以了!本地新闻最吃香的就是图文结合，特别是车祸类的，文字说明都是苍白无力的!那么信息联络员涉及一个费用的问题，但是不太建议各位给money，你可以经常请他喝酒吃饭，年底顺便一个小红包!本来这些对于他来说也是爱好，不会影响他的正常生活!我自己的论坛是：版主以上管理人员，包括信息联络员，网友聚会一律由论坛买单!这样可以在一定程度上收买人心!但是最凶狠的一招还是给大家推荐帮助你的管理人员解决实际的一些问题：因为你的论坛做到了一定的影响力，你完全有能力帮助他们解决他们自己无法解决的问题。比如我的论坛，有几个版主的儿子6岁了还没有上户口，最后我知道了，给公安局说了，公安局直接给他们办了!他们非常感激!情感投资无非为你要带来的是本地的最新资讯，最快的小道消息!&quot;</p>
</li>
<li>
<p>别的论坛的热点，转过来，把地名换为本地的，然后加以引导，增加讨论的话题性!建议大家经常参考本地门户话题网站：化龙巷、厦门小鱼、合肥论坛、天一论坛、昆山论坛、眉山人论坛。
比如化龙巷有个帖子说：建议汽车司机别开远灯，为了市民安全。这样的话题完全可以转过来，换为自己城市的地址就可以了!</p>
</li>
<li>
<p>互联网的热点，焦点引导，最后的目的是要把这个话题引导到我们身边来!比如前段时间说泸州有小孩打预防针死人的问题，完全可以就这个话题，让大家讨论下，现在我们这个县城预防针是否安全，大家有什么担心的，或者有什么东西对政府的建议的，这样话题性就出来了.</p>
</li>
<li>
<p>如果你有钱，你完全可以请一个家伙，每天弄个自行车在城区，背个相机到处转，看到有什么新奇的东西都可以拍摄和下来，然后晚上全部整理出来;当然发布的时候不要用同一账号发布，尽量多用几个账号来发，因为没有人喜欢一个版面都是一个家伙发的，那样显的很boring!</p>
</li>
</ol>
<h2 id="五运营">五、运营</h2>
<p>很多站长不知道什么叫 运营，说白了就是如何把人气转化为现金流!在运营里面，很重要的一点是：首先要给网友表现出，你这是一个很火爆的论坛，不是一个僵尸站!怎么办?马甲!比如一个话题，你完全可以用50个左右的马甲进行回复炒作，帖子回复越多，新人参与讨论越多!别人一看也很热闹，慢慢就热闹起来了!那么对于一个论坛来说，网站编辑是非常有必要的!网站编辑做什么?内容的收集和内容的炒作以及引导网民参与讨论!</p>
<h2 id="六转化现金流">六、转化现金流</h2>
<p>非常重要：很多站长，根本没有什么人气的时候，就开始挂广告!甚至很多是假广告，这个非常错误!与其根本没有收入自欺欺人，不如把广告位置空白起!很多站长，初期就是：广告位招商!你的论坛广告位置越多，招租越多，说明你的人气不好，说明你的生意很臭，更没有人愿意来做广告!在地方门户，从众心理非常现实，某个商家进来了，同行的都想进来!所以给大家一个无比重要的建议：头几个广告，一定要做本地知名度最高的广告，小广告建议不接!因为网络广告的效果，不决定于你的论坛流量，你的影响力，其实是商家本身的品牌!品牌越好，生意越好，你给他做了广告，他的期望值比小商家小的多，小商家太现实了，今天做了广告，希望明天有效果!</p>
<p>舆情：地方门户网站，基本都没有新闻的资质，但是这不重要，有人的地方，有话题讨论的地方，有议论的地方，就有影响力，就是舆情!通过舆情和政府很多部门建议良好的关系，首先别问要钱，要钱之前你先要免费给他们他们想要的，政府无非要政绩，而你要的只是money!比如某个部门有负面帖子，第一时间联系他们，叫他们出来解释，有的时候甚至你可以帮他们写!你帮助他们多了，他们都懂的，网媒时代，大家都明白!你问到要钱，他们很不舒服;他们主动给你钱，他们还很愉快，感觉你收了他们的钱，也不欠人情了，反正是***的钱，也不是那个当官的自己掏腰包!再说说舆情，比如我收了某个单位的钱，不代表我可以给你删除帖子，收了钱的单位，他一打电话你就删除帖子，你在他们心理的分量就轻了很多，自然也不重视你，他们感觉你就是他们喂得狗，但是不删除吧，好像也不近人情，收了钱不办事也说不过去啊，所以我建议：别删除帖子，直接喊他们解释，然后你用马甲账号疯狂的表扬，正面引导大家的回复!</p>
<p>硬广告：本人不太赞成在你网站还不成气候的时候，出去拉广告!首先你的对话成本很高，因为你首先要给别人解释你是做什么的，你们有什么优势，你可以给商家带来什么，如果你的影响力很大了，以上的都可以直接跳过，直接谈钱和做的方式!因为商家每天也在关注你的论坛，也知道这个地方有什么他需要的，可以给他提供什么，对话的落差已经降低到了最小!同时，初期出去拉广告，都是芝麻广告，也没有什么影响力!长久下去，大家都看见论坛都是本地的小商家，也会默认为你的论坛就是一个小杂牌!所以在CCTV做广告和本地的户外广告效果是不一样的!在CCTV能够做广告，本身代表商家的一种实力，一个品牌，CCTV为这个品牌增加了美誉度，商品同时也衬托了CCTV的权威性，这种关系非常重要!</p>
<p>商家联盟：县级门户，最好不要做商家联盟!如果你确实要做，建议给商家免费，给会员卡免费!但是可以推荐商家店铺界面给大家：就是把这个城市的所有的2年以上商家的店铺，电话，地址，经营什么，这些东西完全放在一个页面，做成一个导航的形式!我之所以说2年以上是因为：很多短寿的铺子就不要登记了，今后有些小麻烦，会员找不到具体位置，要骂娘的!那么这个导航的好处是，要培养当地人的习惯，今后要找那个铺子的电话，首先上你的论坛，首先给商家免费广告，然后再针对商家的具体要求提供有偿增值服务!这个，大家可以学习下360:免费吸引用户，有偿提供增值服务，这个其实也是DZ、Pw的模式!</p>
<p>这个文章，终于写完了!想了很久，觉得有必要给大家分享下，希望各位站长赚钱!有机会可以见面交流!谢谢大家!以上文字来源本人全部心得，完全无保留!</p>
<p>文章转自：http://news.im286.com/webmaster/jingyan/3523.shtml</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>黑莓微信内测版问题总结及开发建议</title>
      <link>https://w.toomore.us/posts/blackberry/%E9%BB%91%E8%8E%93%E5%BE%AE%E4%BF%A1%E5%86%85%E6%B5%8B%E7%89%88%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93%E5%8F%8A%E5%BC%80%E5%8F%91%E5%BB%BA%E8%AE%AE/</link>
      <pubDate>Tue, 30 Oct 2012 21:45:32 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/blackberry/%E9%BB%91%E8%8E%93%E5%BE%AE%E4%BF%A1%E5%86%85%E6%B5%8B%E7%89%88%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93%E5%8F%8A%E5%BC%80%E5%8F%91%E5%BB%BA%E8%AE%AE/</guid>
      <description>黑莓微信内测版本问题总结 微信ID：xxxx
QQ：xxx
机型：9000at&amp;amp;t
网络环境：笔记本创建的wifi热点
OS版本：5.0.0 1067
一、手机通讯录和QQ好友加载缓慢问题 手机通讯录有259个好友 QQ好友：594个 Loading过程中一直漏斗 QQ联系人：用时一分多钟
如图一
（图一）
二、通讯录选择好友秒退 首次登录点击（图二）选项时，程序秒退。后边使用过程中出现一次秒退，也是用轨迹球点击recommend选项时出现。
（图二）
三、短信界面提示问题 微信消息在短信有界面提示、有内容摘要，但是没有微信图标，打开以后是发送邮件发送的界面，也看不到消息内容（如图四）。
（图四）在短信界面打开微信消息只是一个邮件编写页面、看不到任何信息
四、轨迹球操作问题 好多操作必须按下轨迹球才能实现，操作比较不方便，可能会大大缩短轨迹球的使用寿命，把确认操作改为回车键或者空格可能会好点。
五、头像修改问题 修改头像的时候不能改变图片大小
（图五）
六、不能自动联网问题 网络断开以后再连上，微信不会自动连接网络，必须退出重新启动程序才可以正常使用。
七、不能显示某些公众帐号发来的消息，比如冷笑话精选。 八、聊天界面，消息窗口出现重叠现象。 九、用9000给朋友发语音，语音播放完以后，他的微信就会无响应，弹出一个窗口问是强行关闭还是等待，然后就强退了。 这个问题比较想不通啊，听起来很好笑，很没道理，但是作了好多测试，换个其他手机给他发语音就不会出现这情况，只要用9000发就立马出现问题。
对方手机型号：魅族M9
微信版本：4.2
系统：andriod 2.3.02 9345
十、功能方面的建议 不知道公测版会不会加上查找附近好友、漂流瓶等必备功能，感觉缺了这些就不像微信了，只能通过QQ好友、手机联系人、查找ID添加好友，失去了用微信的乐趣。
以上为目前在黑莓微信内测版使用过程中碰到的问题和一些建议，希望对微信team下一步的开发有所帮助。感谢微信team的努力、继续期待微信team的杰作。
莓粉：晦涩sunshine
https://w.toomore.us
微信内测第一版，下载请猛击这里</description>
      <content:encoded><![CDATA[<h1 id="黑莓微信内测版本问题总结">黑莓微信内测版本问题总结</h1>
<p>微信ID：xxxx</p>
<p>QQ：xxx</p>
<p>机型：9000at&amp;t</p>
<p>网络环境：笔记本创建的wifi热点</p>
<p>OS版本：5.0.0 1067</p>
<h2 id="一手机通讯录和qq好友加载缓慢问题">一、手机通讯录和QQ好友加载缓慢问题</h2>
<ol>
<li>手机通讯录有259个好友</li>
<li>QQ好友：594个</li>
<li>Loading过程中一直漏斗</li>
</ol>
<p>QQ联系人：用时一分多钟</p>
<p>如图一</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/62aefc11cfa06831314630d690d31dfe287744fa3082e2d6f547e937467d5eb8.png" alt="loading"  />
<br>
（图一）</p>
<h2 id="二通讯录选择好友秒退">二、通讯录选择好友秒退</h2>
<p>首次登录点击（图二）选项时，程序秒退。后边使用过程中出现一次秒退，也是用轨迹球点击recommend选项时出现。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/223904ed20aa525072ff6f0fb02ca8bdc805a9a61c96cc3beb788d59f7edd0ff.png" alt="选择好友"  />
<br>
（图二）</p>
<h2 id="三短信界面提示问题">三、短信界面提示问题</h2>
<p>微信消息在短信有界面提示、有内容摘要，但是没有微信图标，打开以后是发送邮件发送的界面，也看不到消息内容（如图四）。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/82d30a580dd2cbdfab7f64851db6151dd0e608a1e5e93f8b89420d41b7329a11.png" alt=""  />
<br>
（图四）在短信界面打开微信消息只是一个邮件编写页面、看不到任何信息</p>
<h2 id="四轨迹球操作问题">四、轨迹球操作问题</h2>
<p>好多操作必须按下轨迹球才能实现，操作比较不方便，可能会大大缩短轨迹球的使用寿命，把确认操作改为回车键或者空格可能会好点。</p>
<h2 id="五头像修改问题">五、头像修改问题</h2>
<p>修改头像的时候不能改变图片大小</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/ddaef476ca0cfe3bb11105d8a181c9e60c53b2c98e241af950ddaa43b67fe99c.png" alt="修改头像"  />
<br>
（图五）</p>
<h2 id="六不能自动联网问题">六、不能自动联网问题</h2>
<p>网络断开以后再连上，微信不会自动连接网络，必须退出重新启动程序才可以正常使用。</p>
<h2 id="七不能显示某些公众帐号发来的消息比如冷笑话精选">七、不能显示某些公众帐号发来的消息，比如冷笑话精选。</h2>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/25f550094e616b27999e836d3f6edf5c1e42efa4f09fb967a0232f12014d4c68.png" alt="冷笑话公众号 "  />
</p>
<h2 id="八聊天界面消息窗口出现重叠现象">八、聊天界面，消息窗口出现重叠现象。</h2>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/b25ed5d82b3cecc6816bb7fe35d372e70e69987f17c80c2b12c010597d35dbd3.png" alt="聊天界面"  />
</p>
<h2 id="九用9000给朋友发语音语音播放完以后他的微信就会无响应弹出一个窗口问是强行关闭还是等待然后就强退了">九、用9000给朋友发语音，语音播放完以后，他的微信就会无响应，弹出一个窗口问是强行关闭还是等待，然后就强退了。</h2>
<p>这个问题比较想不通啊，听起来很好笑，很没道理，但是作了好多测试，换个其他手机给他发语音就不会出现这情况，只要用9000发就立马出现问题。</p>
<p>对方手机型号：魅族M9<br>
微信版本：4.2<br>
系统：andriod 2.3.02  9345</p>
<h2 id="十功能方面的建议">十、功能方面的建议</h2>
<p>不知道公测版会不会加上查找附近好友、漂流瓶等必备功能，感觉缺了这些就不像微信了，只能通过QQ好友、手机联系人、查找ID添加好友，失去了用微信的乐趣。</p>
<p>以上为目前在黑莓微信内测版使用过程中碰到的问题和一些建议，希望对微信team下一步的开发有所帮助。感谢微信team的努力、继续期待微信team的杰作。</p>
<p>莓粉：晦涩sunshine</p>
<p><a href="https://w.toomore.us">https://w.toomore.us</a></p>
<p><a href="/attachs/BlackBerryWechatV1.zip">微信内测第一版，下载请猛击这里</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>360安全卫士卸载过程</title>
      <link>https://w.toomore.us/posts/internet/360%E5%AE%89%E5%85%A8%E5%8D%AB%E5%A3%AB%E5%8D%B8%E8%BD%BD%E8%BF%87%E7%A8%8B/</link>
      <pubDate>Sat, 13 Oct 2012 00:24:27 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/360%E5%AE%89%E5%85%A8%E5%8D%AB%E5%A3%AB%E5%8D%B8%E8%BD%BD%E8%BF%87%E7%A8%8B/</guid>
      <description>好久没更新博客了，关注网上的事也少了，听说方舟子又打假了，凑热闹上来看看。掐架过程就不赘述了，百度一下“360 方舟子” 自己了解。感觉不爽就想把360安全卫士给卸了。（360产品里头就只用360安全卫士清理下垃圾文件、别无他用，360浏览器没用过不做评价。）
卸载善后过程如下：
按正常程序：
一、运行uninstall 卸载完成
二、卸载完成后手动删除残余文件，结果如下图：
操作无法完成，因为文件已经在QQ2012中打开。
文件说明：360安全卫士 360木马云查杀查询模块
公司：360.cn
有两个疑问：
1、为什么360的文件会在QQ中打开？！（而且是卸载以后）
2、云查杀查询模块在QQ中打开，在查询什么？！
三、为顺利删除残余文件，用unlocker 1.9.0 解除锁定进程
锁定的进程如下图：
当时运行的程序都有360的痕迹，这时是在扫描什么？！“云”查询什么？！
上网痕迹？！QQ数据包？！explore？！
四、解锁后各种程序相继报错关闭，由于没料到会出现这种情况，只用系统自带截图工具截到了QQ报错的界面（一直用QQ截图工具，QQ报错了所以没赶得上截其他程序报错关闭的图）。
两个疑问：
1、没了360，QQ就不能正常运行吗？！
2、360在QQ运行过程中充当什么角色？！
五、查看注册表、删除失效注册表
仅存的好感没多少了&amp;hellip;</description>
      <content:encoded><![CDATA[<p>好久没更新博客了，关注网上的事也少了，听说方舟子又打假了，凑热闹上来看看。掐架过程就不赘述了，<a href="https://www.baidu.com/s?wd=360%20%E6%96%B9%E8%88%9F%E5%AD%90&amp;rsv_spt=1&amp;rsv_iqid=0x8a1760c400120123&amp;issp=1&amp;f=8&amp;rsv_bp=1&amp;rsv_idx=2&amp;ie=utf-8&amp;tn=baiduhome_pg&amp;rsv_dl=ib&amp;rsv_enter=1&amp;rsv_sug3=2&amp;rsv_sug1=2&amp;rsv_sug7=101&amp;rsv_n=2&amp;rsv_sug2=0&amp;rsv_btype=i&amp;prefixsug=%2526lt%253B60%2520%25E6%2596%25B9%25E8%2588%259F%25E5%25AD%2590&amp;rsp=2&amp;inputT=1033&amp;rsv_sug4=14409">百度一下“360 方舟子”</a> 自己了解。感觉不爽就想把360安全卫士给卸了。（360产品里头就只用360安全卫士清理下垃圾文件、别无他用，360浏览器没用过不做评价。）</p>
<p>卸载善后过程如下：</p>
<p>按正常程序：</p>
<p>一、运行uninstall 卸载完成</p>
<p>二、卸载完成后手动删除残余文件，结果如下图：</p>
<p><img loading="lazy" src="/images/content/posts/internet/20220116/4330a24596d229e46174e4d78209e983e2ed1d98c8bb2fda6dd7aa1898f6f0db.png" alt="操作无法完成"  />
</p>
<p>操作无法完成，因为文件已经在QQ2012中打开。</p>
<p>文件说明：360安全卫士 360木马云查杀查询模块</p>
<p>公司：360.cn</p>
<p>有两个疑问：</p>
<p>1、为什么360的文件会在QQ中打开？！（而且是卸载以后）</p>
<p>2、云查杀查询模块在QQ中打开，在查询什么？！</p>
<p>三、为顺利删除残余文件，用unlocker 1.9.0 解除锁定进程</p>
<p>锁定的进程如下图：</p>
<p><img loading="lazy" src="/images/content/posts/internet/20220116/7a966368089df477bfbfe8ca02c508c961904dc387ddc5364668416e2bcd61fc.png" alt="锁定的进程"  />
</p>
<p>当时运行的程序都有360的痕迹，这时是在扫描什么？！“云”查询什么？！</p>
<p>上网痕迹？！QQ数据包？！explore？！</p>
<p>四、解锁后各种程序相继报错关闭，由于没料到会出现这种情况，只用系统自带截图工具截到了QQ报错的界面（一直用QQ截图工具，QQ报错了所以没赶得上截其他程序报错关闭的图）。</p>
<p><img loading="lazy" src="/images/content/posts/internet/20220116/30b0d0ff7d8fb6a2c342c13b379ba88bccaf672496c7dbe2d6a68b874081b8f3.png" alt="QQ报错退出"  />
</p>
<p>两个疑问：</p>
<p>1、没了360，QQ就不能正常运行吗？！</p>
<p>2、360在QQ运行过程中充当什么角色？！</p>
<p>五、查看注册表、删除失效注册表</p>
<p><img loading="lazy" src="/images/content/posts/internet/20220116/f27652b8ecfcb8ca8d6878cf80220d72a2a354b35c11e2bda0c6c343a2924efa.png" alt="删除注册表"  />
</p>
<p>仅存的好感没多少了&hellip;</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>面试报告,诚实的孩纸桑不起啊</title>
      <link>https://w.toomore.us/posts/youth/interview-report-an-honest-child-cant-afford/</link>
      <pubDate>Thu, 30 Aug 2012 13:59:08 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/interview-report-an-honest-child-cant-afford/</guid>
      <description> 面试报告 第一步&amp;nbsp;人事经理： 1、填写个人简历 2、了解个人基本信息：老家在哪儿、有无女朋友、住哪儿、是否长期在西安发展、期望薪资（答2500） 3、教育、培训及工作履历：在学校有没有参加社团、担任什么职位；以前工作单位的大概情况 4、简单介绍业务公司状况，有两家公司，派威做电信、联通、移动等系统集成业务，另一家公司做电信增值业务。 5、公司制度、福利待遇： 双休、早9：00&amp;nbsp;下午5：30&amp;nbsp;&amp;nbsp;中午12：00-1：30午饭 逢节福利例如端午一人1000RMB、过年假期长（因为大部分为外地员工）。 转正后交三险两金 6、薪资待遇：试用期低于2500 7、还有什么需要了解： &amp;nbsp;&amp;nbsp;&amp;nbsp;问：公司业务范围主要在陕西范围内吗？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;是的 &amp;nbsp;&amp;nbsp;&amp;nbsp;问：公司主要用到哪些厂商的设备？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;不清楚、稍后问技术经理&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;问：对于不太熟悉的技术公司会做培训吗？&amp;nbsp;&amp;nbsp;&amp;nbsp;公司前两个月会提供培训&amp;nbsp;每周五下午 第二步&amp;nbsp;技术经理： 1、看简历&amp;nbsp;&amp;nbsp;&amp;nbsp;手上有张纸 &amp;nbsp;&amp;nbsp;&amp;nbsp;精通TCP/IP协议、RIP....&amp;nbsp;&amp;nbsp;&amp;nbsp;？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;是 &amp;nbsp;&amp;nbsp;&amp;nbsp;如果是门外汉知道这是什么东西吗？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&amp;nbsp;&amp;nbsp;&amp;nbsp;可以解释 &amp;nbsp;&amp;nbsp;&amp;nbsp;什么是RIP？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;路由信息协议 &amp;nbsp;&amp;nbsp;&amp;nbsp;什么是OSPF？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;开放式最短路径优先协议 &amp;nbsp;&amp;nbsp;&amp;nbsp;什么是BGP？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;边界网关协议&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;什么时候毕业的？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;今年 &amp;nbsp;&amp;nbsp;&amp;nbsp;那就是应届毕业生、没相关经验？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;对 &amp;nbsp;&amp;nbsp;&amp;nbsp;你应聘的是哪个职位？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;技术 &amp;nbsp;&amp;nbsp;&amp;nbsp;了解电子、电路知识吗？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;不了解 &amp;nbsp;&amp;nbsp;&amp;nbsp;有没有项目经验？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;没有 &amp;nbsp;&amp;nbsp;&amp;nbsp;写过项目方案吗？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;毕业设计就是这个 &amp;nbsp;&amp;nbsp;&amp;nbsp;描述一下&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;校园网的组建、设备选型、路由协议的选择.... 2、谈一下你技术方面的综合素质&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;哪方面最熟悉&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;网络路由交换、VPN &amp;nbsp;&amp;nbsp;&amp;nbsp;还有呢？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;网站建设、推广、优化 &amp;nbsp;&amp;nbsp;&amp;nbsp;自己会做网站吗？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;写代码不熟，建站、推广、优化流程很熟悉 &amp;nbsp;&amp;nbsp;&amp;nbsp;做过网站吗？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;现在手上有几个网站 &amp;nbsp;&amp;nbsp;&amp;nbsp;还有啥特长？&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux&amp;nbsp;&amp;nbsp;Windows&amp;nbsp;Server&amp;nbsp;基本服务的配置 &amp;nbsp;&amp;nbsp;&amp;nbsp;还有呢？尽量多说点便于我们招聘&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;嗯&amp;nbsp;没了 &amp;nbsp;&amp;nbsp;&amp;nbsp;好！那就这样吧。有结果了电话通知你&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;好的&amp;nbsp;&amp;nbsp; </description>
      <content:encoded><![CDATA[<div style="layout-grid:15.6pt none;" class="Section0">
	<h1 style="text-align:center;margin-top:0pt;margin-bottom:0pt;">
		<span style="font-family:'宋体';font-size:22pt;font-weight:bold;mso-spacerun:'yes';">面试报告</span><span style="font-family:'宋体';font-size:22pt;font-weight:bold;mso-spacerun:'yes';"><!--?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /--><o:p></o:p></span> 
	</h1>
	<h2 style="margin-top:0pt;margin-bottom:0pt;">
		<span style="font-family:'黑体';font-size:16pt;font-weight:bold;mso-spacerun:'yes';">第一步&nbsp;人事经理：</span><span style="font-family:'黑体';font-size:16pt;font-weight:bold;mso-spacerun:'yes';"><o:p></o:p></span> 
	</h2>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">1<span style="font-family:宋体;">、填写个人简历</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">2<span style="font-family:宋体;">、了解个人基本信息：老家在哪儿、有无女朋友、住哪儿、是否长期在西安发展、期望薪资（答</span><span style="font-family:'Times New Roman';">2500</span><span style="font-family:宋体;">）</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">3<span style="font-family:宋体;">、教育、培训及工作履历：在学校有没有参加社团、担任什么职位；以前工作单位的大概情况</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">4<span style="font-family:宋体;">、简单介绍业务公司状况，有两家公司，派威做电信、联通、移动等系统集成业务，另一家公司做电信增值业务。</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">5<span style="font-family:宋体;">、公司制度、福利待遇：</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">双休、早<span style="font-family:'Times New Roman';">9</span><span style="font-family:宋体;">：</span><span style="font-family:'Times New Roman';">00&nbsp;</span><span style="font-family:宋体;">下午</span><span style="font-family:'Times New Roman';">5</span><span style="font-family:宋体;">：</span><span style="font-family:'Times New Roman';">30&nbsp;&nbsp;</span><span style="font-family:宋体;">中午</span><span style="font-family:'Times New Roman';">12</span><span style="font-family:宋体;">：</span><span style="font-family:'Times New Roman';">00-1</span><span style="font-family:宋体;">：</span><span style="font-family:'Times New Roman';">30</span><span style="font-family:宋体;">午饭</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">逢节福利例如端午一人<span style="font-family:'Times New Roman';">1000RMB</span><span style="font-family:宋体;">、过年假期长（因为大部分为外地员工）。</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">转正后交三险两金</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">6、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">薪资待遇：试用期低于<span style="font-family:'Times New Roman';">2500</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">7、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">还有什么需要了解：</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;问：公司业务范围主要在陕西范围内吗？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是的</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;问：公司主要用到哪些厂商的设备？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不清楚、稍后问技术经理&nbsp;&nbsp;&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;问：对于不太熟悉的技术公司会做培训吗？&nbsp;&nbsp;&nbsp;公司前两个月会提供培训&nbsp;每周五下午</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<h2 style="margin-top:0pt;margin-bottom:0pt;">
		<span style="font-family:'黑体';font-size:16pt;font-weight:bold;mso-spacerun:'yes';">第二步&nbsp;技术经理：</span><span style="font-family:'黑体';font-size:16pt;font-weight:bold;mso-spacerun:'yes';"><o:p></o:p></span> 
	</h2>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">看简历&nbsp;&nbsp;&nbsp;手上有张纸</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;精通<span style="font-family:'Times New Roman';">TCP/IP</span><span style="font-family:宋体;">协议、</span><span style="font-family:'Times New Roman';">RIP....&nbsp;&nbsp;&nbsp;</span><span style="font-family:宋体;">？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;如果是门外汉知道这是什么东西吗？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family:'Times New Roman';">...&nbsp;&nbsp;&nbsp;</span><span style="font-family:宋体;">可以解释</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;什么是<span style="font-family:'Times New Roman';">RIP</span><span style="font-family:宋体;">？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;路由信息协议</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;什么是<span style="font-family:'Times New Roman';">OSPF</span><span style="font-family:宋体;">？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开放式最短路径优先协议</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;什么是<span style="font-family:'Times New Roman';">BGP</span><span style="font-family:宋体;">？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;边界网关协议&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;什么时候毕业的？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今年</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;那就是应届毕业生、没相关经验？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;你应聘的是哪个职位？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;技术</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;了解电子、电路知识吗？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不了解</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;有没有项目经验？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;没有</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;写过项目方案吗？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;毕业设计就是这个</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;描述一下&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;校园网的组建、设备选型、路由协议的选择<span style="font-family:'Times New Roman';">....</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">谈一下你技术方面的综合素质&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;哪方面最熟悉&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网络路由交换、<span style="font-family:'Times New Roman';">VPN</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;还有呢？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网站建设、推广、优化</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;自己会做网站吗？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;写代码不熟，建站、推广、优化流程很熟悉</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;做过网站吗？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在手上有几个网站</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;还有啥特长？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family:'Times New Roman';">Linux&nbsp;&nbsp;Windows&nbsp;Server&nbsp;</span><span style="font-family:宋体;">基本服务的配置</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;还有呢？尽量多说点便于我们招聘&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;嗯&nbsp;没了</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
	<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">
		<span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;好！那就这样吧。有结果了电话通知你&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好的&nbsp;&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span> 
	</p>
</div>]]></content:encoded>
    </item>
    
    <item>
      <title>点点网与wordpress横向测评</title>
      <link>https://w.toomore.us/posts/internet/%E7%82%B9%E7%82%B9%E7%BD%91%E4%B8%8Ewordpress%E6%A8%AA%E5%90%91%E6%B5%8B%E8%AF%84/</link>
      <pubDate>Sat, 25 Aug 2012 17:46:20 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/%E7%82%B9%E7%82%B9%E7%BD%91%E4%B8%8Ewordpress%E6%A8%AA%E5%90%91%E6%B5%8B%E8%AF%84/</guid>
      <description>一般互联网爱好者都有自己的博客，即使不常耕耘也有所耳闻，并且有相当一大部分网民曾经是博客产品的忠实或者半忠实用户。今天我们就选取其中两个比较有代表意义的，一个是传统博客服务占有率最大的 wordpress，一个是被业内称为传统博客升级的轻博客代表点点网，两者来做一个横向对比评测。
首先我们先来简单了解一下这两个博客工具。点点网是一个轻博客平台，让用户能简单快速地发布文字、图片、视频等各种格式内容，通过不同的风格展示，来分享用户兴趣或体现用户的性格，而近期推出的模板开发平台，也将其博客开放平台的理念进一步延伸，而 WordPress 是一种使用 PHP 语言开发博客平台的免费开源项目，用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的网志。在以上短短一句话里，我们就会发现很多有意思的词，比方轻博客、 PHP 、服务器等等。再接下去的内容中，笔者会逐一为您解释这些词在比较这两个博客平台的特点中的发挥的作用。
产品特点 从概述中我们不难看出，点点网属于一个轻博客平台而 Wordpress 是一个开源的项目。什么叫做轻博客？轻博客是传统博客的升级，将传统多种格式内容发布简单化，加入标签体系，用户因兴趣而聚合具有社交功能，提供完全开放的博客平台，并融入移动互联网的功能属性，以期每个人都能展现自己所在不同领域的自媒体价值。以点点网为例，其最大的特点可以用四个词概括简单、开放、社交、移动。
第一简单，点点网并没有一般传统博客提供的相册，视频、音乐盒等功能，而是将这些繁琐的分类统统抛开，将文字、图片、声音、影像、链接这五种格式内容统一由博文的形式发布。而如果要用简单来形容 Wordpress ，那是相当的勉强。众所周知 wordpress 是一个开源搭建独立博客平台的开放源码。说白了，就是给你一套程序，自己去改善，很难想象一个没有计算机基础，而要能够安装 web 服务器， PHP ，数据库以及搞定这之间的配置是有多难。所以对于初学者来说，从零开始让 wordpress 跑起来绝对不是一个愉快的经历。而在点点网，只需要邮箱、密码注册一个账号就可以开始自己的独立博客平台搭建。
第二开放，点点网自定义 HTML，CSS，Javascript 代码和提供各类精美模板的功能相结合，在做到保证了用户在网站操作的便捷性与易用性的同时最大程度的开放了可修改的模块，让用户能够更多地关注于创作的同时，也不失个性的表现。而 wordpress 就是一个将开放做到极致的博客工具，免费的开源代码，如果你有足够的 php 知识，甚至可以用 wordpress 搭建一个小型的 B2C 网店。当然，是需要你有足够的开发，数据库，网络知识的情况下，而这些条件对于我们一般的用户而言是没有的。所以 wordpress 的开放在实际意义上是具有一定局限性的。当然，如果你有一点皮毛的知识的话，搭了博客之后， wordpress 也提供了很多精美的免费模板和众多插件以供选择。
第三社交，关于这一点 wordpress 可以说是完败。但是 wordpress 败的有点理直气壮，因为 wordpress 建立的博客是一个很传统意义上的独立博客，它的作用更倾向于表达博主想表达的内容，于是乎有关于社交的部分就只存在与评论与交换友情链接这两个通用功能了。而点点网是一个轻博客平台，它的用户群组成了一个强大社会网络，关注，喜欢、订阅，转载，推送等等一系列的功能都可以为用户提供更好社交的服务。
第四移动，点点网的强大团队提供了各种移动客户端的产品支持，最近看到点点网新版的 iPhone 客户端，采用了目前比较前卫的侧滑手势 app 设计方式，只需要输入点点网的账号，就可以随心所欲发布文章，图片，和视频，高质量大图和多图混排的展示通过嵌套的方式，用户体验完全不像是一个客户端，而是直接全屏浏览图片，非常流畅易用。而相比之下， wordpress 因为只是一个开源工具，那么这些事就都需要用户自己来做，进行一番繁琐的配置后才能和 wordpress 的服务器相连接。
使用成本 关于两个产品的使用成本比较，我们分成两部分，脑力成本，经济成本。 首先关于脑力成本，因为点点网是有强大专业的技术与运营团队在做支撑。所以，基本上用户除了需要关注自己博客的内容与喜欢的内容之外，不需要为其他的事去费心。而 wordpress 就不一样了，因为是独立的博客平台，所有的部分都需要亲力亲为。比方博客的安全问题，数据库的备份，博客运营，流量导入，包括屏蔽垃圾的评论都需要自己一点点的做，当然 wordpress 提供了很多这方面的插件。由于是开源的代码，这些插件的稳定性，安全性，易用性都是有待考究的。 其次关于经济成本，点点网目前是没有任何收费的项目于服务的，所以基本上是零花费。而 wordpress ，需要自己的独立域名，需要服务器，当然笔者认为相当一大部分用户应该只需购买服务器中的一部分空间，但这仍是一笔不小的开销。以域名与普遍大小的博客空间为例， 100/ 年的域名费， 500/ 年的服务器空间租用费，一年 600 的开销对于一个普通用户来说一个值得商榷的数字。当然这还是只考虑一年的，如果你是一个长期写博客的博主，以下图片能更好的得出使用一个 wordpress 的博客成本，数字单位为元。</description>
      <content:encoded><![CDATA[<p>一般互联网爱好者都有自己的博客，即使不常耕耘也有所耳闻，并且有相当一大部分网民曾经是博客产品的忠实或者半忠实用户。今天我们就选取其中两个比较有代表意义的，一个是传统博客服务占有率最大的 <code>wordpress</code>，一个是被业内称为传统博客升级的轻博客代表点点网，两者来做一个横向对比评测。</p>
<p>首先我们先来简单了解一下这两个博客工具。点点网是一个轻博客平台，让用户能简单快速地发布文字、图片、视频等各种格式内容，通过不同的风格展示，来分享用户兴趣或体现用户的性格，而近期推出的模板开发平台，也将其博客开放平台的理念进一步延伸，而 WordPress 是一种使用 PHP 语言开发博客平台的免费开源项目，用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的网志。在以上短短一句话里，我们就会发现很多有意思的词，比方轻博客、 PHP 、服务器等等。再接下去的内容中，笔者会逐一为您解释这些词在比较这两个博客平台的特点中的发挥的作用。</p>
<h3 id="产品特点">产品特点</h3>
<p>从概述中我们不难看出，点点网属于一个轻博客平台而 Wordpress 是一个开源的项目。什么叫做轻博客？轻博客是传统博客的升级，将传统多种格式内容发布简单化，加入标签体系，用户因兴趣而聚合具有社交功能，提供完全开放的博客平台，并融入移动互联网的功能属性，以期每个人都能展现自己所在不同领域的自媒体价值。以点点网为例，其最大的特点可以用四个词概括简单、开放、社交、移动。</p>
<p>第一简单，点点网并没有一般传统博客提供的相册，视频、音乐盒等功能，而是将这些繁琐的分类统统抛开，将文字、图片、声音、影像、链接这五种格式内容统一由博文的形式发布。而如果要用简单来形容 Wordpress ，那是相当的勉强。众所周知 wordpress 是一个开源搭建独立博客平台的开放源码。说白了，就是给你一套程序，自己去改善，很难想象一个没有计算机基础，而要能够安装 web 服务器， PHP ，数据库以及搞定这之间的配置是有多难。所以对于初学者来说，从零开始让 wordpress 跑起来绝对不是一个愉快的经历。而在点点网，只需要邮箱、密码注册一个账号就可以开始自己的独立博客平台搭建。</p>
<p>第二开放，点点网自定义 HTML，CSS，Javascript 代码和提供各类精美模板的功能相结合，在做到保证了用户在网站操作的便捷性与易用性的同时最大程度的开放了可修改的模块，让用户能够更多地关注于创作的同时，也不失个性的表现。而 wordpress 就是一个将开放做到极致的博客工具，免费的开源代码，如果你有足够的 php 知识，甚至可以用 wordpress 搭建一个小型的 B2C 网店。当然，是需要你有足够的开发，数据库，网络知识的情况下，而这些条件对于我们一般的用户而言是没有的。所以 wordpress 的开放在实际意义上是具有一定局限性的。当然，如果你有一点皮毛的知识的话，搭了博客之后， wordpress 也提供了很多精美的免费模板和众多插件以供选择。</p>
<p>第三社交，关于这一点 wordpress 可以说是完败。但是 wordpress 败的有点理直气壮，因为 wordpress 建立的博客是一个很传统意义上的独立博客，它的作用更倾向于表达博主想表达的内容，于是乎有关于社交的部分就只存在与评论与交换友情链接这两个通用功能了。而点点网是一个轻博客平台，它的用户群组成了一个强大社会网络，关注，喜欢、订阅，转载，推送等等一系列的功能都可以为用户提供更好社交的服务。</p>
<p>第四移动，点点网的强大团队提供了各种移动客户端的产品支持，最近看到点点网新版的 iPhone 客户端，采用了目前比较前卫的侧滑手势 app 设计方式，只需要输入点点网的账号，就可以随心所欲发布文章，图片，和视频，高质量大图和多图混排的展示通过嵌套的方式，用户体验完全不像是一个客户端，而是直接全屏浏览图片，非常流畅易用。而相比之下， wordpress 因为只是一个开源工具，那么这些事就都需要用户自己来做，进行一番繁琐的配置后才能和 wordpress 的服务器相连接。</p>
<h3 id="使用成本">使用成本</h3>
<p>关于两个产品的使用成本比较，我们分成两部分，脑力成本，经济成本。
首先关于脑力成本，因为点点网是有强大专业的技术与运营团队在做支撑。所以，基本上用户除了需要关注自己博客的内容与喜欢的内容之外，不需要为其他的事去费心。而 wordpress 就不一样了，因为是独立的博客平台，所有的部分都需要亲力亲为。比方博客的安全问题，数据库的备份，博客运营，流量导入，包括屏蔽垃圾的评论都需要自己一点点的做，当然 wordpress 提供了很多这方面的插件。由于是开源的代码，这些插件的稳定性，安全性，易用性都是有待考究的。
其次关于经济成本，点点网目前是没有任何收费的项目于服务的，所以基本上是零花费。而 wordpress ，需要自己的独立域名，需要服务器，当然笔者认为相当一大部分用户应该只需购买服务器中的一部分空间，但这仍是一笔不小的开销。以域名与普遍大小的博客空间为例， 100/ 年的域名费， 500/ 年的服务器空间租用费，一年 600 的开销对于一个普通用户来说一个值得商榷的数字。当然这还是只考虑一年的，如果你是一个长期写博客的博主，以下图片能更好的得出使用一个 wordpress 的博客成本，数字单位为元。</p>
<p>而当用户个人博客浏览量到达一定程度后，小型的服务器已无法承载大量的用户访问压力，包括用户在很长一段时间累计下来的博客内容数据也不是 1G 、 2G 的空间能够放置的时候，经济成本更是水涨船高。</p>
<h3 id="目标用户">目标用户</h3>
<p>根据以上，我们对点点网和 wordpress 的产品特点的比较与两者会在使用过程中出现的一些问题，不难看出点点网和 wordpress 最大的差别所在，就是产品种类不同。一个是轻博客的平台，一个开源的代码。这就造成了两个产品本身的最大的差异性。在这个大前提下，定位的目标用户群自然也不一样。点点网适配领域更广，各行各业包罗万象的希望专注于创作，专注于内容，专注于平台价值的用户群，而 wordpress 就比较适合一些有一定专业知识，又不怕麻烦，爱折腾的互联网 IT 人士。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>管理距离AD值(Administrative Distance)</title>
      <link>https://w.toomore.us/posts/networktech/%E7%AE%A1%E7%90%86%E8%B7%9D%E7%A6%BBad%E5%80%BC-administrative-distance/</link>
      <pubDate>Sun, 12 Aug 2012 23:02:28 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/%E7%AE%A1%E7%90%86%E8%B7%9D%E7%A6%BBad%E5%80%BC-administrative-distance/</guid>
      <description>管理距离
英文：administrative distance
缩写：AD
管理距离是指一种路由协议的路由可信度。每一种路由协议按可靠性从高到低，依次分配一个信任等级，这个信任等级就叫管理距离。
为什么要出现管理距离这个技术呢？
在自治系统内部，如RIP协议是根据路径传递的跳数来决定路径长短也就是传输距离，而像EIGRP协议是根据路径传输中的带宽和延迟来 决定路径开销从而体现传输距离的。这是两种不同单位的度量值，我们没法进行比较。为了方便比较，我们定义了管理距离。这样我们就可 以统一单位从而衡量不同协议的路径开销从而选出最优路径。正常情况下，管理距离越小，它的优先级就越高，也就是可信度越高。
对于两种不同的路由协议到一个目的地的路由信息，路由器首先根据管理距离决定相信哪一个协议。
AD值越低，则它的优先级越高。 一个管理距离是一个从0——255的整数值，0是最可信赖的，而255则意味着不会有业务量通过这个路由。
思科路由器默认情况下：
路由源 AD 直连接口 0 静态路由 1 EIGRP汇总路由 5 EBGP 20 EIGRP 90 IGRP 100 OSPF 110 IS-IS 115 RIP(v1&amp;amp;v2) 120 EGP 140 ODR 160 ExEIGRP (外部EIGRP) 170 IBGP 200 未知 255 华为路由器 默认情况下： 路由源 AD 直连路由 0 静态路由 60 IGRP 80 RIP 110 OSPF 150 BGP 170 修改管理距离命令
no distancedistance{ ip-address |wildcard | [access-list-number ] } distanceweight{ ip-address |wildcard | [ access-list-number ] } </description>
      <content:encoded><![CDATA[<p>管理距离</p>
<p>英文：administrative distance</p>
<p>缩写：AD</p>
<p>管理距离是指一种路由协议的路由可信度。每一种路由协议按可靠性从高到低，依次分配一个信任等级，这个信任等级就叫管理距离。</p>
<p>为什么要出现管理距离这个技术呢？</p>
<p>在自治系统内部，如RIP协议是根据路径传递的跳数来决定路径长短也就是传输距离，而像EIGRP协议是根据路径传输中的带宽和延迟来
决定路径开销从而体现传输距离的。这是两种不同单位的度量值，我们没法进行比较。为了方便比较，我们定义了管理距离。这样我们就可
以统一单位从而衡量不同协议的路径开销从而选出最优路径。正常情况下，管理距离越小，它的优先级就越高，也就是可信度越高。</p>
<p>对于两种不同的路由协议到一个目的地的路由信息，路由器首先根据管理距离决定相信哪一个协议。</p>
<p>AD值越低，则它的优先级越高。 一个管理距离是一个从0——255的整数值，0是最可信赖的，而255则意味着不会有业务量通过这个路由。</p>
<p>思科路由器默认情况下：</p>
<pre><code>路由源 AD
直连接口 0
静态路由 1
EIGRP汇总路由 5
EBGP 20
EIGRP 90
IGRP 100
OSPF 110
IS-IS 115
RIP(v1&amp;v2) 120
EGP 140
ODR 160
ExEIGRP (外部EIGRP) 170
IBGP 200
未知 255
华为路由器
默认情况下：
路由源 AD
直连路由 0
静态路由 60
IGRP 80
RIP 110
OSPF 150
BGP 170
</code></pre>
<p>修改管理距离命令</p>
<pre><code>no distancedistance{ ip-address |wildcard | [access-list-number ] }
distanceweight{ ip-address |wildcard | [ access-list-number ] }</code></pre>
]]></content:encoded>
    </item>
    
    <item>
      <title>思科在中国的总代及金牌、银牌代理商</title>
      <link>https://w.toomore.us/posts/internet/%E6%80%9D%E7%A7%91%E5%9C%A8%E4%B8%AD%E5%9B%BD%E7%9A%84%E6%80%BB%E4%BB%A3%E5%8F%8A%E9%87%91%E7%89%8C%E9%93%B6%E7%89%8C%E4%BB%A3%E7%90%86%E5%95%86/</link>
      <pubDate>Thu, 19 Jul 2012 22:54:27 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/%E6%80%9D%E7%A7%91%E5%9C%A8%E4%B8%AD%E5%9B%BD%E7%9A%84%E6%80%BB%E4%BB%A3%E5%8F%8A%E9%87%91%E7%89%8C%E9%93%B6%E7%89%8C%E4%BB%A3%E7%90%86%E5%95%86/</guid>
      <description>思科中国总代共四家：
神州数码科技发展公司 （优先总代）
北京晓通电子有限公司
英迈国际(中国)有限公司
联强国际（仅思科精睿）
金牌共四十六家：
万达信息股份有限公司 SHANGHAI WONDERS INFORMATION CO.，LTD.
上海华讯网络系统有限公司 ECCOM Network System Ltd.
上海金陵时威科技发展股份有限公司 Shanghai Shiwei Network SystemEngineering Co.， Ltd.
东软软件股份有限公司 Shenyang Neu-Alpine Software Co.， Ltd.
中国惠普有限公司 China Hewlett-Packard Co.， Ltd. (Beijing Head Office)
中盈优创资讯科技有限公司 Unihub China Information
中联电脑(国际)有限公司 VANDA COMPUTER &amp;amp; EQUIPMENT CO.， LTD.
云南南天电子信息产业股份有限公司 YUNNAN NANTIAN ELECTRONICINFORMATION CO.， LTD
亚信科技（中国）有限公司 AsiaInfo Technologies (China)， Inc.
亿阳信通股份有限公司 Bright Oceans Inter-TelecomCorporation
北京先进数通信息技术有限公司 ADVANCED DIGITAL TECHNOLOGYCOMPANY LTD
北京合力金桥系统集成技术有限公司 Beijing Hollybridge Co，.</description>
      <content:encoded><![CDATA[<p>思科中国总代共四家：</p>
<hr>
<p>神州数码科技发展公司  （优先总代）</p>
<p>北京晓通电子有限公司</p>
<p>英迈国际(中国)有限公司</p>
<p>联强国际（仅思科精睿）</p>
<p>金牌共四十六家：</p>
<hr>
<p>万达信息股份有限公司 SHANGHAI WONDERS INFORMATION CO.，LTD.</p>
<p>上海华讯网络系统有限公司 ECCOM Network System Ltd.</p>
<p>上海金陵时威科技发展股份有限公司 Shanghai Shiwei Network SystemEngineering Co.， Ltd.</p>
<p>东软软件股份有限公司 Shenyang Neu-Alpine Software Co.， Ltd.</p>
<p>中国惠普有限公司 China Hewlett-Packard Co.， Ltd. (Beijing Head Office)</p>
<p>中盈优创资讯科技有限公司 Unihub China Information</p>
<p>中联电脑(国际)有限公司 VANDA COMPUTER &amp; EQUIPMENT CO.， LTD.</p>
<p>云南南天电子信息产业股份有限公司 YUNNAN NANTIAN ELECTRONICINFORMATION CO.， LTD</p>
<p>亚信科技（中国）有限公司 AsiaInfo Technologies (China)， Inc.</p>
<p>亿阳信通股份有限公司 Bright Oceans Inter-TelecomCorporation</p>
<p>北京先进数通信息技术有限公司 ADVANCED DIGITAL TECHNOLOGYCOMPANY LTD</p>
<p>北京合力金桥系统集成技术有限公司 Beijing Hollybridge Co，.Ltd</p>
<p>北京同天科技有限公司 Town Sky International Limited</p>
<p>北京四达时代通讯网络技术有限公司 Beijing Star CommunicationNetwork Technology Co.， Ltd.</p>
<p>北京天桥北大青鸟科技股份有限公司 Tian Qiao Beida Jade Bird Sci-TeCo</p>
<p>北京宏天德美数码科技有限公司 Beijing DMX Technologies Limited</p>
<p>北京宝亮网智电子信息技术有限公司 Beijing Polybright IntellnetElectronic Information Technology Co.，Ltd.</p>
<p>北京市太极华青信息系统有限公司 Beijing TaijiHuaqing Info.SystemCo.，Ltd</p>
<p>北京康达联科信息技术有限公司 BEIJING COM-LINK INFORMATION &amp;TECHNOLOGY CO</p>
<p>北京新晨科技股份有限公司 Beijing Brilliance Technology Co.，Ltd.</p>
<p>北京新脉远望科技有限公司 Beijing Cyberplus Technology Co.， Ltd</p>
<p>北京神州新桥科技有限公司 BEIJING SINO-BRIDGE TECHNOLOGY LTD</p>
<p>北京能通万维网络科技有限公司 BEIJING NTONG NETWORKS TECHNOLOGYCO LTD</p>
<p>北鹰科技有限公司 North Eagle Technology Co.， Ltd</p>
<p>南京南大金利得电子科技有限公司 Gold Leader Electronic Science&amp; Tech. Co.， Ltd.</p>
<p>南京联创科技股份有限公司 LINKAGE SYSTEM INTERGRATION CO.， LTD.</p>
<p>国际商业机器中国有限公司 IBM China Company Limited</p>
<p>威发系统（中国）有限公司 WAFER SYSTEMS (China) Ltd.</p>
<p>宇广网络系统有限公司 EQUANT INTEGRATION SERVICES</p>
<p>广东天图科技有限公司 Guangdong Grand Cycle TechnologyCo.， Ltd.</p>
<p>广州新华时代数据系统有限公司 Times Data System Co.，Ltd.</p>
<p>方正奥德计算机系统有限公司 Founder Order Computer System Co.， Ltd.</p>
<p>智汇科技（中国）有限公司 COMMVERGE SOLUTIONS (ASIA) CO LTD</p>
<p>杭州荣志网络系统工程有限公司 HANGZHOU LONGZHI NETWORK SYSTEM</p>
<p>江苏金智科技股份有限公司 Wiscom System co.，Ltd</p>
<p>浙江大学快威科技集团有限公司 Zhejiang University QwareTechnology Group Co.， Ltd.</p>
<p>深圳市紫金支点技术股份有限公司 SHENZHEN ZIJIN FULCRUM TECHNOLOGYCO.， LTD.</p>
<p>特灵达新时技术有限公司 Telindus Technology Co.， Ltd.</p>
<p>电讯盈科（北京）有限公司 PCCW BEIJING LTD</p>
<p>神州数码集成系统有限公司 Digital China Holdings Limited</p>
<p>科联集成有限公司 Computer And Technologies IntegrationLimited</p>
<p>英思达计算机系统(深圳)有限公司 Shenzhen INFO-STAR Computer Systems Co.，Ltd.</p>
<p>达科数据通讯中国/香港有限公司 DatacraftChina/Hong Kong Limited</p>
<p>金科集团(香港)有限公司 Goldtech Group Co.</p>
<p>高威电信（广州）有限公司 Macroview Holding Co. Ltd</p>
<p>黎明网络有限公司 Liming Networks Systems Co.，Ltd</p>
<p>银牌共四十家：</p>
<hr>
<p>AT&amp;T (中国)有限公司 ATT CORP</p>
<p>上海亚太蓝星计算机信息技术有限公司 Shanghai Aisa&amp;Pacific LanStar Network Engineering Co.， Ltd.</p>
<p>上海宝信软件股份有限公司 SHANGHAI BAOSIGHT SOFTWARE CO.， LTD</p>
<p>上海时光科技发展有限公司 Time Technology Development Co.，LTD</p>
<p>上海玺辰信息系统有限公司 CGEN Information System Co.，Ltd.</p>
<p>上海网赢信息系统有限公司 NetStar Group (China)</p>
<p>上海致达信息产业股份有限公司 Shanghai Zenitek InformationIndustry Co.，Ltd</p>
<p>上海邮电电脑有限公司 SHANGHAI P&amp;T COMPUTER SYSTEM CO.，LTD.</p>
<p>上海银欣高新技术发展股份有限公司 SHANGHAI YINXIN NEW TECHNOLOGYDEVELOPMENT CO .，LTD</p>
<p>中太数据通信有限公司 Zoom Networks Inc.</p>
<p>北京中青旅海天数码科技有限公司 Beijing Cytsesky DigitalTechnology Co.Ltd.</p>
<p>北京华夏电通科技有限公司 BEIJING POWERCOM TECHNOLOGIES LTD</p>
<p>北京威亚斯科技有限公司 Beijing viyas Co.， Ltd</p>
<p>北京威奥特信通科技有限公司 BEIJING WAYOUT TELECOM TECHNOLOGYCO.，LTD.</p>
<p>北京宇信鸿泰科技发展有限公司 Beijing SI Hitech Co.，Ltd.</p>
<p>北京惠天九州科技有限公司 Beijing Huitian Xuye Technology Co.，Ltd.</p>
<p>北京新宇系统集成有限公司 Xiamen Newsky Software Co.， Ltd</p>
<p>北京易诚智讯科技发展有限责任公司 Beijing INTELLICOM TechnologyCo.，Ltd</p>
<p>北京网鼎系统集成有限责任公司 Winning Network System IntegrationCo.， Ltd.</p>
<p>北京联信永益科技有限公司 SUREKAM CORPORATION</p>
<p>北京艾提科信网络技术有限公司 BEIJING IT RESOURCES TELECOMTECHNOLOGY</p>
<p>北京西门子通信网络股份有限公司 Siemens Communication NetworksLtd.，Beijing</p>
<p>北京赛文世纪信息系统有限公司 BEIJING SEVENET INFORMATIONTECHNOLOGY COMP</p>
<p>北京龙翔达信息技术有限公司 BEIJING LXD INFORMATION TECHONOGIESLTD.</p>
<blockquote>
<p>华南资讯科技有限公司SINOBEST INFORMATION TECHNOLOGY LTD</p>
</blockquote>
<p>太极计算机股份有限公司 TAIJI COMPUTER CORP.</p>
<p>广东中实通信技术有限公司 GUANGDONG TRUSTOL COMMUNICATIONTECHNOLOGY CO</p>
<p>广州市金税信息系统集成有限公司 GUANGZHOU KINTH COMPUTER CO LTD</p>
<p>杭州怡德数码技术有限公司 HANGZHOU DELTEQ DIGITAL TECHNOLOGYCO LTD</p>
<p>浙江鸿程计算机系统有限公司 ZHEJIANG HONGCHENG COMPUTER SYSTEMCO.， LTD</p>
<p>浪潮集团有限公司 LANGCHAO GROUP LTD.</p>
<p>深圳市凌格科技有限公司 SHENZHEN LINK COMMUNICATION SYSTEMEQUIPMENT CO.， LTD.</p>
<p>深圳市和讯科技有限公司 Shenzhen Hicent Technology Ltd.</p>
<p>深圳市新太科技有限公司 Shenzhen Suntek Technology Co.，Ltd</p>
<p>深圳市方迪计算机系统有限公司 Shenzhen fortune computer systemco.，ltd</p>
<p>深圳市颖众电脑有限公司上海分公司 STEPTECH INC. (CHINA)</p>
<p>现代设备(中国)有限公司 MODERN DEVICES LTD</p>
<p>联想中望系统服务有限公司 China Weal Business Machinery Co.， Ltd.</p>
<p>西安海星计算机系统集成技术有限责任公司 Xi’anSeastar Computer System Integration Tech.Co.，Ltd.</p>
<p>重庆菲斯特信息网络有限责任公司 Chongqing First Information &amp;Network Co.，Ltd</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>黑莓7100T拆机全程实录</title>
      <link>https://w.toomore.us/posts/blackberry/%E9%BB%91%E8%8E%937100t%E6%8B%86%E6%9C%BA%E5%85%A8%E7%A8%8B%E5%AE%9E%E5%BD%95/</link>
      <pubDate>Sat, 30 Jun 2012 18:39:48 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/blackberry/%E9%BB%91%E8%8E%937100t%E6%8B%86%E6%9C%BA%E5%85%A8%E7%A8%8B%E5%AE%9E%E5%BD%95/</guid>
      <description> </description>
      <content:encoded><![CDATA[<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/fa5ea6eba6e6622dc3cf098e81001874882c1a61226e1b7832f45f1191d757ed.png" alt="1"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/16900eea1074a4a2f09548b9c42bf3a078be6a731b12d17ed7d13d94effa3fb1.png" alt="2"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/048ca205d89b49198aae1e477949b813e2939281d3e929b414f289c2393d7171.png" alt="4"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/ec065be6eabf8b583302bcab6980c5606400f6ce65b40dcc19bcf908859d6d78.png" alt="5"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/3b454032d9dd34356cfdd0f93b24692e9203b5e33aed8985e71bbcf5b3878026.png" alt="6"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/c88d4a634925b5828036131b9889fa9d6beab0c4c4ae68e2447f8ab1d844ed81.png" alt="7"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/084541c2b0c00e0fbfd142cb2141b9ccd5815c1db77c0f0fb09e010ededd2a5b.png" alt="8"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/9f606a4470e76c6b0d87fb0c2c94fb1066d0b893f7db96b98b840957c29bdcb1.png" alt="9"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/b87aca3c82979d755df9204ffb08b959a6e0073caaab7fde86ed4599b1586af6.png" alt="10"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/c1be30afa273ad04c6abfb9d1493f31b4b8e70ed8156d84070947b71b38fb67e.png" alt="11"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/2f007376ce2cd90f82abb0959ad3abca21fa6c56b8f8875fa2074efb59d9ebe9.png" alt="12"  />
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>CCNA静态路由配置实例</title>
      <link>https://w.toomore.us/posts/networktech/ccna%E9%9D%99%E6%80%81%E8%B7%AF%E7%94%B1%E9%85%8D%E7%BD%AE%E5%AE%9E%E4%BE%8B/</link>
      <pubDate>Tue, 12 Jun 2012 22:08:33 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/ccna%E9%9D%99%E6%80%81%E8%B7%AF%E7%94%B1%E9%85%8D%E7%BD%AE%E5%AE%9E%E4%BE%8B/</guid>
      <description>定义：
静态路由是指由网络管理员手工配置的路由信息。当网络的拓扑结构或链路的状态发生变化时，网络管理员需要手工去修改路由表中相关的静态路由信息。静态路由信息在缺省情况下是私有的，不会传递给其他的路由器。当然，网管员也可以通过对路由器进行设置使之成为共享的。静态路由一般适用于比较简单的网络环境，在这样的环境中，网络管理员易于清楚地了解网络的拓扑结构，便于设置正确的路由信息。
优点：
静态路由的另一个好处是网络安全保密性高。动态路由因为需要路由器之间频繁地交换各自的路由表，而对路由表的分析可以揭示网络的拓扑结构和网络地址等信息。因此，网络出于安全方面的考虑也可以采用静态路由。
缺点：
大型和复杂的网络环境通常不宜采用静态路由。一方面，网络管理员难以全面地了解整个网络的拓扑结构；另一方面，当网络的拓扑结构和链路状态发生变化时，路由器中的静态路由信息需要大范围地调整，这一工作的难度和复杂程度非常高。
命令格式：
ip route 目标网段ip地址/网络地址 目标网段子网掩码 下一跳路由器接口地址/本路由器接口地址 AD
以下为静态路由配置实例：
R1 en config t host R1 banner motd #I&amp;#39;m R1# ena pass cisco no ip domain lookup line cons 0 logg syn no exec-timeout line vty 0 4 login password ccie int s0/0 ip add 21.0.0.1 255.255.255.0 clock rate 64000 no shut int s0/1 ip add 12.0.0.1 255.255.255.0 no shut int e1/0 ip add 172.16.1.254 255.255.255.0 no shut exit ip route 192.</description>
      <content:encoded><![CDATA[<p>定义：</p>
<p>静态路由是指由网络管理员手工配置的路由信息。当网络的拓扑结构或链路的状态发生变化时，网络管理员需要手工去修改路由表中相关的静态路由信息。静态路由信息在缺省情况下是私有的，不会传递给其他的路由器。当然，网管员也可以通过对路由器进行设置使之成为共享的。静态路由一般适用于比较简单的网络环境，在这样的环境中，网络管理员易于清楚地了解网络的拓扑结构，便于设置正确的路由信息。</p>
<p>优点：</p>
<p>静态路由的另一个好处是网络安全保密性高。动态路由因为需要路由器之间频繁地交换各自的路由表，而对路由表的分析可以揭示网络的拓扑结构和网络地址等信息。因此，网络出于安全方面的考虑也可以采用静态路由。</p>
<p>缺点：</p>
<p>大型和复杂的网络环境通常不宜采用静态路由。一方面，网络管理员难以全面地了解整个网络的拓扑结构；另一方面，当网络的拓扑结构和链路状态发生变化时，路由器中的静态路由信息需要大范围地调整，这一工作的难度和复杂程度非常高。</p>
<p>命令格式：</p>
<blockquote>
<p>ip route 目标网段ip地址/网络地址 目标网段子网掩码 下一跳路由器接口地址/本路由器接口地址 AD</p>
</blockquote>
<p>以下为静态路由配置实例：</p>
<p><img loading="lazy" src="/images/content/posts/networkTech/20220116/19b17e18bcdb8421700707314a56ba94575d4a9c3b69609d9ed7f212b2f22cff.png" alt="拓扑图"  />
</p>
<pre tabindex="0"><code>R1
en
config t
host R1
banner motd #I&#39;m R1#
ena pass cisco
no ip domain lookup
line cons 0
logg syn
no exec-timeout
line vty 0 4
login
password ccie
int s0/0
ip add 21.0.0.1 255.255.255.0
clock rate 64000
no shut
int s0/1
ip add 12.0.0.1 255.255.255.0
no shut
int e1/0
ip add 172.16.1.254 255.255.255.0
no shut
exit
ip route 192.168.1.0 255.255.255.0 21.0.0.2 
ip route 192.168.1.0 255.255.255.0 12.0.0.2 2
exit
wr

R2
en
config t
host R2
banner motd #I&#39;m R2#
ena pass cisco
no ip domain lookup
line cons 0
logg syn
no exec-timeout
line vty 0 4
login
password ccie
int s0/0
ip add 21.0.0.2 255.255.255.0
clock rate 64000
no shut
int s0/1
ip add 12.0.0.2 255.255.255.0
no shut
int e1/0
ip add 192.168.1.254 255.255.255.0
no shut
exit
ip route 172.16.1.0 255.255.255.0 21.0.0.1 
ip route 172.16.1.0 255.255.255.0 12.0.0.1 2
exit
wr

PC1
en
config t
host PC1
banner motd #I&#39;m PC3#
ena pass cisco
no ip domain lookup
no ip routing
ip deafault-gateway 172.16.1.254
line cons 0
logg syn
no exec-timeout
line vty 0 4
login
password ccie
int e0/0
ip add 172.16.1.1 255.255.255.0
no shut
exit
exit
wr

PC2
en
config t
host PC2
banner motd #I&#39;m PC2#
ena pass cisco
no ip domain lookup
no ip routing
ip deafault-gateway 192.168.1.254
line cons 0
logg syn
no exec-timeout
line vty 0 4
login
password ccie
int e0/0
ip add 192.168.1.1 255.255.255.0
no shut
exit
exit
wr
</code></pre>]]></content:encoded>
    </item>
    
    <item>
      <title>OSI七层模型</title>
      <link>https://w.toomore.us/posts/networktech/osi%E4%B8%83%E5%B1%82%E6%A8%A1%E5%9E%8B/</link>
      <pubDate>Fri, 08 Jun 2012 21:08:26 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/osi%E4%B8%83%E5%B1%82%E6%A8%A1%E5%9E%8B/</guid>
      <description>第一课&amp;nbsp;OSI分层模型 时间：2012.6.4-6.5 OSI分层模型 ISO&amp;nbsp;（International&amp;nbsp;Organization&amp;nbsp;for&amp;nbsp;Standardization）&amp;nbsp;国际标准化组织 IOS&amp;nbsp;（Internet&amp;nbsp;work&amp;nbsp;0perating&amp;nbsp;System）网络操作系统 OSI&amp;nbsp;（Open&amp;nbsp;System&amp;nbsp;Interconnection）&amp;nbsp;&amp;nbsp;开放系统互联模型 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OSI&amp;nbsp;七层模型 优点： Reduces&amp;nbsp;complexity&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 降低复杂性 Standardizes&amp;nbsp;interfaces&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;标准化接口 Facilitates&amp;nbsp;modular&amp;nbsp;engineering &amp;nbsp; &amp;nbsp; &amp;nbsp; 有助于模块化的工程 Ensures&amp;nbsp;interoperable&amp;nbsp;technology &amp;nbsp; &amp;nbsp; &amp;nbsp;确保技术可以互相兼容 Accelerates&amp;nbsp;evolution &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 促进技术的发展 Simplifies&amp;nbsp;teaching&amp;nbsp;and&amp;nbsp;learning&amp;nbsp; &amp;nbsp; &amp;nbsp; 易于教学和学习 1.促进标准化工作,允许各个供应商进行开发. 2.各层间相互独立,把网络操作分成低复杂性单元. 3.灵活性好,某一层变化不会影响到别层，设计者可专心设计和开发模块功能. 4.各层间通过一个接口在相邻层上下通信 缺点： &amp;nbsp; &amp;nbsp; &amp;nbsp;1、许多功能在多个层次重复，有冗余感（如流控，差错控制等） &amp;nbsp; &amp;nbsp; &amp;nbsp;2、各层功能分配不均匀（链路、网络层任务重，会话层任务轻） &amp;nbsp; &amp;nbsp; &amp;nbsp;3、功能和服务定义复杂，很难产品化 &amp;nbsp; &amp;nbsp; &amp;nbsp;（实际应用中几乎没有完全按OSI七层模型设计的产品） &amp;nbsp;层 &amp;nbsp;作用 &amp;nbsp;协议 PDU协议数据单元 &amp;nbsp;设备 &amp;nbsp;应用&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;用户接口 &amp;nbsp;telnet&amp;nbsp;smtp&amp;nbsp;http.</description>
      <content:encoded><![CDATA[<h1 style="margin-bottom:0pt;margin-top:0pt;text-align:center;">
	<span style="font-size:22pt;font-family:宋体;">第一课</span><span style="font-size:22pt;font-family:宋体;">&nbsp;OSI<span style="font-family:宋体;">分层模型</span></span><span style="font-size:22pt;font-family:宋体;"><o:p></o:p></span>
</h1>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">时间：2012.6.4-6.5</span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><br />
</span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><br />
</span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">OSI<span style="font-family:宋体;">分层模型</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">ISO&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">（</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">International&nbsp;Organization&nbsp;for&nbsp;Standardization</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">）</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;国际标准化组织</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">IOS</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">（</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">Internet&nbsp;work&nbsp;0perating&nbsp;System</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">）</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">网络操作系统</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">OSI&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">（</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">O</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">pen&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">S</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">ystem&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">I</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">nterconnection</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">）</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;&nbsp;开放系统互联模型</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">OSI&nbsp;<span style="font-family:宋体;">七层模型</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">优点：</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">Reduces&nbsp;complexity</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 降低复杂性</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">Standardizes&nbsp;interfaces</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;标准化接口</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">Facilitates&nbsp;modular&nbsp;engineering &nbsp; &nbsp; &nbsp; 有助于模块化的工程</span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">Ensures&nbsp;interoperable&nbsp;technology &nbsp; &nbsp; &nbsp;确保技术可以互相兼容</span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">Accelerates&nbsp;evolution &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 促进技术的发展</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">Simplifies&nbsp;teaching&nbsp;and&nbsp;learning</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp; &nbsp; &nbsp; 易于教学和学习</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">1.<span style="font-family:宋体;">促进标准化工作</span><span style="font-family:'Times New Roman';">,</span><span style="font-family:宋体;">允许各个供应商进行开发</span><span style="font-family:'Times New Roman';">.</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">2.<span style="font-family:宋体;">各层间相互独立</span><span style="font-family:'Times New Roman';">,</span><span style="font-family:宋体;">把网络操作分成低复杂性单元</span><span style="font-family:'Times New Roman';">.</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">3.<span style="font-family:宋体;">灵活性好</span><span style="font-family:'Times New Roman';">,</span><span style="font-family:宋体;">某一层变化不会影响到别层，设计者可专心设计和开发模块功能</span><span style="font-family:'Times New Roman';">.</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">4.<span style="font-family:宋体;">各层间通过一个接口在相邻层上下通信</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">缺点：</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp; &nbsp; &nbsp;1、许多功能在多个层次重复，有冗余感（如流控，差错控制等）</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp; &nbsp; &nbsp;2、各层功能分配不均匀（链路、网络层任务重，会话层任务轻）</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp; &nbsp; &nbsp;3、功能和服务定义复杂，很难产品化</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp; &nbsp; &nbsp;（实际应用中几乎没有完全按<span style="font-family:'Times New Roman';">OSI</span><span style="font-family:宋体;">七层模型设计的产品）</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><o:p></o:p></span>
</p>
<p class="p0" style="text-align:left;margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';"><span style="font-family:宋体;"><br />
</span></span>
</p>
<p class="p0" style="text-align:left;margin-bottom:0pt;margin-top:0pt;">
	<span style="font-family:宋体;"><span style="font-size:14px;line-height:normal;">
	<table align="center" style="padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt;" border="1" bordercolor="#009900">
		<tbody>
			<tr>
				<td width="63" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;层</span>
					</p>
				</td>
				<td width="140" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;作用</span>
					</p>
				</td>
				<td width="108" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;协议</span>
					</p>
				</td>
				<td width="64" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">PDU<span style="font-family:宋体;">协议数据单元</span></span>
					</p>
				</td>
				<td width="106" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;设备</span>
					</p>
				</td>
			</tr>
			<tr>
				<td width="63" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;应用&nbsp;&nbsp;&nbsp;</span>
					</p>
				</td>
				<td width="140" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;用户接口</span>
					</p>
				</td>
				<td width="108" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;telnet&nbsp;smtp&nbsp;http...</span>
					</p>
				</td>
				<td width="64" valign="center" rowspan="3">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:宋体;">&nbsp;&nbsp;message</span>
					</p>
				</td>
				<td width="106" valign="center" rowspan="3">
					<p style="text-align:center;vertical-align:;">
						<span style="color:#009900;font-size:10.5pt;font-family:'Times New Roman';">（上三应用层、提供协议产生数据）</span><span style="font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;</span>
					</p>
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;</span>
					</p>
				</td>
			</tr>
			<tr>
				<td width="63" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;表示</span>
					</p>
				</td>
				<td width="140" valign="center">
					<p style="text-align:center;">
						<span style="font-size:9pt;font-family:'sans serif';">数据表示加密等特</span>
					</p>
					<p style="text-align:center;">
						<span style="font-size:9pt;font-family:'sans serif';">殊处理过程</span>
					</p>
				</td>
				<td width="108" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;ASCII&nbsp;JPEG&nbsp;...</span>
					</p>
				</td>
			</tr>
			<tr>
				<td width="63" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;会话</span>
					</p>
				</td>
				<td width="140" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;区分不同应用的数据</span>
					</p>
				</td>
				<td width="108" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;operating&nbsp;system..</span>
					</p>
				</td>
			</tr>
			<tr>
				<td width="63" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;传输</span>
					</p>
				</td>
				<td width="140" valign="center">
					<p style="text-align:center;">
						<span style="font-size:9pt;font-family:'sans serif';">可靠或不可靠的数据传输、</span>
					</p>
					<p style="text-align:center;">
						<span style="font-size:9pt;font-family:'sans serif';">数据重传前的错误纠正</span>
					</p>
				</td>
				<td width="108" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;TCP&nbsp;UDP&nbsp;SPX..</span>
					</p>
				</td>
				<td width="64" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;segment<span style="font-family:宋体;">字段</span></span>
					</p>
				</td>
				<td width="106" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="color:#009900;font-size:10.5pt;font-family:'Times New Roman';">（下四层数据流层）</span><span style="font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;</span><span style="font-size:9pt;font-family:'sans serif';">&nbsp;</span>
					</p>
				</td>
			</tr>
			<tr>
				<td width="63" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;网络</span>
					</p>
				</td>
				<td width="140" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">提供路由器决定路径的逻辑寻址</span>
					</p>
				</td>
				<td width="108" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;IP&nbsp;IPX&nbsp;RIP&nbsp;OSPF&nbsp;EIGRP</span>
					</p>
				</td>
				<td width="64" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;packet<span style="font-family:宋体;">（</span><span style="font-family:'sans serif';">IP</span><span style="font-family:宋体;">包）</span></span>
					</p>
				</td>
				<td width="106" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">路由器及具有路由功能的设备</span>
					</p>
				</td>
			</tr>
			<tr>
				<td width="63" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:宋体;">数</span><span style="font-size:9pt;font-family:'sans serif';">据链路</span>
					</p>
				</td>
				<td width="140" valign="center">
					<p style="text-align:center;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;用<span style="font-family:'sans serif';">MAC</span><span style="font-family:宋体;">地址访问介质</span></span>
					</p>
					<p style="text-align:center;">
						<span style="font-size:9pt;font-family:'sans serif';">、错误发现但不能纠正</span>
					</p>
				</td>
				<td width="108" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;MAC&nbsp;HDLC&nbsp;802.3</span>
					</p>
				</td>
				<td width="64" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;fram<span style="font-family:宋体;">（数据帧）</span></span>
					</p>
				</td>
				<td width="106" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">二层交换机</span>
					</p>
				</td>
			</tr>
			<tr>
				<td width="63" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">物理</span>
					</p>
				</td>
				<td width="140" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;规定电压、线速和线缆等</span>
					</p>
				</td>
				<td width="108" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;V.35</span>
					</p>
				</td>
				<td width="64" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">&nbsp;bit<span style="font-family:宋体;">流</span></span>
					</p>
				</td>
				<td width="106" valign="center">
					<p style="text-align:center;vertical-align:;">
						<span style="font-size:9pt;font-family:'sans serif';">集线器中、继器</span>
					</p>
				</td>
			</tr>
		</tbody>
	</table>
<br />
</span></span>
</p>
<p class="p0" style="text-align:left;margin-bottom:0pt;margin-top:0pt;">
	<span style="font-family:宋体;"><span style="font-size:14px;line-height:21px;"><br />
</span></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">线缆分类：</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp; &nbsp; &nbsp; &nbsp; 双绞线（主流）</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;T568A</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp;白绿&nbsp;绿&nbsp;白橙&nbsp;蓝&nbsp;白蓝&nbsp;橙&nbsp;白棕&nbsp;棕</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;&nbsp;1326<span style="font-family:宋体;">调换</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;T568B&nbsp;<span style="font-family:宋体;">白橙&nbsp;橙&nbsp;白绿&nbsp;蓝&nbsp;白蓝&nbsp;绿&nbsp;白棕&nbsp;棕</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 直通&nbsp;（异构设备）</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span style="font-size:10.5pt;font-family:宋体;color:#e53333;">现在设备</span><span style="font-size:10.5pt;font-family:'Times New Roman';color:#e53333;">一般自适</span><span style="font-size:10.5pt;font-family:宋体;color:#e53333;">应线缆</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 交叉&nbsp;（同构设备）</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">同轴电缆</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;粗缆<span style="font-family:'Times New Roman';">13υm &nbsp;</span><span style="font-family:宋体;">细缆</span><span style="font-family:'Times New Roman';">6.5υm</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">光&nbsp;&nbsp;纤</span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;单模（直线贵）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;黄色&nbsp;远</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp; &nbsp; &nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">多模（光折射便宜）&nbsp;&nbsp;橙色&nbsp;近</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">八爪线&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'宋体';">&nbsp;</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">V.35</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">PDU：&nbsp;<span style="font-family:宋体;">协议数据单元&nbsp;&nbsp;</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;">冲突域（collision domain)：</span><span style="font-family:宋体;font-size:10.5pt;">共享介质的网段，</span><span style="font-size:14px;">冲突域就是连接在同一导线上的所有工作站的集合</span><span style="font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;">,或者说是同一物理网段上所有节点的集合,或以太网上竞争同一带宽的节点集合.</span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="font-family:'Times New Roman';font-size:14px;line-height:21px;">广播域</span><span style="font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;">(Broadcast Domain)：</span><span style="font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;">是指网段上所有设备的集合。这些设备收听送往那个网段的所有广播。</span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><span style="font-size:18px;color:#e53333;">CSMA/CD&nbsp;</span><span style="font-family:宋体;font-size:18px;color:#e53333;">载波侦听多路访问</span><span style="font-family:'Times New Roman';font-size:18px;color:#e53333;">/</span><span style="font-family:宋体;"><span style="font-size:18px;color:#e53333;">冲突检测</span>（</span><span style="font-family:'Times New Roman';">carrier&nbsp;sense&nbsp;multiple&nbsp;access/collision&nbsp;detect)</span><span style="font-family:宋体;">：一种介质访问的控制方法，当在同一个共享网络中的不同节点同时传送数据包时，不可避免的会产生冲突，而</span><span style="font-family:'Times New Roman';">CSMA/CD</span><span style="font-family:宋体;">机制就是用来解决这种冲突问题。</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="font-family:'Times New Roman';font-size:10.5pt;"><span style="color:#e53333;">特点</span>：先听再说、边听边说、冲突停止、超时重传。</span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><span style="color:#e53333;">缺点</span>：每个站在发送数据之后的一小段时间内，存在着遭遇碰撞的可能性。</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="font-family:''Times New Roman'';"><span style="font-size:14px;line-height:21px;"><br />
</span></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">单&nbsp;&nbsp;工：收<span style="font-family:'Times New Roman';">/</span><span style="font-family:宋体;">发&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;收音机</span></span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">半双工：可以收发&nbsp;不能同时&nbsp;&nbsp;&nbsp;对讲机</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>
<p class="p0" style="margin-bottom:0pt;margin-top:0pt;">
	<span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';">全双工：可以同时收发 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;手机</span><span style="mso-spacerun:'yes';font-size:10.5000pt;font-family:'Times New Roman';"><o:p></o:p></span>
</p>]]></content:encoded>
    </item>
    
    <item>
      <title>8700G国产壳白色,太粗糙了</title>
      <link>https://w.toomore.us/posts/blackberry/8700g%E5%9B%BD%E4%BA%A7%E5%A3%B3%E7%99%BD%E8%89%B2%E5%A4%AA%E7%B2%97%E7%B3%99%E4%BA%86/</link>
      <pubDate>Sun, 20 May 2012 22:51:00 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/blackberry/8700g%E5%9B%BD%E4%BA%A7%E5%A3%B3%E7%99%BD%E8%89%B2%E5%A4%AA%E7%B2%97%E7%B3%99%E4%BA%86/</guid>
      <description>今天有事出去了，别让帮签收的快递！
刚到手的8700G白色国产壳，看着挺漂亮，摸在手里感觉太粗糙了，手感太差了！ 还是原装壳子好哇&amp;hellip;</description>
      <content:encoded><![CDATA[<p>今天有事出去了，别让帮签收的快递！<br>
刚到手的8700G白色国产壳，看着挺漂亮，摸在手里感觉太粗糙了，手感太差了！ 还是原装壳子好哇&hellip;</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/be95e7f01755b3dd7c72f52d008a33c4528a0e79fe87d8392ec9c2e5fed9612e.png" alt="1"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/2c172cd82e1a1c4593040a3e191cbd5572201c81ead924afd0cf8c232592228b.png" alt="2"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/2a49aef877f559d1ae8efc07c8f85138cc13f4bbb7006dfff76cd8e18daecfdc.png" alt="3"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/a9b307475834b9e72dcf5513cf7890ff7a1df55eb9c75d09a32387b70b60eb61.png" alt="4"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/1d6c257932eaf1a021fa84f75fc5a59fbeeceadb17679f74d4425ca388264bd3.png" alt="5"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/23a9e7052ad860a8b17e10a01764de15abe2b17c720927f330271f7520abb005.png" alt="6"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/20220115/86124fff33f789bb15814301155efaa27aed3b1ef6ab4edf112249f4f5b98bf7.png" alt="7"  />
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>黑莓7100T玉照曝光</title>
      <link>https://w.toomore.us/posts/blackberry/%E9%BB%91%E8%8E%937100t%E7%8E%89%E7%85%A7%E6%9B%9D%E5%85%89/</link>
      <pubDate>Sun, 13 May 2012 11:27:19 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/blackberry/%E9%BB%91%E8%8E%937100t%E7%8E%89%E7%85%A7%E6%9B%9D%E5%85%89/</guid>
      <description>小七用了一年多了玩腻歪了，本来想收藏起来的，但是手痒痒的不行想玩玩其他的机型，有想玩的童鞋们可以换机机哦！现在最想要一部牛头版的8700！
顶头的BBlogo，听筒有些磨损
下巴的Tmobile标志，很有范儿，喜欢。
和8707躺一起，一个胖纸一个瘦纸。
比我舒服哈，来朵花让我也温暖下。
这不知道啥东西，掉里面了。
背面，绝对震撼的扬声器。
右侧滚轮and返回键，干净简约。
顶头，电源键和若隐若现的信号灯。
左侧，2.5mm耳机接口+U口。
侧卧，身材不错。
这张不清晰
躺在29楼阳台的护栏上，玻璃有几个月没擦了。
全裸出镜</description>
      <content:encoded><![CDATA[<p>小七用了一年多了玩腻歪了，本来想收藏起来的，但是手痒痒的不行想玩玩其他的机型，有想玩的童鞋们可以换机机哦！现在最想要一部牛头版的8700！</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/tingtong.png" alt="顶头的BBlogo，听筒有些磨损"  />
</p>
<p>顶头的BBlogo，听筒有些磨损</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/xiaba.png" alt="下巴的Tmobile标志 很有范儿 喜欢"  />
</p>
<p>下巴的Tmobile标志，很有范儿，喜欢。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/with8707.png" alt="和8707在一起"  />
</p>
<p>和8707躺一起，一个胖纸一个瘦纸。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/withflower.png" alt="比我舒服哈，来朵花让我也温暖下"  />
</p>
<p>比我舒服哈，来朵花让我也温暖下。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/wihtgrass.png" alt="这不知道啥东西，掉里面了"  />
</p>
<p>这不知道啥东西，掉里面了。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/back.png" alt="背面，绝对震撼的扬声器"  />
</p>
<p>背面，绝对震撼的扬声器。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/right.png" alt="右侧滚轮and返回键，干净简约"  />
</p>
<p>右侧滚轮and返回键，干净简约。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/toppower.png" alt="顶头，电源键和若隐若现的信号灯"  />
</p>
<p>顶头，电源键和若隐若现的信号灯。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/left.png" alt="左侧，2.5mm耳机接口&#43;U口"  />
</p>
<p>左侧，2.5mm耳机接口+U口。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/side.png" alt="侧卧，身材不错"  />
</p>
<p>侧卧，身材不错。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/notcleaner.png" alt="这张不清晰"  />
</p>
<p>这张不清晰</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/29floor.png" alt="躺在29楼阳台的护栏上，玻璃有几个月没擦了"  />
</p>
<p>躺在29楼阳台的护栏上，玻璃有几个月没擦了。</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/naked.png" alt="全裸出镜"  />
</p>
<p>全裸出镜</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>黑莓手机电池的正确使用和保养</title>
      <link>https://w.toomore.us/posts/blackberry/%E9%BB%91%E8%8E%93%E6%89%8B%E6%9C%BA%E7%94%B5%E6%B1%A0%E7%9A%84%E6%AD%A3%E7%A1%AE%E4%BD%BF%E7%94%A8%E5%92%8C%E4%BF%9D%E5%85%BB/</link>
      <pubDate>Thu, 26 Apr 2012 14:58:11 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/blackberry/%E9%BB%91%E8%8E%93%E6%89%8B%E6%9C%BA%E7%94%B5%E6%B1%A0%E7%9A%84%E6%AD%A3%E7%A1%AE%E4%BD%BF%E7%94%A8%E5%92%8C%E4%BF%9D%E5%85%BB/</guid>
      <description>首先说说大家遇到过什么常见故障：
电池总也充不满，直接表现就是电池总是达不到100%；一充就满一打就没电，充满的电池用不到2天就没电了，甚至是1天不到就没电了；新买的电池用了不到3个月，就出现上述1和2的情况，电池过早老化了。真正的黑莓电池，按规定使用可以时间很长，官方承诺能用12个月以上，我已经用了24个月了，依然现在是每天电话、短信、上网炒股，还能坚持3天到4天，你们有多少人做到了？
造成的原因：
使用了不合适的旅行充电器，充电器充电电压高于5.5V，请自己检查自己的旅行充电器，同时你用的不是恒流充电器，而是恒压充电器，这两种概念后面我会详细说明。2、使用了没装桌面管理器的计算的USB给BB充电，不要以为桌面管理器只能用于数据同步，自己不用黑莓套餐就对自己没用，不向计算机上安装。自己检查一下，有多少人都没有安装这个软件。
是否每周都把BB接到有桌面管理的计算机上至少超过30分钟以上一次，做了电池的养护。是否电力15%以上就开始充电了，否则就是电池过度放电了，电池这么干过度放电一定会导致短命的。
1、黑莓喜欢频繁充电：黑莓手机本身设计就是让你不断连接PC，用来同步邮件、消息、OFFICE文档、拖笔记本上网等等，连接PC后，手机本身就自动开始充电了，因此实际上旅行充电器只是给你用来临时用一下的，长期用没好处，因此黑莓的设计本身就是&amp;mdash;-适应于频繁充电，而不是等没电了才去充电！ 这点和其他手机、掌上电脑、PDA都完全不同，所以对于黑莓手机，一定别怕频繁充电，反倒是怕你用到15%一下了才去充电，15%是我个人的经验值，如果等到10%警告并关闭了无线电，或者5%严重警号并且自动关机时才去充电，实际上电池已经开始过度放电了，因为黑莓的电池电量检测是真实的，和笔记本的一样，比其他手机、掌上电脑、PDA的电池电量的检测都要精确非常多，大家应该不少人都遇到过手机显示电池电量不准确，害得没及时充电，导致多打了一个电话就关机的情况吧。
2、黑莓手机喜欢USB方式充电：前提是你的计算机要已经安装了桌面管理器。黑莓的桌面管理器其实已经包含了黑莓的驱动程序，驱动包括Modem、端口、USB控制3个部分的程序，有用过BB拖笔记本上网功能的人都知道，桌面管理器不开，BB的Modem一定是不能正常使用的，原因就是桌面管理器打开了以后，Modem、端口控制2部分才能正常使用，对于USB控制，其实因为windows的即插即用功能，只要安装了桌面管理器，USB端口控制就会随windows一起启动了。
USB端口控制有什么用处？
简单说就是电流和数据控制传输模式控制。对于用USB充电来说，用安装了桌面管理器的计算机，实际上做到了用计算机给BB的电池进行了受控的充电，同时具备电池保养功能。
此时的BB电池充电，处于恒流充电状态下。这样的充电效果最好。
所谓恒流充电，这里需要说明一下，所有充电电池都标明多少毫安的电流充电最好，问题就是几乎所有充电器都不能做到恒流充电，而是恒压充电。恒流充电就是用恒定的电流充电，合理的电流是20到50毫安，问题就是这样充电太慢，虽然对电池好，后来出现了使用脉动直流电充电，此时电流能够提高10倍，用200毫安脉动直流电绢流（充2次放1次是一个充电动作单元）充电，此时几个小时就能充满了。
计算机行业标准规定：
USB2.0的最大输出电流能够达到500毫安，但是安装桌面管理器后，输出电流能够稳定到200毫安的脉动直流电，那么1100毫安小时容量的电池，理论充满时间就是2.2小时，与实际的3小时以内充满能够完全吻合，至于为何是脉动直流电？用计算机的端口写出101010&amp;hellip;..的信号太容易了，用这个信号给电池充电就是脉动直流电，而且保养电池，原理就是激活了电极、同时去除了电极上过极化物质，同时减低了电池内阻，这种充电方式不是专业的充电和电池维护仪器是达不到的。BlackBerry恒压充电的害处：当电池无电时（或电力不足时），此时用5V电压充电，当电池满电电压是4.2伏特，接近安全的用光状态电压是3.3伏特（单个电池单元的电池安全电压范围是1.1到1.4伏特，3个就是3.3伏特到4.2伏特）。那么用5伏特给3.3伏特充电，充电电流会很大，电池内部生成的化学物质晶体也很粗糙。当电压升高到接近4.2伏特时，电流会变小，实际上的充电电流变化过程就是从很大逐步变到很小，大电流重点对电池损伤很大，尤其是电池的电极和电解液中的还原剂的消耗，而小电流会导致很多电池实际上处于未完全充满状态，这样充电的电池直接表现就是电池不耐用，很多人因此责怪电池质量不佳。</description>
      <content:encoded><![CDATA[<p>首先说说大家遇到过什么常见故障：</p>
<p>电池总也充不满，直接表现就是电池总是达不到100%；一充就满一打就没电，充满的电池用不到2天就没电了，甚至是1天不到就没电了；新买的电池用了不到3个月，就出现上述1和2的情况，电池过早老化了。真正的黑莓电池，按规定使用可以时间很长，官方承诺能用12个月以上，我已经用了24个月了，依然现在是每天电话、短信、上网炒股，还能坚持3天到4天，你们有多少人做到了？</p>
<p>造成的原因：</p>
<p>使用了不合适的旅行充电器，充电器充电电压高于5.5V，请自己检查自己的旅行充电器，同时你用的不是恒流充电器，而是恒压充电器，这两种概念后面我会详细说明。2、使用了没装桌面管理器的计算的USB给BB充电，不要以为桌面管理器只能用于数据同步，自己不用黑莓套餐就对自己没用，不向计算机上安装。自己检查一下，有多少人都没有安装这个软件。</p>
<p>是否每周都把BB接到有桌面管理的计算机上至少超过30分钟以上一次，做了电池的养护。是否电力15%以上就开始充电了，否则就是电池过度放电了，电池这么干过度放电一定会导致短命的。</p>
<p>1、黑莓喜欢频繁充电：黑莓手机本身设计就是让你不断连接PC，用来同步邮件、消息、OFFICE文档、拖笔记本上网等等，连接PC后，手机本身就自动开始充电了，因此实际上旅行充电器只是给你用来临时用一下的，长期用没好处，因此黑莓的设计本身就是&mdash;-适应于频繁充电，而不是等没电了才去充电！ 这点和其他手机、掌上电脑、PDA都完全不同，所以对于黑莓手机，一定别怕频繁充电，反倒是怕你用到15%一下了才去充电，15%是我个人的经验值，如果等到10%警告并关闭了无线电，或者5%严重警号并且自动关机时才去充电，实际上电池已经开始过度放电了，因为黑莓的电池电量检测是真实的，和笔记本的一样，比其他手机、掌上电脑、PDA的电池电量的检测都要精确非常多，大家应该不少人都遇到过手机显示电池电量不准确，害得没及时充电，导致多打了一个电话就关机的情况吧。</p>
<p>2、黑莓手机喜欢USB方式充电：前提是你的计算机要已经安装了桌面管理器。黑莓的桌面管理器其实已经包含了黑莓的驱动程序，驱动包括Modem、端口、USB控制3个部分的程序，有用过BB拖笔记本上网功能的人都知道，桌面管理器不开，BB的Modem一定是不能正常使用的，原因就是桌面管理器打开了以后，Modem、端口控制2部分才能正常使用，对于USB控制，其实因为windows的即插即用功能，只要安装了桌面管理器，USB端口控制就会随windows一起启动了。</p>
<p>USB端口控制有什么用处？</p>
<p>简单说就是电流和数据控制传输模式控制。对于用USB充电来说，用安装了桌面管理器的计算机，实际上做到了用计算机给BB的电池进行了受控的充电，同时具备电池保养功能。</p>
<p>此时的BB电池充电，处于恒流充电状态下。这样的充电效果最好。</p>
<p>所谓恒流充电，这里需要说明一下，所有充电电池都标明多少毫安的电流充电最好，问题就是几乎所有充电器都不能做到恒流充电，而是恒压充电。恒流充电就是用恒定的电流充电，合理的电流是20到50毫安，问题就是这样充电太慢，虽然对电池好，后来出现了使用脉动直流电充电，此时电流能够提高10倍，用200毫安脉动直流电绢流（充2次放1次是一个充电动作单元）充电，此时几个小时就能充满了。</p>
<p>计算机行业标准规定：</p>
<p>USB2.0的最大输出电流能够达到500毫安，但是安装桌面管理器后，输出电流能够稳定到200毫安的脉动直流电，那么1100毫安小时容量的电池，理论充满时间就是2.2小时，与实际的3小时以内充满能够完全吻合，至于为何是脉动直流电？用计算机的端口写出101010&hellip;..的信号太容易了，用这个信号给电池充电就是脉动直流电，而且保养电池，原理就是激活了电极、同时去除了电极上过极化物质，同时减低了电池内阻，这种充电方式不是专业的充电和电池维护仪器是达不到的。BlackBerry恒压充电的害处：当电池无电时（或电力不足时），此时用5V电压充电，当电池满电电压是4.2伏特，接近安全的用光状态电压是3.3伏特（单个电池单元的电池安全电压范围是1.1到1.4伏特，3个就是3.3伏特到4.2伏特）。那么用5伏特给3.3伏特充电，充电电流会很大，电池内部生成的化学物质晶体也很粗糙。当电压升高到接近4.2伏特时，电流会变小，实际上的充电电流变化过程就是从很大逐步变到很小，大电流重点对电池损伤很大，尤其是电池的电极和电解液中的还原剂的消耗，而小电流会导致很多电池实际上处于未完全充满状态，这样充电的电池直接表现就是电池不耐用，很多人因此责怪电池质量不佳。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>51啦统计不能打开，求分析，求解释</title>
      <link>https://w.toomore.us/posts/internet/51%E5%95%A6%E7%BB%9F%E8%AE%A1%E4%B8%8D%E8%83%BD%E6%89%93%E5%BC%80%E6%B1%82%E5%88%86%E6%9E%90%E6%B1%82%E8%A7%A3%E9%87%8A/</link>
      <pubDate>Sun, 08 Apr 2012 12:00:18 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/51%E5%95%A6%E7%BB%9F%E8%AE%A1%E4%B8%8D%E8%83%BD%E6%89%93%E5%BC%80%E6%B1%82%E5%88%86%E6%9E%90%E6%B1%82%E8%A7%A3%E9%87%8A/</guid>
      <description>51啦挂了吗？！ 从早起到现在一直打不开哈&amp;hellip;</description>
      <content:encoded><![CDATA[<p>51啦挂了吗？！  从早起到现在一直打不开哈&hellip;</p>
<p><img loading="lazy" src="/images/content/posts/internet/20220116/44d30944a6c429282aa514d06e885e068e992d2bcbf30ef0b628ca6bd629e0ca.png" alt=""  />
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>处女作，黑莓8707G4.2主题出炉</title>
      <link>https://w.toomore.us/posts/blackberry/%E5%A4%84%E5%A5%B3%E4%BD%9C%E9%BB%91%E8%8E%938707g4.2%E4%B8%BB%E9%A2%98%E5%87%BA%E7%82%89/</link>
      <pubDate>Thu, 05 Apr 2012 22:20:39 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/blackberry/%E5%A4%84%E5%A5%B3%E4%BD%9C%E9%BB%91%E8%8E%938707g4.2%E4%B8%BB%E9%A2%98%E5%87%BA%E7%82%89/</guid>
      <description>咔咔！几经周折终于折腾出了一套8707G 4.2的主题，哈哈！
自我感觉良好&amp;hellip;
赞一个❤️
喜欢的朋友可以试试！
点此下载：黑莓自制主题for 87系列 4.2 4.5 OS</description>
      <content:encoded><![CDATA[<p>咔咔！几经周折终于折腾出了一套8707G 4.2的主题，哈哈！<br>
自我感觉良好&hellip;<br>
赞一个❤️<br>
喜欢的朋友可以试试！</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/1.png" alt="制作界面"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/2.png" alt="预览"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/view2.png" alt="预览2"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/view3.png" alt="预览3"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/view4.png" alt="预览4"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/view5.png" alt="预览5"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/view6.png" alt="预览6"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/view7.png" alt="预览7"  />
</p>
<p><img loading="lazy" src="/images/content/posts/blackBerry/view8.png" alt="预览8"  />
</p>
<p><a href="/attachs/BlackberryThemeByWanger.zip">点此下载：黑莓自制主题for 87系列 4.2 4.5 OS</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>我的2011</title>
      <link>https://w.toomore.us/posts/youth/my-2011/</link>
      <pubDate>Sun, 15 Jan 2012 23:48:36 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/my-2011/</guid>
      <description>有太多的东西想记录，无奈上不了网，手机将没电，先打个标题占位，等条件允许了再补充上去！ 只是可惜了我现在的万千思绪&amp;hellip;
无处诉衷肠!</description>
      <content:encoded><![CDATA[<p>有太多的东西想记录，无奈上不了网，手机将没电，先打个标题占位，等条件允许了再补充上去！ 只是可惜了我现在的万千思绪&hellip;<br>
无处诉衷肠!</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Xweibo手机版底部版权修改</title>
      <link>https://w.toomore.us/posts/website/xweibo%E6%89%8B%E6%9C%BA%E7%89%88%E5%BA%95%E9%83%A8%E7%89%88%E6%9D%83%E4%BF%AE%E6%94%B9/</link>
      <pubDate>Tue, 20 Dec 2011 00:18:36 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/xweibo%E6%89%8B%E6%9C%BA%E7%89%88%E5%BA%95%E9%83%A8%E7%89%88%E6%9D%83%E4%BF%AE%E6%94%B9/</guid>
      <description>刚接触Xweibo 时间不长，找了N久不知道在哪里修改底部版权，今天突然发现了手机版底部版权的修改位置，记录下来！
修改前
首先找到xweibo程序下的wap版底部信息模版文件：..\templates\wap\include\foot.tpl.php（..为xweibo安装目录）
打开后会看到如下代码：
&amp;lt;div class=&amp;#34;ft&amp;#34;&amp;gt; &amp;lt;a href=&amp;#34;#top&amp;#34; class=&amp;#34;gotop&amp;#34;&amp;gt;&amp;lt;?php LO(&amp;#39;common__template__goTop&amp;#39;);?&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;span class=&amp;#34;copyright&amp;#34;&amp;gt;Powered by Xweibo &amp;lt;?php echo WB_VERSION;?&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;/div&amp;gt; 将Powered by Xweibo &amp;lt;?php echo WB_VERSION;?&amp;gt;替换成你自己的信息就OK了。
&amp;lt;div class=&amp;#34;ft&amp;#34;&amp;gt; &amp;lt;a href=&amp;#34;#top&amp;#34; class=&amp;#34;gotop&amp;#34;&amp;gt;&amp;lt;?php LO(&amp;#39;common__template__goTop&amp;#39;);?&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;span class=&amp;#34;copyright&amp;#34;&amp;gt;Powered by &amp;lt;a target=&amp;#34;_blank&amp;#34; href=&amp;#34;http://w.toomore.us/m/&amp;#34;&amp;gt;Graysunshine&amp;lt;/a&amp;gt; &amp;lt;/span&amp;gt; &amp;lt;/div&amp;gt; 修改后
南职微博wap版演示地址：http://t.ncxyol.com/wap.php 电脑版：http://t.ncxyol.com</description>
      <content:encoded><![CDATA[<p>刚接触Xweibo 时间不长，找了N久不知道在哪里修改底部版权，今天突然发现了手机版底部版权的修改位置，记录下来！</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/4a3ea2645d5b813654ad488a185d52249b20eeda3915d4e6310b6586956980a9.png" alt="修改前"  />
<br>
修改前</p>
<p>首先找到xweibo程序下的wap版底部信息模版文件：<code>..\templates\wap\include\foot.tpl.php</code>（..为xweibo安装目录）</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/63862cffc53f1b04d916abddc4de80ba3e1ce78411beacf03998b9dccd35b991.png" alt="模板目录"  />
</p>
<p>打开后会看到如下代码：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>    &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;ft&#34;</span>&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        &lt;<span style="color:#f92672">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;#top&#34;</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;gotop&#34;</span>&gt;<span style="color:#75715e">&lt;?php LO(&#39;common__template__goTop&#39;);?&gt;</span>&lt;/<span style="color:#f92672">a</span>&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        &lt;<span style="color:#f92672">span</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;copyright&#34;</span>&gt;Powered by Xweibo <span style="color:#75715e">&lt;?php echo WB_VERSION;?&gt;</span>&lt;/<span style="color:#f92672">span</span>&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    &lt;/<span style="color:#f92672">div</span>&gt;
</span></span></code></pre></div><p>将<code>Powered by Xweibo &lt;?php echo WB_VERSION;?&gt;</code>替换成你自己的信息就OK了。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>    &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;ft&#34;</span>&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        &lt;<span style="color:#f92672">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;#top&#34;</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;gotop&#34;</span>&gt;<span style="color:#75715e">&lt;?php LO(&#39;common__template__goTop&#39;);?&gt;</span>&lt;/<span style="color:#f92672">a</span>&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        &lt;<span style="color:#f92672">span</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;copyright&#34;</span>&gt;Powered by &lt;<span style="color:#f92672">a</span> <span style="color:#a6e22e">target</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;_blank&#34;</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;http://w.toomore.us/m/&#34;</span>&gt;Graysunshine&lt;/<span style="color:#f92672">a</span>&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        &lt;/<span style="color:#f92672">span</span>&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    &lt;/<span style="color:#f92672">div</span>&gt;
</span></span></code></pre></div><p><img loading="lazy" src="/images/content/posts/website/20220115/9eb0fa5b33649b2d62b2a82647bf441a9b26be4e6774ce288ebf6358d281590a.png" alt="修改后"  />
<br>
修改后</p>
<p>南职微博wap版演示地址：<code>http://t.ncxyol.com/wap.php</code>  电脑版：<code>http://t.ncxyol.com</code></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>常用ping地址,逗逗搜索引擎,SEO必备</title>
      <link>https://w.toomore.us/posts/website/%E5%B8%B8%E7%94%A8ping%E5%9C%B0%E5%9D%80%E9%80%97%E9%80%97%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8Eseo%E5%BF%85%E5%A4%87/</link>
      <pubDate>Wed, 30 Nov 2011 03:43:10 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/%E5%B8%B8%E7%94%A8ping%E5%9C%B0%E5%9D%80%E9%80%97%E9%80%97%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8Eseo%E5%BF%85%E5%A4%87/</guid>
      <description> http://ping.baidu.com/ping/RPC2 http://blogsearch.google.com/ping/RPC2 http://blog.youdao.com/ping/RPC2 http://www.feedsky.com/api/RPC2 http://api.my.yahoo.com/RPC2 http://blog.iask.com/RPC2 http://www.zhuaxia.com/rpc/server.php http://www.xianguo.com/xmlrpc/ping.php http://ping.feedburner.com/ http://ping.blog.qikoo.com/rpc2.php http://rpc.technorati.com/rpc/ping http://rpc.pingomatic.com/ http://ping.feedburner.com http://www.syndic8.com/xmlrpc.php http://ping.weblogalot.com/rpc.php http://rpc.weblogs.com/RPC2 http://api.moreover.com/RPC2 http://rpc.blogrolling.com/pinger/ http://pingoat.com/goat/RPC2 http://pinger.blogflux.com/rpc http://api.moreover.com/RPC2 http://rpc.newsgator.com/ http://www.weblogues.com/RPC/ </description>
      <content:encoded><![CDATA[<pre tabindex="0"><code>    http://ping.baidu.com/ping/RPC2
    http://blogsearch.google.com/ping/RPC2
    http://blog.youdao.com/ping/RPC2 
    http://www.feedsky.com/api/RPC2
    http://api.my.yahoo.com/RPC2
    http://blog.iask.com/RPC2
    http://www.zhuaxia.com/rpc/server.php
    http://www.xianguo.com/xmlrpc/ping.php
    http://ping.feedburner.com/
    http://ping.blog.qikoo.com/rpc2.php
    http://rpc.technorati.com/rpc/ping
    http://rpc.pingomatic.com/ 
    http://ping.feedburner.com 
    http://www.syndic8.com/xmlrpc.php
    http://ping.weblogalot.com/rpc.php
    http://rpc.weblogs.com/RPC2 
    http://api.moreover.com/RPC2 
    http://rpc.blogrolling.com/pinger/
    http://pingoat.com/goat/RPC2
    http://pinger.blogflux.com/rpc 
    http://api.moreover.com/RPC2 
    http://rpc.newsgator.com/
    http://www.weblogues.com/RPC/
</code></pre>]]></content:encoded>
    </item>
    
    <item>
      <title>广告联盟盈利技巧</title>
      <link>https://w.toomore.us/posts/website/%E5%B9%BF%E5%91%8A%E8%81%94%E7%9B%9F%E7%9B%88%E5%88%A9%E6%8A%80%E5%B7%A7/</link>
      <pubDate>Fri, 11 Nov 2011 11:26:13 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/%E5%B9%BF%E5%91%8A%E8%81%94%E7%9B%9F%E7%9B%88%E5%88%A9%E6%8A%80%E5%B7%A7/</guid>
      <description>三项最常见和最常用的盈利模式分别是广告联盟、网页游戏和电子商务。
在《网站盈利方式面面观》中我们为站长介绍了多种盈利模式，本篇我们将通过网站盈利案例的方式告诉中小站长如何让自己的网站盈利。我们选了三项最常见和最常用的盈利模式，包括广告联盟、网页游戏和电子商务进行分析，并附录站长的观点和心得。这三项盈利模式是大多数中小站点的首选。
网站盈利的时机分析 并不是所有网站一开始就能取得盈利。一般网站都需要先丰富自身内容，形成自己的独有特色。其次，网站会拥有一定的用户群体，并留住这部分用户群体。最后，网站选择适合自己的盈利模式。无论网站最终是通过广告联盟赚取广告费盈利，还是通过网页游戏合作来赚取分成盈利，都是建立在网站用户群的基础之上。
因此，站长建站之初就需要一个正确心态，网站初期是投入期和成长期，这时候的网站基本上是无法带来收入的，站长要为自己预留时间与空间。等到网站拥有并留住了第一批忠实用户之后，那才是网站开始盈利的时机。
不同网站的不同盈利方法 互联网上存在各种各样的网站，而不同的网站盈利方法也不同。对于提供信息服务的网站，例如资讯网、社区平台等一般通过广告来盈利，其中中小站长又首选广告联盟进行盈利；提供服务与稀缺资源的网站，一般通过中介费、服务费等取得收入；通过网站来销售其它产品的网站，则是通过产品本身来实现盈利。站长应该根据自己网站的类型来选择适合自身的盈利方法。
经过以上两点分析，各位站长对网站盈利又有了新的认识，下面我们就以具体案例搭配站长观点、心得的方式为大家解读网站盈利的具体过程。
如何通过广告联盟进行盈利 在广告联盟的盈利个案中，我们选取了“看书小说网”和“网页吧”两个网站做为案例，小说站作为浏览量较高的中小站点之一，具有一定的典型性；而网页吧经过几年的积累和发展，在广告联盟盈利方面积累了不少经验。
在中小站点中，小说站是流量较大的网站之一。“看书小说网”的站长古羌认为，小说站要做好并实现盈利，最关键的要有三大因素首先是内容，小说站的内容是最重要的，有了好的内容才会更多的吸引用户；其次是流量，网站要盈利流量必需要上来，但增加流量除了适当的推广外，没有什么技巧可言；最后是要选择一个适合自己的广告联盟。
网页吧的盈利来源主要是包月广告和联盟广告。网站前期盈利主要是谷歌和百度广告联盟，其中百度联盟的广告比谷歌要好些，单价也高。也曾投放阿里妈妈，但是单价较低。另外，网站通过广告联盟盈利是建立在用户和流量的基础之上。内容为王，网站需要向用户提供优质的内容，才能吸引更多用户和流量。网页吧提供内容有两种方式：一是吸引别人来投稿，二是自己和编辑去别的地方找，比如一些博客和论坛。
如何选择广告联盟 通过对两个案例的采访，简单分析了他们如何通过广告联盟进行盈利。广告联盟作为大多数的中小站长首选的盈利模式，下面就看看其它站长如何看待广告联盟。我们将站长观点分为了四个部分：选择合适的广告联盟，广告联盟的一些经验技巧、广告联盟注意事项和广告联盟发展趋势等等。
youke4000：如何去选择广告联盟和联盟广告 相信不少站长经历过疯狂的SP抢钱时代，现在SMS已经开始萧条。那么现在个人站的主要盈利就要靠广告联盟了，选择好的广告联盟，必定增加你的网站收益。如何去选择一个好的广告联盟呢？
第一：要学会选择有信誉的广告联盟。
首先选择比较大的广告联盟。有经营资质的。最好是营业执照和ICP俱全，如果你选择的是个人开的广告联盟，那就存在一定的风险。如果联盟突然关闭，钱也就根本就别想再要回来了。选择信誉好的联盟，你可以通过朋友多了解下。不要盲目的就去做，多问问。可以在落伍者论坛发帖请教下老站长，会得到好的建议。最终根据建议进行参考对比一些你已经知道的几个联盟，最终选择去做哪个广告联盟。
第二：选择结算周期短的联盟。
一般的付款方式有周付、月付，还有日付的。现在广告联盟日付的应该很少了，建议选择周付的。如果结算周期比较长，风险性也就增加了不少，钱只有放到自己的口袋里才是自己的钱。
第三：看广告联盟数据返回周期。
联盟数据返回周期长，透明性就差。最好是选择实时返回的广告联盟，但是这个也要看你在联盟选择的广告商而定的。有的广告商的数据是第2天才返回，这样广告联盟也没有办法给你实时返回数据，只能是等到第二天了。总之尽量去选择数据返回周期短的广告联盟，把自己的损失减少到最低。
第四：选择一个负责的联盟客服人员。
我认为好客服对自己的帮助很大。也会帮你解决不少问题。如果广告代码出现了什么问题，要第一时间通知你，减少你的损失。这个也是比较关键的。
第五：测试联盟广告。
选择好广告联盟以后，就要选择适合网站的广告投放。首先要自己测试下联盟的广告。如果是点击广告，那么就浪费点自己的时间，找几个朋友去点点看，然后在自己看看数据的返回和扣量问题。相信每个广告联盟都存在扣量问题。但是通过自己的测试，心里就会知道大概扣量的比例。多选择几个联盟去测试，比较扣量的比例，选择扣量比较少的联盟广告去投放。如果是注册类的广告，也是同样的方法。（来源：落伍者论坛）
cai504 ：个人站长必读 深入分析国内广告联盟 广告联盟多的是，就算在国内，至少也有100家以上，对于没有经验的新手而言，选择联盟是一件非常头疼的事情。加入联盟之前一定要充分调查，以免浪费资源和精力，最后落个白辛苦。基本上，选择广告联盟的可以按照以下几个原则：
公司实力。做一个联盟之前，一定要先看一下这家公司的实力，一些大公司做的联盟会好一些，至少不会第二天人都消失了；
付款时间。初期最好选择付款周期短的，一般一周付款，长一些的要一个月，甚至更长，这样就是损失了也只有一周的时间；
联盟稳定程度。最好选择做一段时间的老联盟，当然我指的是一直活跃的老联盟，有些牌子虽是老的，但是是新做的；
信誉度。在做之前跟其它站长打听一下，这家联盟的信誉度，一定要选你信得过的站长打听，否则会有不实之言；
广告内容。根据网站定位选择，如果网站有长远的发展目标，那就要选择一些广告内容比较好的联盟来做，因为有些网站为了提高流量做一些带颜色广告让站长去推广，这样会影响网站的形象。
至于广告联盟是否是好联盟，是否好赚钱，还要看你投入使用后的评价。 （来源：菜园子SEO）
通过广告联盟盈利的经验 对于初入广告联盟的中小站长来说，需要掌握一些注意事项，也需要知道一些广告联盟的经验技巧，例如增加广告匹配度、增加广告点击量、提高广告单等等。这些对于站长从广告联盟盈利来说有事半功倍的效果。下面是一些站长总结的广告联盟经验技巧。
网页吧（www.wangyeba.com）站长 边缘人：我做联盟的七点小经验 不同时段放置不同广告。百度联盟的特点是：晚上8点后基本都是公益广告，也就是你放的广告基本是没钱的；谷歌的特点是：在下午15点开始到晚上12点之间的单价是最高的。所以我们在不同的时间放不同的广告，网站不同时间也显示不同的广告，例如：我在下午15点到24点放Google Adsence，在24点到15点放百度联盟广告。
让自己的网站向专业化、精细化发展。这一点也是对第1点的补充，当网站的内容越来越专业化后，百度联盟广告与网站的匹配度增强，公益广告就相应少。所以个人网站是应该向专业化发展的。
另外，我认为个人站长能力只有这么多，不能做的太广，一定要做专，做细，这样才有发展。你做的再大能做的过新浪和搜狐吗？不可能。做得大的结果就是你什么都做不好。做网站只做一个点，只有这样才有可能超过大网站。
联盟广告的大小要合适。我感觉联盟广告图片要大，这样点击效果会比较好。我测试觉得336*280的广告点击效果最好。
Google AdSence的广告位置排列要合适。我发现很多做Google AdSence的网站一个页面放好几个广告。Google AdSence最先出现的广告肯定是高价广告，然后下面的广告价格就低了，所以我们要把高价的广告放到点击最高的地方。
提高广告单价的技巧1：一般来说，一个页面放一个Google Adsence广告的收入要比放三个高。
提高广告单价的技巧2：一般来说，专业站的广告单价高。站长可以去掉那个单价低的网站广告，只投放单价高的。
例如：你有三个站放Google Adsence广告，一个站为小说站流量非常大，但是单价低；另外两个站为专业站，流量可能比较少点。如果你三个网站同时放广告的话，那么总的单价肯定非常低，别的两个专业站肯定也被拖的低了。并且点击率也低了。如果你去掉那个单价非常低的网站的广告。只放另外两个价格高的站。点的比例至少可以提高2到3倍。价格也高很多。总收入也高很多。
我以前用三个网站放Google Adsence 广告，总流量3W多IP。我后来去掉一个站，那个站的单价非常低的，最后流量只剩下1W多，但是我的总收入高了差不多1倍。
不作弊。现在广告联盟对作弊的惩罚比较严厉，谷歌还会警告，但是百度就直接K站了。所以站长一定不要点自己的广告。
做垃圾站不如做专业站，做主题站。垃圾站做着轻松，但没专业站赚钱。好主题站，靠广告联盟带来的收入也高于垃圾站。
个人站长选择做主题站有个好办法：做站前先去百度搜索下这个主题。看排在搜索前面的是什么站。如果是大型门户站或者别的非常专业的站排前，你做起来就有难度的。如果这个主题做竞价的非常多，那么这种类型的专业站肯定有发展，可以有钱赚。
站长站网友：增加广告匹配度 更好的用广告联盟盈利 目前，中国大多数站长都是中小站长，做网站社区都是使用Discuz!，收入基本靠广告联盟。说白了，我们的网站如同一个三角恋关系：广告联盟——DZ论坛——会员用户。
在这个三角关系中，广告联盟是最重要的，也就是广告商，只有广告多，广告点击多，中小站长才能生存和盈利。一般来说，广告联盟会根据网站的内容显示相应的广告。
例如，要做一个PHOTOSHOP的网站，如果选择广告联盟，首先会想到的是，可能显示的是平面类、模板类的广告。但实际情况是，你的网站会显示其它广告，例如电脑买卖，和一些公益类广告。
一方面的原因是平面广告比较少，另一方面是你网站的内容不够清晰，是做PHOTOSHOP的资料提供呢？还是平面设计人员交流呢？所以显示的广告不匹配，用户就点击少。
因此，中小站长一方面需要选一些热门主题（广告数量多，单价高）做网站，另外一方面也要让网站内容清晰化、专业化，这样网站上显示的广告匹配度才高，会员点击率也会高，才会有钱赚。
站长网网友：广告的点击率为什么低？ 相信很多站长和广告主都有发现一点，就是广告很少有人会去点。现在简单讲几点直接影响到网站广告点击率的问题：</description>
      <content:encoded><![CDATA[<p>三项最常见和最常用的盈利模式分别是广告联盟、网页游戏和电子商务。</p>
<p>在《网站盈利方式面面观》中我们为站长介绍了多种盈利模式，本篇我们将通过网站盈利案例的方式告诉中小站长如何让自己的网站盈利。我们选了三项最常见和最常用的盈利模式，包括广告联盟、网页游戏和电子商务进行分析，并附录站长的观点和心得。这三项盈利模式是大多数中小站点的首选。</p>
<h2 id="网站盈利的时机分析">网站盈利的时机分析</h2>
<p>并不是所有网站一开始就能取得盈利。一般网站都需要先丰富自身内容，形成自己的独有特色。其次，网站会拥有一定的用户群体，并留住这部分用户群体。最后，网站选择适合自己的盈利模式。无论网站最终是通过广告联盟赚取广告费盈利，还是通过网页游戏合作来赚取分成盈利，都是建立在网站用户群的基础之上。</p>
<p>因此，站长建站之初就需要一个正确心态，网站初期是投入期和成长期，这时候的网站基本上是无法带来收入的，站长要为自己预留时间与空间。等到网站拥有并留住了第一批忠实用户之后，那才是网站开始盈利的时机。</p>
<h2 id="不同网站的不同盈利方法">不同网站的不同盈利方法</h2>
<p>互联网上存在各种各样的网站，而不同的网站盈利方法也不同。对于提供信息服务的网站，例如资讯网、社区平台等一般通过广告来盈利，其中中小站长又首选广告联盟进行盈利；提供服务与稀缺资源的网站，一般通过中介费、服务费等取得收入；通过网站来销售其它产品的网站，则是通过产品本身来实现盈利。站长应该根据自己网站的类型来选择适合自身的盈利方法。</p>
<p>经过以上两点分析，各位站长对网站盈利又有了新的认识，下面我们就以具体案例搭配站长观点、心得的方式为大家解读网站盈利的具体过程。</p>
<h2 id="如何通过广告联盟进行盈利">如何通过广告联盟进行盈利</h2>
<p>在广告联盟的盈利个案中，我们选取了“看书小说网”和“网页吧”两个网站做为案例，小说站作为浏览量较高的中小站点之一，具有一定的典型性；而网页吧经过几年的积累和发展，在广告联盟盈利方面积累了不少经验。</p>
<p>在中小站点中，小说站是流量较大的网站之一。“看书小说网”的站长古羌认为，小说站要做好并实现盈利，最关键的要有三大因素首先是内容，小说站的内容是最重要的，有了好的内容才会更多的吸引用户；其次是流量，网站要盈利流量必需要上来，但增加流量除了适当的推广外，没有什么技巧可言；最后是要选择一个适合自己的广告联盟。</p>
<p>网页吧的盈利来源主要是包月广告和联盟广告。网站前期盈利主要是谷歌和百度广告联盟，其中百度联盟的广告比谷歌要好些，单价也高。也曾投放阿里妈妈，但是单价较低。另外，网站通过广告联盟盈利是建立在用户和流量的基础之上。内容为王，网站需要向用户提供优质的内容，才能吸引更多用户和流量。网页吧提供内容有两种方式：一是吸引别人来投稿，二是自己和编辑去别的地方找，比如一些博客和论坛。</p>
<h2 id="如何选择广告联盟">如何选择广告联盟</h2>
<p>通过对两个案例的采访，简单分析了他们如何通过广告联盟进行盈利。广告联盟作为大多数的中小站长首选的盈利模式，下面就看看其它站长如何看待广告联盟。我们将站长观点分为了四个部分：选择合适的广告联盟，广告联盟的一些经验技巧、广告联盟注意事项和广告联盟发展趋势等等。</p>
<h3 id="youke4000如何去选择广告联盟和联盟广告">youke4000：如何去选择广告联盟和联盟广告</h3>
<p>相信不少站长经历过疯狂的SP抢钱时代，现在SMS已经开始萧条。那么现在个人站的主要盈利就要靠广告联盟了，选择好的广告联盟，必定增加你的网站收益。如何去选择一个好的广告联盟呢？</p>
<p>第一：要学会选择有信誉的广告联盟。</p>
<p>首先选择比较大的广告联盟。有经营资质的。最好是营业执照和ICP俱全，如果你选择的是个人开的广告联盟，那就存在一定的风险。如果联盟突然关闭，钱也就根本就别想再要回来了。选择信誉好的联盟，你可以通过朋友多了解下。不要盲目的就去做，多问问。可以在落伍者论坛发帖请教下老站长，会得到好的建议。最终根据建议进行参考对比一些你已经知道的几个联盟，最终选择去做哪个广告联盟。</p>
<p>第二：选择结算周期短的联盟。</p>
<p>一般的付款方式有周付、月付，还有日付的。现在广告联盟日付的应该很少了，建议选择周付的。如果结算周期比较长，风险性也就增加了不少，钱只有放到自己的口袋里才是自己的钱。</p>
<p>第三：看广告联盟数据返回周期。</p>
<p>联盟数据返回周期长，透明性就差。最好是选择实时返回的广告联盟，但是这个也要看你在联盟选择的广告商而定的。有的广告商的数据是第2天才返回，这样广告联盟也没有办法给你实时返回数据，只能是等到第二天了。总之尽量去选择数据返回周期短的广告联盟，把自己的损失减少到最低。</p>
<p>第四：选择一个负责的联盟客服人员。</p>
<p>我认为好客服对自己的帮助很大。也会帮你解决不少问题。如果广告代码出现了什么问题，要第一时间通知你，减少你的损失。这个也是比较关键的。</p>
<p>第五：测试联盟广告。</p>
<p>选择好广告联盟以后，就要选择适合网站的广告投放。首先要自己测试下联盟的广告。如果是点击广告，那么就浪费点自己的时间，找几个朋友去点点看，然后在自己看看数据的返回和扣量问题。相信每个广告联盟都存在扣量问题。但是通过自己的测试，心里就会知道大概扣量的比例。多选择几个联盟去测试，比较扣量的比例，选择扣量比较少的联盟广告去投放。如果是注册类的广告，也是同样的方法。（来源：落伍者论坛）</p>
<h3 id="cai504-个人站长必读-深入分析国内广告联盟">cai504 ：个人站长必读 深入分析国内广告联盟</h3>
<p>广告联盟多的是，就算在国内，至少也有100家以上，对于没有经验的新手而言，选择联盟是一件非常头疼的事情。加入联盟之前一定要充分调查，以免浪费资源和精力，最后落个白辛苦。基本上，选择广告联盟的可以按照以下几个原则：</p>
<ol>
<li>
<p>公司实力。做一个联盟之前，一定要先看一下这家公司的实力，一些大公司做的联盟会好一些，至少不会第二天人都消失了；</p>
</li>
<li>
<p>付款时间。初期最好选择付款周期短的，一般一周付款，长一些的要一个月，甚至更长，这样就是损失了也只有一周的时间；</p>
</li>
<li>
<p>联盟稳定程度。最好选择做一段时间的老联盟，当然我指的是一直活跃的老联盟，有些牌子虽是老的，但是是新做的；</p>
</li>
<li>
<p>信誉度。在做之前跟其它站长打听一下，这家联盟的信誉度，一定要选你信得过的站长打听，否则会有不实之言；</p>
</li>
<li>
<p>广告内容。根据网站定位选择，如果网站有长远的发展目标，那就要选择一些广告内容比较好的联盟来做，因为有些网站为了提高流量做一些带颜色广告让站长去推广，这样会影响网站的形象。</p>
</li>
</ol>
<p>至于广告联盟是否是好联盟，是否好赚钱，还要看你投入使用后的评价。 （来源：菜园子SEO）</p>
<h2 id="通过广告联盟盈利的经验">通过广告联盟盈利的经验</h2>
<p>对于初入广告联盟的中小站长来说，需要掌握一些注意事项，也需要知道一些广告联盟的经验技巧，例如增加广告匹配度、增加广告点击量、提高广告单等等。这些对于站长从广告联盟盈利来说有事半功倍的效果。下面是一些站长总结的广告联盟经验技巧。</p>
<h3 id="网页吧wwwwangyebacom站长-边缘人我做联盟的七点小经验">网页吧（www.wangyeba.com）站长 边缘人：我做联盟的七点小经验</h3>
<ol>
<li>
<p>不同时段放置不同广告。百度联盟的特点是：晚上8点后基本都是公益广告，也就是你放的广告基本是没钱的；谷歌的特点是：在下午15点开始到晚上12点之间的单价是最高的。所以我们在不同的时间放不同的广告，网站不同时间也显示不同的广告，例如：我在下午15点到24点放Google Adsence，在24点到15点放百度联盟广告。</p>
</li>
<li>
<p>让自己的网站向专业化、精细化发展。这一点也是对第1点的补充，当网站的内容越来越专业化后，百度联盟广告与网站的匹配度增强，公益广告就相应少。所以个人网站是应该向专业化发展的。</p>
</li>
</ol>
<p>另外，我认为个人站长能力只有这么多，不能做的太广，一定要做专，做细，这样才有发展。你做的再大能做的过新浪和搜狐吗？不可能。做得大的结果就是你什么都做不好。做网站只做一个点，只有这样才有可能超过大网站。</p>
<ol start="3">
<li>
<p>联盟广告的大小要合适。我感觉联盟广告图片要大，这样点击效果会比较好。我测试觉得336*280的广告点击效果最好。</p>
</li>
<li>
<p>Google AdSence的广告位置排列要合适。我发现很多做Google AdSence的网站一个页面放好几个广告。Google AdSence最先出现的广告肯定是高价广告，然后下面的广告价格就低了，所以我们要把高价的广告放到点击最高的地方。</p>
</li>
<li>
<p>提高广告单价的技巧1：一般来说，一个页面放一个Google Adsence广告的收入要比放三个高。</p>
</li>
<li>
<p>提高广告单价的技巧2：一般来说，专业站的广告单价高。站长可以去掉那个单价低的网站广告，只投放单价高的。</p>
</li>
</ol>
<p>例如：你有三个站放Google Adsence广告，一个站为小说站流量非常大，但是单价低；另外两个站为专业站，流量可能比较少点。如果你三个网站同时放广告的话，那么总的单价肯定非常低，别的两个专业站肯定也被拖的低了。并且点击率也低了。如果你去掉那个单价非常低的网站的广告。只放另外两个价格高的站。点的比例至少可以提高2到3倍。价格也高很多。总收入也高很多。</p>
<p>我以前用三个网站放Google Adsence 广告，总流量3W多IP。我后来去掉一个站，那个站的单价非常低的，最后流量只剩下1W多，但是我的总收入高了差不多1倍。</p>
<ol start="7">
<li>
<p>不作弊。现在广告联盟对作弊的惩罚比较严厉，谷歌还会警告，但是百度就直接K站了。所以站长一定不要点自己的广告。</p>
</li>
<li>
<p>做垃圾站不如做专业站，做主题站。垃圾站做着轻松，但没专业站赚钱。好主题站，靠广告联盟带来的收入也高于垃圾站。</p>
</li>
</ol>
<p>个人站长选择做主题站有个好办法：做站前先去百度搜索下这个主题。看排在搜索前面的是什么站。如果是大型门户站或者别的非常专业的站排前，你做起来就有难度的。如果这个主题做竞价的非常多，那么这种类型的专业站肯定有发展，可以有钱赚。</p>
<h3 id="站长站网友增加广告匹配度-更好的用广告联盟盈利">站长站网友：增加广告匹配度 更好的用广告联盟盈利</h3>
<p>目前，中国大多数站长都是中小站长，做网站社区都是使用Discuz!，收入基本靠广告联盟。说白了，我们的网站如同一个三角恋关系：广告联盟——DZ论坛——会员用户。</p>
<p>在这个三角关系中，广告联盟是最重要的，也就是广告商，只有广告多，广告点击多，中小站长才能生存和盈利。一般来说，广告联盟会根据网站的内容显示相应的广告。</p>
<p>例如，要做一个PHOTOSHOP的网站，如果选择广告联盟，首先会想到的是，可能显示的是平面类、模板类的广告。但实际情况是，你的网站会显示其它广告，例如电脑买卖，和一些公益类广告。</p>
<p>一方面的原因是平面广告比较少，另一方面是你网站的内容不够清晰，是做PHOTOSHOP的资料提供呢？还是平面设计人员交流呢？所以显示的广告不匹配，用户就点击少。</p>
<p>因此，中小站长一方面需要选一些热门主题（广告数量多，单价高）做网站，另外一方面也要让网站内容清晰化、专业化，这样网站上显示的广告匹配度才高，会员点击率也会高，才会有钱赚。</p>
<h3 id="站长网网友广告的点击率为什么低">站长网网友：广告的点击率为什么低？</h3>
<p>相信很多站长和广告主都有发现一点，就是广告很少有人会去点。现在简单讲几点直接影响到网站广告点击率的问题：</p>
<p>一、当然就是广告的投放位置，这个是最重要的。</p>
<p>二、广告的内容 图片、文字广告：现在很多图片广告说的内容都非常假，什么三天五天学好英语，十几二十天讲一口流利的英语，还有什么时候一加入就怎么样的，几分钟干嘛干嘛的，一大堆虚假广告，人家看了根本就不相信，怎么可能还会去点这个广告呢。</p>
<p>三、网站广告不像电视等广告 网站广告不像电视广告，你想看那个节目是强制性加进去让你不看都不行，而网站广告呢，觉得不可信自然就不会去关注了，当然如果只是为展示某个品牌的话，就另当别论了。</p>
<p>四、网站链接的网址都是主页 如果人家在你的网站看到某种东西，点进去的目的为了更加详细的了解这件东西，而这些广告点进去几乎都是链接的主页去，别人还要花大半天的时间来找刚才的那件东西，当然出于广告主的话是可以理解，希望大家能进你的主页看到更多的东西。</p>
<p>下面讲几点个人对广告的看法，希望对那些广告主有所启发</p>
<p>一、投放位置 包括网站的类型，主要浏览人群(年龄段，性别，职业性质等)，根据广告的性质选择对应的人群，这样比较容易受到相应人群的关注。</p>
<p>二、广告内容 可以做得醒目或抢眼一点，主要是让人注意到，但是内容应该讲得平淡一点，不要夸大其辞，因为现在这种吹嘘的广告实在是多的让人讨厌。</p>
<p>三、广告链接 尽量直接链接到与广告相对应的地址去，不要让用户还在你的网站上面苦苦寻找。</p>
<p>几年前，大家还都不太了解，网络上布满了那些不切实际的广告，有太多人不懂便相信了这些广告，结果发现被骗。现如今，大家也已渐渐的意识到这点，所以这些广告也渐渐的没人关注了。</p>
<p>如果谷歌广告，百度主题等所有的广告联盟和所有的站长们，都能够意识到这点的话，并且采取行动，我相信，不久的将来，出现在网站的广告都变得真实可信，到那时候，广告点击率必将大涨。</p>
<h3 id="东莞在线wwwdg31com站长alan520-gg-vs-mm-哪种广告更划算">东莞在线（www.dg31.com）站长alan520 ：GG VS MM 哪种广告更划算</h3>
<p>现在中小站长的网站收入，几乎都是靠联盟广告。小联盟扣量，信用度不高，而百度联盟门槛太高，所以大多数站长选择了GG和MM(阿里妈妈)。</p>
<p>我现在有6个站，3个放MM，3个放GG。我其中一个网站PV5000左右，GG广告点击率为0.8%-1.5%，每天大概平均2-3美元。也没怎么优化，就是调整了下显示位置及背景颜色。</p>
<p>MM的广告就少得可怜，一天才几毛钱，而且广告匹配太差，因为广告商太少的缘故。MM最大的亮点就是可以直接出售广告位。但是对于草根小站长来说，卖出的机会实在太少，而且价格太低。一个位置1元一星期，连空间域名费都赔了。</p>
<p>要想赚点零花钱，还是去做GG吧。当然，流量大了，MM或许能卖个好价钱。</p>
<h3 id="站长站用户改善google-adsense表现与收入的7个要点">站长站用户：改善Google AdSense表现与收入的7个要点</h3>
<ol>
<li>
<p>首先，也是最重要的一点是，不要进行欺骗性点击，不要试图作弊，Google永远比你聪明，已经有太多账号被封的例子，不要心存侥幸，因为AdSense系统能记录每一次点击，而你只要有一次作弊，就会前功尽弃，以前所得的所有收入就都被没收了。</p>
</li>
<li>
<p>提高网站的内容质量。只有内容质量上去了，才能吸引人来浏览，才能提高AdSense的展示次数。只有展示次数多了，在同样有效点击率（CTR）的情况下，你的总有效点击次数才能上升。而且浏览量的加大也能提高Google对你的网站的广告投放力度，不知道你是否发现了网站上浏览量大的页面上的广告也多一些呢？</p>
</li>
<li>
<p>在做到前面两点的前提下，挑选一些比较贵的关键词。相信你已经发现网站的AdSense每次点击收入并不是千篇一律的，而是有的高有的低，原因是什么呢？相信你已经猜出来了，关键在于不同的关键词，每次点击费用是不一样的。这样，在你的页面里如果含有比较昂贵的关键词的话，所出现的广告的点击费用也是比较高的，这样同样的点击次数，所得的收入就更多了。</p>
</li>
<li>
<p>尽量不要用已经有很多人用到的关键词，因为某个关键词只有在展示的人越少的时候才越贵。你最好找一个有很多人竞价，但是能展示的人又很少的关键词。</p>
</li>
<li>
<p>尽量提高页面的PR值，有证据表明页面的PR值越高，每次点击的收入也会越高。而且PR值越高，越有利于浏览者通过搜索引擎搜索到你的页面，这样页面浏览量也会越大。</p>
</li>
<li>
<p>争取让网站的浏览者在北京时间的每天下午，也就是美国东部时间每天凌晨的时候点击你的AdSense广告，因为广告商会设定每天的最大广告费用，达到费用之后的点击都不会有收入了。</p>
</li>
</ol>
<p>通过广告联盟盈利注意事项</p>
<p>对比国内广告联盟，选择适合自己网站的广告联盟，这只是广告联盟入门的第一步。当站长开始使用广告联盟之后，又会存在哪些问题呢？《站长》杂志为大家选了一些站长观点，谈谈做广告联盟的注意事项。</p>
<h3 id="站长网网友靠广告联盟盈利需注意以下几点">站长网网友：靠广告联盟盈利需注意以下几点</h3>
<p>一、要“专心、专注、专业”——这是个人网站生存的根本，要专一领域、专注投入，而且这个领域是你和你的团队所熟悉的。</p>
<p>二、要耐得住寂寞。对广告联盟作弊的办法很多，但是流量的真假只有自己知道。怀才像怀孕，时间久了才知道，做网站也一样。</p>
<p>三、要坚持盈利这一目标。如果单纯凭借爱好做网站，终有一天激情会被燃尽。</p>
<p>四、要注重内容的实用性。这样才能吸引回头客。几个人来一次和一个人来几次的概念是不一样的。</p>
<h3 id="站长金刚草根站长的忠告-不作弊-请循序渐进">站长金刚：草根站长的忠告 不作弊 请循序渐进</h3>
<p>从2004年接触计算机到现在已经四年了，但是真正接触到SEO还是在一年前，也就是在一年前我知道了Google AdSense，知道了很多站长在通过它赚钱。也是在一年前我申请了自己人生中的第一个域名，买了100MB的空间，下载了程序，开始这一年来的建站之旅。</p>
<p>我承认那个时候自己是十足的菜鸟(虽然现在也很菜)，没有任何的SEO经验，我也承认当时脑袋里只想赚钱，当时的自己“很傻，很天真”，疯狂的在标题和说明里添加大量关键字。可能当时百度并没有注意到我，我的站有不错的排名，最高峰的时候日IP超过了1000，1000IP足以让一个建站不到一年的菜鸟感到极大的满足。这样持续了两个月，发现流量一直没有提高，接下来做了自己现在非常后悔的决定，更改了网站的大部分关键字，哎!!糊涂啊，懊悔啊，结果不用多说，百度惩罚了我，我的1000IP一夜之间变成了100IP。</p>
<p>祸不单行，服务器一直被挂马，来自Google的100多IP也离我而去。失去的不只是流量，一度丧失了建站的信心。不久前在朋友的鼓励下我开始了新的建站之旅，“不作弊，循序渐进”成了我二次建站的座右铭。第一次的失败，给我现在二次建站积累了经验。看着每天IP在不断增长，不断上升，也终于重拾了自己继续建站的信心，我知道自己“不是一个人在战斗”。</p>
<p>就写这么多吧，不是什么成功经验，也并不光彩，还是跟大家分享一下现在的心情，在“不作弊，循序渐进建站的思想指导之下”，草根站长们加油!!</p>
<h3 id="站长点石百度和谷歌对搜索引擎作弊不同的判定">站长点石：百度和谷歌对搜索引擎作弊不同的判定</h3>
<p>一、百度对作弊的判定条件</p>
<ol>
<li>
<p>在网页源代码中任何位置，故意加入与网页内容不相关的关键词。</p>
</li>
<li>
<p>在网页源代码中任何位置，故意大量重复某些关键词。即使与网页内容相关的关键词，故意重复也被视为作弊行为。</p>
</li>
<li>
<p>在网页中加入搜索引擎可识别但用户看不见的隐藏文字。无论是使用同背景色文字、超小字号文字、文字隐藏层、还是滥用图片ALT 等方法，都属于作弊行为。</p>
</li>
<li>
<p>故意制造大量链接指向某一网址的行为。</p>
</li>
<li>
<p>对同一个网址，让搜索引擎与用户访问到不同内容的网页(包括利用重定向等行为)。</p>
</li>
<li>
<p>作弊行为的定义是针对网站而不是网页的。一个网站内即使只有一个网页作弊，该网站也被认为是有作弊行为。</p>
</li>
<li>
<p>有链接指向作弊网站的网站，负连带责任，也会被认为是作弊(但是，作弊网站上链接指向的网站，不算作弊)。</p>
</li>
</ol>
<p>二、Google 对作弊的判定条件</p>
<ol>
<li>
<p>使用隐藏文本或隐藏链接。</p>
</li>
<li>
<p>采用隐藏真实内容或欺骗性重定向手段。</p>
</li>
<li>
<p>向 Google 发送自动查询。</p>
</li>
<li>
<p>使用无关用语加载网页。</p>
</li>
<li>
<p>创建包含大量重复内容的多个网页、子域或域。</p>
</li>
<li>
<p>创建安装病毒 (如，木马等)或其他有害软件的网页。</p>
</li>
<li>
<p>采用专门针对搜索引擎制作的“桥页”，或采用如联属计划这类原创内容很少或几乎没有原创内容的“俗套”(cookie cutter) 方式。</p>
</li>
</ol>
<p>这里强调一下百度的第7条，以前没注意过个问题，经过一个星期的检查，发现网站的友情链接部分好多交换的网站有作弊的行为，都及时删除了，不然也会影响网站的收录。太危险了，大家也要经常检查友情链接啊。</p>
<h3 id="站长电视剧网站被谷歌k掉后的解封方法">站长电视剧：网站被谷歌K掉后的解封方法</h3>
<p>谷歌从来都不会人工来检查或删除某一个网站，整个建立索引和排名的过程都用自动化的程序进行，如果你不是太过于作弊或者有其他一些对Google不友好的做法，一般是不会K站的。一般来说，只有一些行业性网站比较关注GG的排名。</p>
<p>下面简单谈一下，被GG封掉后，采取的一些解封方法。</p>
<p>首先，应该认真检查你的网站。如果有SEO作弊的嫌疑，则马上清除干净;如果你不是十分懂SEO，则不要做一些专门针对搜索引擎的设置，这有可能让你被认为作弊。</p>
<p>然后登录 Google 网站管理员中心，选择并注册Google网站管理员工具，登陆网站管理员工具控制台，点击工具下的请求重新审核。</p>
<p>重新审核，这个是核心的问题,什么情况下，你可以通过“重新审核”功能获得解决?其实，Google想知道两件事情：</p>
<p>A. 任何非法的操作都已经被清理和修改;</p>
<p>B. 这些错误以后不会再发生。你需要在提交的表单中告诉Google，你认为是什么原因导致你受惩罚，后来你采取什么方式更正。如果是你请SEO公司或个人导致你遭殃，请告诉Google这个事实。这样会让Google觉得你很真诚，并无恶意。</p>
<p>注意：不要问Google为什么封你的站点。每一个言语要礼貌和人性化。Google并没有欠你什么，他只会帮你在网络时代大挣一笔。</p>
<p>提交“检讨信”之后，需要多长时间才会被Google收录呢？这个和你站点的具体情况有关系，一般在2-3周。也有可能是更长时间。(朋友的站5天就重新收录了)</p>
<h3 id="站长电磁流量计百度k站三步解封方法">站长电磁流量计：百度K站三步解封方法</h3>
<p>曾有一家因关键字堆砌作弊被百度封锁3年之久，Alexa排名万名以内的行业门户站点找到我探询解封之道，当初被封他们也很快改正了，但是没有被原谅。时间过去不算短，技术人员也换了好几茬，网上传说的解封之道也是屡试屡败。和其负责人聊起的时候也只有无奈和心疼。</p>
<p>我提出了自己的看法并付诸行动，方法超级简单而且不花钱，在没有方法的情况下权且死马当做活马医的心态，因为方法即使失败结果也不可能更坏。一共走了3步：</p>
<ol>
<li>
<p>踢场子 百度每年都会配合代理商于星级酒店拉些企业负责人来参加营销会议。当然我们也收到了百度代理商的邀请函，会场上百度的营销专员慷慨激昂，底下听众也多半跃跃欲试签单，开放提问阶段居然都是批评百度的，其潜在顾客听了另一种声音血也开始冷了。营销专员脸面挂不住了，会后又要私下沟通一下，当然他根本没权利解封，但是肯定会汇报。</p>
</li>
<li>
<p>送流量 把以前部分频道上挂的AdSense广告通通取消掉。注册百度联盟，挂上百度的搜索条，随便几万个IP的流量，却带不来几毛钱，实在是寒，当然并不是为了赚钱，只是表示一种臣服的姿态，拱手孝敬一些流量。同时也证明现在的站点不靠百度流量也不小。</p>
</li>
<li>
<p>请求函 EMS一份请求解封函件，详细描述了被封的来龙去脉，并恳求解封。同时附上了网站所取得的文化部，信产部，通管局等七七八八的证件复印件。申诉本来是有专门邮箱的，但是我选择快件，信件相对Email更加郑重。结果是封了3年之久的站点，一周后开始重新收录，在3个月内已经达到正常收录水平，部分关键字达到理想水平。你能说这不是SEO吗?当然此次成功的方法，也未必保证能够COPY.因为我们局外人还是始终无法探知其内部处理的具体流程和准则。此种方法没有技术含量，谨供读者参考。</p>
</li>
</ol>
<h2 id="未来广告联盟的发展">未来广告联盟的发展</h2>
<p>前面介绍了广告联盟的选择、辨别与注意事项，还有站长做广告联盟的技巧经验等。对于站长来说，还有更重要的一点是，站长与广告联盟是互相依存的关系，广告联盟行业的发展和每一位站长都息息相关。是促进广告联盟健康良性的发展，还是破坏广告联盟的规则，寻找它的漏洞，从而影响整个广告联盟行业呢？这是中小站长需要深入思考的一个问题。</p>
<h3 id="站长冰剑广告联盟发展的下一个突破点">站长冰剑：广告联盟发展的下一个突破点</h3>
<p>国内广告联盟多数扮演着广告中介的角色。随着SP行业的整顿，广告联盟上下游同质化等问题的出现，广告联盟进入到新的探索阶段。个人站长是支持广告联盟发展的重要一环。支撑个人站长继续发展的两个原因无疑是对自己站点的热衷和从网络联盟带来广告收入。</p>
<p>目前国内个人网站有以下几个特点：</p>
<ol>
<li>站长年轻化。</li>
<li>网站资金问题是阻碍其发展的重要因素。</li>
<li>迫于盈利压力，业务发展无法特别专注。</li>
</ol>
<p>由于以上特点，在一定程度上也影响了广告联盟的进一步发展。如何管理好下游站长，规范广告投放市场，在保证广告主利益的同时，使个人站长可以更多的赢利，被看似像“鱼和熊掌”的关系。因此，大家纷纷寻找广告联盟发展的下一个突破点，有的增加新的广告产品，有的转向高端网站的广告代理业务，广告联盟发展的下一个突破点在哪呢？</p>
<ol>
<li>
<p>提高广告联盟在网络营销的专业性。目前广告联盟群体多扮演广告中介角色，从上游拿来广告代码直接投放给下游中小网站。而对于上游广告主，就是绝对依靠“广告效果数据”说话，而这个被量化的指标又常被广告主提起质疑。对于广告联盟，它的优势应不仅局限于广告中介，它对市场的敏感度、对站长、网民习惯的了解，应该有更多增值的点可以挖掘。如帮着广告主优化广告代码，选择正确的投放站点，而不是放开所有广告代码，任站长自行选择。</p>
</li>
<li>
<p>加强投放渠道的多元化。目前广告联盟多是中小网站的联盟，大型网站对于这种小单广告的热衷远没有中小站长高涨。也正因此，广告联盟中广告代码永远都是按效果付费，而缺少大牌广告主和品牌广告。因此，只有渠道的多元化才能带来上游广告的多元化。广告联盟可以通过代理、合作等方式选择与较大型网站合作，提高联盟品质。</p>
</li>
<li>
<p>加强行业联盟的建设。目前广告联盟中缺少专门的行业性较强的行业联盟，即把各行业网站吸纳至联盟中。虽然这类网站受众的专业性较强，但其带来的行业广告客户将是改变目前广告联盟上游同质化的一个好途径。</p>
</li>
<li>
<p>加强现有中小站长的规范与管理。如何在中小站长管理中更胜一筹，建立比同类联盟更巩固的站长联盟，是广告联盟发展的底层、也是基础性工作。中小站长被看作是一群趋利、忠诚度不高的人群，但事物始终有它的两面性，中小站长为何趋利，为何对网盟忠诚度不高?背后又影射出什么问题?网盟自身也要警醒，如何利用中小网站的长项，如何增进与他们的沟通，如何在第一时间发现他们的问题并且努力与他们共同解决，如何在广告投放中给他们指导性建议?这些都应该是每一个网盟所应该仔细思考的问题。与中小站长的沟通并不是一两次会议、一两个活动就可以解决，它是贯穿网盟工作的始终。</p>
</li>
</ol>
<h3 id="站长喝酒喝死你个人站长也得反省的一些问题">站长喝酒喝死你：个人站长也得反省的一些问题</h3>
<p>站长是弱势群体吗？也许是，也许不是，这个并不重要，我们也要不停的反省，不停的检讨。说说我碰到的几件事情：</p>
<p>有一个站长大呼某联盟是骗子，不发钱并封了自己的帐户。后来得知，是因为作弊被封，但是看到还有500元的收入，所以就拼命说某联盟的坏话。联盟扣量，这个大家都知道，选择自己最喜欢，效果最好的联盟去做，市场会影响到某联盟的最终走向。</p>
<p>联盟封ID，是小人。这样的联盟是令人恐怖的，但是如果本身原因是我们作弊。让别人封，怎么办？认了吧。中国站长的聪明和恐怖，全世界都领教了，绝大部分的国外联盟屏蔽了中国流量,并禁止中国网站参加。并不是说中国的流量没有价值，是中国的站长给他们带去的比拿走的要多的多。这样的情况，我们是支持广大的作弊站长，还是支持主动封的联盟呢？</p>
<p>很多联盟拒绝10万alexa以外的站长参加，是他们的无奈，也是值得我们反省的，不要一有事情就怪罪联盟。联盟不赚钱，来做公益，讲道理，他就不是联盟了</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>别了鬼地方,可能以后会感觉你是天堂</title>
      <link>https://w.toomore.us/posts/youth/goodbye-ghost-place-maybe-heaven-in-the-future/</link>
      <pubDate>Wed, 09 Nov 2011 22:36:20 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/goodbye-ghost-place-maybe-heaven-in-the-future/</guid>
      <description>别了鬼地方 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 真怀念四季分明的日子 这鬼地方气候乱七八糟 让人凌乱不堪 今天热死 明天冷死 昨天还睡着凉席 今天就想穿袄 实在是受够了 没来这里的时候幻想着 毕竟算是南方嘛 不会太冷吧 第一年我耳朵生冻疮了 回家以后让人笑了 第二年手心手背到处到处冻的都是小点 这忒M是在南方吗 热可以 冷我是非常受不了 这不 现在又直接从夏天过渡到冬天了 出去看看 穿什么的都有 羽绒服围个围巾 上边裹个毛衣加外套 下边还是短裤 看着特别的纠结 .</description>
      <content:encoded><![CDATA[<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;"><span style="font-size:32px;font-family:SimHei;">别了鬼地方</span></span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;"><u>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</u></span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:small;"><span class="Apple-style-span" style="line-height:26px;">真怀念四季分明的日子</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:small;"><span class="Apple-style-span" style="line-height:26px;">这鬼地方气候乱七八糟</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:small;"><span class="Apple-style-span" style="line-height:26px;">让人凌乱不堪</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:small;"><span class="Apple-style-span" style="line-height:26px;">今天热死 明天冷死</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">昨天还睡着凉席</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">今天就想穿袄</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">实在是受够了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">没来这里的时候幻想着</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">毕竟算是南方嘛</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">不会太冷吧</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">第一年我耳朵生冻疮了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">回家以后让人笑了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">第二年手心手背到处到处冻的都是小点</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">这忒M是在南方吗</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">热可以</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">冷我是非常受不了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">这不</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">现在又直接从夏天过渡到冬天了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">出去看看</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">穿什么的都有</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">羽绒服围个围巾</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">上边裹个毛衣加外套</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">下边还是短裤</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">看着特别的纠结</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">....</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">昨天貌似就立冬了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">晚上哆哆嗦嗦地</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">赶到教室开班会</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">还和往常一样</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">一个个埋头摆弄手机</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">等着老班宣布那点无关痛痒的破事</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">悠闲的样儿可以想象</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">.....</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">七点都过了好多分钟了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">还不见人来</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">教室有些小骚动</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">大家都等着说完事儿</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">去恰饭呢(学会的为数不多的本地方言)</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">这是神马情况&nbsp;</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">有什么事儿比大伙儿恰饭重要</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">？！</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">还是继续摆弄手机算了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">不一会儿</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">老班手持机密文件</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">一脸淫笑的来了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">肯定没啥好事儿</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">！！、</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">同学们狼真的来了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">11月中旬实习</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">还是<span style="color:#e53333;font-size:32px;">红头文件</span></span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#545454;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;"><u><span style="color:#e53333;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span></u></span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#e53333;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;color:#000000;">尽管大家都知道要实习</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">但还是突然的让人不能接受</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">...</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">本来还想着</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">在这里安分的过完最后一个光棍节</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">没有MM陪也可以</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">十二月份再拼一把英语六级</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">然后把那个刚改革的科目三给过了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;line-height:26px;font-size:small;color:#e53333;">已经以小白鼠的身份考了一次</span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;color:#e53333;">挂的惨不忍睹</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;color:#e53333;">冲的太快</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;color:#e53333;">注定是要牺牲的</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">....</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">现在好了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">一切都乱了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">该干的不该干的都没干</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">本来想买床被子</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">在这里过一个暖和的冬天</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">回去给童鞋们说说：</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">看！我今年哪里都没生冻疮！</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">好好的得瑟一把！</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">没机会了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">这个冬天注定要在另外一个比这个更陌生的地方度过</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">.....</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">晚上去餐厅</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">吃了下以前没吃过</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">本来想再喝一罐皮蛋肉饼汤</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">结果没了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">那就来份没喝过的</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">萝卜排骨吧</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">.....</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">有人敲门说:<span style="color:#e53333;">”你好贴个外卖单！“</span></span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#e53333;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;color:#000000;">贴你妹啊！</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#e53333;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;color:#000000;">外卖都把孩子吃的没人形了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#e53333;font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;color:#000000;">转念一想</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">咱当年刚来的时候</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">也风里来雨里去的送外卖来着</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">就把门开了</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">单子拿进来一看：<span style="font-size:32px;color:#e53333;">傻子外卖</span></span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#e53333;font-family:Arial;font-size:x-large;"><span class="Apple-style-span" style="line-height:26px;">o(︶︿︶)o&nbsp;</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#e53333;font-family:Arial;font-size:x-large;"><span class="Apple-style-span" style="line-height:26px;color:#000000;font-size:10px;">不知道</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="color:#e53333;font-family:Arial;font-size:x-large;"><span class="Apple-style-span" style="line-height:26px;color:#000000;font-size:10px;">吃了会不会变傻</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;"><span class="Apple-style-span" style="line-height:26px;">.......</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;line-height:26px;font-size:small;">NND 真的写不下去了</span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">从明天起好好上课吧</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">》。。。《</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">总归是要离开的</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">就在昨天还盼着诅咒着要 赶紧离开这鬼地方</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">希望以后不会觉的千方百计想离开的这鬼地方</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">原来是<span style="font-size:32px;color:#e53333;">天堂</span></span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;::&gt;_&lt;::&nbsp;</span></span> 
</p>
<p style="text-align:left;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 补充一下，就在刚才我写博客的时候又TM停电了，</span></span><span class="Apple-style-span" style="font-family:Arial;line-height:26px;font-size:x-small;">我写了半个钟头的博客差点就毛线都没了，停电这是经常的事儿，我电脑都被练成无敌主机了！本人比较懒没有中途保存的习惯，都是一股脑儿搞完才保存的，曾经有多少次一断电，几个小时的心血就全喂狗了！还好博客有自动保存功能，所以我现在还能心情比较平和地把这篇汉字敲完！</span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;line-height:26px;font-size:x-small;">走吧！真的想走了！</span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;line-height:26px;font-size:x-small;">太让人伤心了，这都要走了还不忘记停电！</span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;line-height:26px;font-size:x-small;">命苦....</span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:xx-small;"><span class="Apple-style-span" style="line-height:26px;"><br />
</span></span> 
</p>
<p style="text-align:center;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;"><u>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</u></span></span> 
</p>
<p style="text-align:right;">
	<span class="Apple-style-span" style="font-family:Arial;font-size:x-small;"><span class="Apple-style-span" style="line-height:26px;color:#e53333;">蜗牛于2011.11.9</span></span> 
</p>]]></content:encoded>
    </item>
    
    <item>
      <title>飞飞影视系统快播播放列表前缀修改</title>
      <link>https://w.toomore.us/posts/website/%E9%A3%9E%E9%A3%9E%E5%BD%B1%E8%A7%86%E7%B3%BB%E7%BB%9F%E5%BF%AB%E6%92%AD%E6%92%AD%E6%94%BE%E5%88%97%E8%A1%A8%E5%89%8D%E7%BC%80%E4%BF%AE%E6%94%B9/</link>
      <pubDate>Sat, 05 Nov 2011 01:36:13 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/%E9%A3%9E%E9%A3%9E%E5%BD%B1%E8%A7%86%E7%B3%BB%E7%BB%9F%E5%BF%AB%E6%92%AD%E6%92%AD%E6%94%BE%E5%88%97%E8%A1%A8%E5%89%8D%E7%BC%80%E4%BF%AE%E6%94%B9/</guid>
      <description>用飞飞采集的视频资源，用快播播放时播放列表右侧视频名称前缀会显示[www.ff84.com]的字样，这就有点不美观，呵呵！怎么把这个换成自己喜欢的字样捏？！
大家都知道修改的原理，但就是半天找不到这个文件在哪儿。本人找了几十分钟才找到的，现在拿出来晒晒！o(∩_∩)o 哈哈！
第一步：打开安装目录下\ff\Public\player\文件夹，你会发现许多后缀为js的文件。
第二步：找到qvod.js文件（快播的调用脚本程序），用记事本或者其他文本编辑器将其打开，找到 如下代码：
function $Qvodurl(url,urlname){ var qvodname = parent.vod_name.replace(/\//g,&amp;#34;&amp;#34;)+urlname; if(url.indexOf(&amp;#34;vod://&amp;#34;)&amp;gt;0){ url = url.split(&amp;#34;|&amp;#34;); qvodurl = url[0]+&amp;#34;|&amp;#34;+url[1]+&amp;#34;|[www.ff84.com]&amp;#34;+qvodname+&amp;#34;.rmvb|&amp;#34;; return qvodurl; } return url; } 将[www.ff84.com]替换为你想要的的文字就ok了！
修改后的效果如下图：
演示地址：http://v.ncxyol.com/?s=vod-read-id-9.html
嘿嘿！既然是开源程序，我们就要大改特改哈！ 希望能够对大家有帮助！</description>
      <content:encoded><![CDATA[<p>用飞飞采集的视频资源，用快播播放时播放列表右侧视频名称前缀会显示<code>[www.ff84.com]</code>的字样，这就有点不美观，呵呵！怎么把这个换成自己喜欢的字样捏？！</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/1c2a701f4510a3e7f6425d242400c49229d29e030eacd6e9f907a09f224cda97.png" alt="修改前"  />
</p>
<p>大家都知道修改的原理，但就是半天找不到这个文件在哪儿。本人找了几十分钟才找到的，现在拿出来晒晒！o(∩_∩)o 哈哈！</p>
<p>第一步：打开安装目录下<code>\ff\Public\player\</code>文件夹，你会发现许多后缀为js的文件。</p>
<p>第二步：找到<code>qvod.js</code>文件（快播的调用脚本程序），用记事本或者其他文本编辑器将其打开，找到 如下代码：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javaScript" data-lang="javaScript"><span style="display:flex;"><span>    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">$Qvodurl</span>(<span style="color:#a6e22e">url</span>,<span style="color:#a6e22e">urlname</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">qvodname</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">parent</span>.<span style="color:#a6e22e">vod_name</span>.<span style="color:#a6e22e">replace</span>(<span style="color:#e6db74">/\//g</span>,<span style="color:#e6db74">&#34;&#34;</span>)<span style="color:#f92672">+</span><span style="color:#a6e22e">urlname</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">url</span>.<span style="color:#a6e22e">indexOf</span>(<span style="color:#e6db74">&#34;vod://&#34;</span>)<span style="color:#f92672">&gt;</span><span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">url</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">url</span>.<span style="color:#a6e22e">split</span>(<span style="color:#e6db74">&#34;|&#34;</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">qvodurl</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">url</span>[<span style="color:#ae81ff">0</span>]<span style="color:#f92672">+</span><span style="color:#e6db74">&#34;|&#34;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">url</span>[<span style="color:#ae81ff">1</span>]<span style="color:#f92672">+</span><span style="color:#e6db74">&#34;|[www.ff84.com]&#34;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">qvodname</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#34;.rmvb|&#34;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">qvodurl</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">url</span>;
</span></span><span style="display:flex;"><span>    }
</span></span></code></pre></div><p>将<code>[www.ff84.com]</code>替换为你想要的的文字就ok了！</p>
<p>修改后的效果如下图：</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/284bd373c07ef59f5ee4639a4f5084fb1a19bdce053caff5cbba72a2b4e4477f.png" alt="修改后"  />
</p>
<p>演示地址：http://v.ncxyol.com/?s=vod-read-id-9.html</p>
<p>嘿嘿！既然是开源程序，我们就要大改特改哈！ 希望能够对大家有帮助！</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>飞飞影视系统title修改</title>
      <link>https://w.toomore.us/posts/website/%E9%A3%9E%E9%A3%9E%E5%BD%B1%E8%A7%86%E7%B3%BB%E7%BB%9Ftitle%E4%BF%AE%E6%94%B9/</link>
      <pubDate>Sat, 05 Nov 2011 01:00:46 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/%E9%A3%9E%E9%A3%9E%E5%BD%B1%E8%A7%86%E7%B3%BB%E7%BB%9Ftitle%E4%BF%AE%E6%94%B9/</guid>
      <description>网站标题直接影响这搜索引擎对网站的收录情况，飞飞影视管理系统未做修改前标题后边都会跟着-Powered by www.ff84.com。如下图：
通常大部分网站是通过修改模版文件修改标题的，而飞飞影视管理系统则不同。下面介绍下具体修改方法：
第一步：找到路径为\www\ff\Conf\setting.php 文件。“ff”是我的网站安装目录，这里可以替换成你自己的。
第二步：用编辑器打开setting.php文件找到如下代码：
&amp;#39;site_by&amp;#39; =&amp;gt; &amp;#39;-Powered by www.ff84.com&amp;#39;, 第三步：将代码中的-Powered by www.ff84.com去掉，保存文件，然后在网站后更新缓存，再次打开网站你会发现标题里头-Powered by www.ff84.com的字样已经消失不见了！如下图：
菜鸟刚开始用飞飞碰到的问题，记录下来希望可以帮到需要的童鞋！
演示网站：南职影吧http://v.ncxyol.com</description>
      <content:encoded><![CDATA[<p>网站标题直接影响这搜索引擎对网站的收录情况，飞飞影视管理系统未做修改前标题后边都会跟着<code>-Powered by www.ff84.com</code>。如下图：</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/ed4701ea09bd1e7f7f2560e6a506a921472a43bce2b79042094f346535261330.png" alt="标题"  />
</p>
<p>通常大部分网站是通过修改模版文件修改标题的，而飞飞影视管理系统则不同。下面介绍下具体修改方法：</p>
<p>第一步：找到路径为\www\ff\Conf\setting.php 文件。“ff”是我的网站安装目录，这里可以替换成你自己的。</p>
<p>第二步：用编辑器打开setting.php文件找到如下代码：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;site_by&#39;</span> <span style="color:#f92672">=&gt;</span> <span style="color:#e6db74">&#39;-Powered by www.ff84.com&#39;</span>,
</span></span></code></pre></div><p>第三步：将代码中的<code>-Powered by www.ff84.com</code>去掉，保存文件，然后在网站后更新缓存，再次打开网站你会发现标题里头<code>-Powered by www.ff84.com</code>的字样已经消失不见了！如下图：</p>
<p><img loading="lazy" src="/images/content/posts/website/20220115/1d9b1f7e5c9c6bfc87c9c66c4ec5a1463e6a04076f67d540c981b08355e2824a.png" alt="修改后的标题"  />
</p>
<p>菜鸟刚开始用飞飞碰到的问题，记录下来希望可以帮到需要的童鞋！</p>
<p>演示网站：南职影吧http://v.ncxyol.com</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>这才整明白啥叫被跨省,上网有风险,发帖需谨慎</title>
      <link>https://w.toomore.us/posts/internet/%E8%BF%99%E6%89%8D%E6%95%B4%E6%98%8E%E7%99%BD%E5%95%A5%E5%8F%AB%E8%A2%AB%E8%B7%A8%E7%9C%81%E4%B8%8A%E7%BD%91%E6%9C%89%E9%A3%8E%E9%99%A9%E5%8F%91%E5%B8%96%E9%9C%80%E8%B0%A8%E6%85%8E/</link>
      <pubDate>Sun, 30 Oct 2011 23:49:38 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/%E8%BF%99%E6%89%8D%E6%95%B4%E6%98%8E%E7%99%BD%E5%95%A5%E5%8F%AB%E8%A2%AB%E8%B7%A8%E7%9C%81%E4%B8%8A%E7%BD%91%E6%9C%89%E9%A3%8E%E9%99%A9%E5%8F%91%E5%B8%96%E9%9C%80%E8%B0%A8%E6%85%8E/</guid>
      <description>这只是最近网络上的流行语，并不是出于什么典故。
出处于以下河南灵宝市青年王帅在上海发帖反映家乡政府违法征地,被老家警方跨省追捕:
3月6日到3月13日，24岁的王帅在上海和河南灵宝看守所度过了他人生中最难熬的8天，只因他在网上发了篇“河南灵宝老农的抗旱绝招”这样一个揭露当地政府违法征地的帖子。令王帅没想到的是，他因此而获得一场牢狱之灾。他更没想到的是，灵宝市公安局的网警会如此有能耐，迅速认定发帖者是远在上海的他，并跨省追捕，将他“捉拿归案”。（据中国青年报4月8日报道）
王帅的遭遇狠狠地砸醒我们：上网有风险，发帖需谨慎。灵宝市公安局的办案效率无不说明：公安民警想破案，你逃天涯也枉然。
09年4月17号,灵宝市公安局局长宋中奎等赴上海向他道歉，称这是一起错案，王帅在网上发帖的行为不构成诽谤罪，公安机关在执法上有过错，没有严格按照有关法律规定办理，目前已经撤案。宋中奎表示，此案他当时不知情，但作为灵宝市公安局局长，在这件事上有不可推卸的责任，特向他道歉，并给予他国家赔偿。今后，公安人员将加强法制学习，认真吸取教训，避免类似问题发生。</description>
      <content:encoded><![CDATA[<p>这只是最近网络上的流行语，并不是出于什么典故。</p>
<p>出处于以下河南灵宝市青年王帅在上海发帖反映家乡政府违法征地,被老家警方跨省追捕:</p>
<p>3月6日到3月13日，24岁的王帅在上海和河南灵宝看守所度过了他人生中最难熬的8天，只因他在网上发了篇“河南灵宝老农的抗旱绝招”这样一个揭露当地政府违法征地的帖子。令王帅没想到的是，他因此而获得一场牢狱之灾。他更没想到的是，灵宝市公安局的网警会如此有能耐，迅速认定发帖者是远在上海的他，并跨省追捕，将他“捉拿归案”。（据中国青年报4月8日报道）</p>
<p>王帅的遭遇狠狠地砸醒我们：上网有风险，发帖需谨慎。灵宝市公安局的办案效率无不说明：公安民警想破案，你逃天涯也枉然。</p>
<p>09年4月17号,灵宝市公安局局长宋中奎等赴上海向他道歉，称这是一起错案，王帅在网上发帖的行为不构成诽谤罪，公安机关在执法上有过错，没有严格按照有关法律规定办理，目前已经撤案。宋中奎表示，此案他当时不知情，但作为灵宝市公安局局长，在这件事上有不可推卸的责任，特向他道歉，并给予他国家赔偿。今后，公安人员将加强法制学习，认真吸取教训，避免类似问题发生。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>为emlog添加Gravatar头像服务功能</title>
      <link>https://w.toomore.us/posts/website/%E4%B8%BAemlog%E6%B7%BB%E5%8A%A0gravatar%E5%A4%B4%E5%83%8F%E6%9C%8D%E5%8A%A1%E5%8A%9F%E8%83%BD/</link>
      <pubDate>Sat, 29 Oct 2011 20:53:15 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/%E4%B8%BAemlog%E6%B7%BB%E5%8A%A0gravatar%E5%A4%B4%E5%83%8F%E6%9C%8D%E5%8A%A1%E5%8A%9F%E8%83%BD/</guid>
      <description>找到主题的module.php文件，查找如下代码：
&amp;lt;div class=&amp;#34;comm&amp;#34;&amp;gt;&amp;lt;?php echo $value[&amp;#39;content&amp;#39;]; ?&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;#34;replycomm&amp;#34; id=&amp;#34;replycomm&amp;#34;&amp;gt;&amp;lt;?php echo $value[&amp;#39;cid&amp;#39;]?&amp;gt; &amp;lt;?php echo $reply; ?&amp;gt;&amp;lt;/div&amp;gt; 在这两句的前面加上
&amp;lt;img src=&amp;#34;http://www.gravatar.com/avatar/&amp;lt;?php echo md5($value[&amp;#39;mail&amp;#39;]); ?&amp;gt;&amp;#34; width=&amp;#34;48&amp;#34; height=&amp;#34;48&amp;#34;/&amp;gt; 48是头像宽、高，可以随便改动。
数显看下效果，已生效。
但是这样只显示评论者的头像，不显示博主的头像。
怎么办呢？哈哈，很简单撒，你自己喜欢什么头像，就直接弄一张图片上传到虚拟主机，在
&amp;lt;div id=&amp;#34;replycomm&amp;lt;?php echo $value[&amp;#39;cid&amp;#39;]; ?&amp;gt;&amp;#34; class=&amp;#34;adminreply&amp;#34;&amp;gt;&amp;lt;?php echo $reply; ?&amp;gt;&amp;lt;/div&amp;gt; 的前面加上&amp;lt;img src=&amp;quot;你图片的地址&amp;quot; width=&amp;quot;48&amp;quot; height=&amp;quot;48&amp;quot; /&amp;gt;。
哈哈，简单吧!
如果你还不满足，还想更加美观一点，比如，让自己的回复比评论者缩进一段距离，那么可以通过这样来实现。你加图片的时候这样写：
&amp;lt;div style=&amp;#34;padding-left:50px;&amp;#34;&amp;gt;&amp;lt;img src=&amp;#34;图片地址&amp;#34; width=&amp;#34;48&amp;#34; height=&amp;#34;48&amp;#34;/&amp;gt;&amp;lt;/div&amp;gt; 这样你的头像就缩进了50px了。但是回复内容没有缩进！要回复内容缩进的话，那么你就要修改css样式表了。</description>
      <content:encoded><![CDATA[<p>找到主题的module.php文件，查找如下代码：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>    &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;comm&#34;</span>&gt;<span style="color:#75715e">&lt;?php echo $value[&#39;content&#39;]; ?&gt;</span>&lt;/<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;replycomm&#34;</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;replycomm&#34;</span>&gt;<span style="color:#75715e">&lt;?php echo $value[&#39;cid&#39;]?&gt;</span> <span style="color:#75715e">&lt;?php echo $reply; ?&gt;</span>&lt;/<span style="color:#f92672">div</span>&gt;
</span></span></code></pre></div><p>在这两句的前面加上</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">img</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;http://www.gravatar.com/avatar/&lt;?php echo md5($value[&#39;mail&#39;]); ?&gt;&#34;</span> <span style="color:#a6e22e">width</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;48&#34;</span> <span style="color:#a6e22e">height</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;48&#34;</span>/&gt;
</span></span></code></pre></div><p>48是头像宽、高，可以随便改动。</p>
<p>数显看下效果，已生效。</p>
<p>但是这样只显示评论者的头像，不显示博主的头像。</p>
<p>怎么办呢？哈哈，很简单撒，你自己喜欢什么头像，就直接弄一张图片上传到虚拟主机，在</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;</span><span style="color:#a6e22e">div</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;replycomm&lt;?php echo </span><span style="color:#e6db74">$value[&#39;cid&#39;]</span><span style="color:#e6db74">; ?&gt;&#34;</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;adminreply&#34;</span><span style="color:#f92672">&gt;&lt;?</span><span style="color:#a6e22e">php</span> <span style="color:#66d9ef">echo</span> $reply; <span style="color:#75715e">?&gt;</span><span style="color:#960050;background-color:#1e0010">&lt;/div&gt;
</span></span></span></code></pre></div><p>的前面加上<code>&lt;img src=&quot;你图片的地址&quot; width=&quot;48&quot; height=&quot;48&quot; /&gt;</code>。</p>
<p>哈哈，简单吧!</p>
<p>如果你还不满足，还想更加美观一点，比如，让自己的回复比评论者缩进一段距离，那么可以通过这样来实现。你加图片的时候这样写：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">style</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;padding-left:50px;&#34;</span>&gt;&lt;<span style="color:#f92672">img</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;图片地址&#34;</span> <span style="color:#a6e22e">width</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;48&#34;</span> <span style="color:#a6e22e">height</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;48&#34;</span>/&gt;&lt;/<span style="color:#f92672">div</span>&gt;
</span></span></code></pre></div><p>这样你的头像就缩进了50px了。但是回复内容没有缩进！要回复内容缩进的话，那么你就要修改css样式表了。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>三层交换机实现VLAN间通信</title>
      <link>https://w.toomore.us/posts/networktech/%E4%B8%89%E5%B1%82%E4%BA%A4%E6%8D%A2%E6%9C%BA%E5%AE%9E%E7%8E%B0vlan%E9%97%B4%E9%80%9A%E4%BF%A1/</link>
      <pubDate>Thu, 27 Oct 2011 15:53:04 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/%E4%B8%89%E5%B1%82%E4%BA%A4%E6%8D%A2%E6%9C%BA%E5%AE%9E%E7%8E%B0vlan%E9%97%B4%E9%80%9A%E4%BF%A1/</guid>
      <description>实际局域网划分VLAN后，每个VLAN是一个单独的广播域，所以在默认情况下，不同VLAN中的计算机无法通信。允许此类计算机之间通信的一种方法是VLAN间路由，它是使用三层设备（如三层交换或路由器）从一个VLAN向另一个VLAN转发流量的过程。
VLAN与网络中唯一的IP子网相关联，VLAN中的每个设备配置一个相同网段的IP地址，不同的VLAN使用不同网段的IP地址。这种子网VLAN关联简化了多VLAN环境中的路由处理。三层交换机属于三层设备，因此，它是实现VLAN间设备通信的良好选择。
为了使第三层交换机执行路由功能，交换机上的VLAN接口需配置合适的IP地址，该地址就是VLAN中主机的网关地址。
下面通过一个实例来看三层交换机如何实现VLAN间路由。
下图所示是一个校园网的网络拓扑，要求所有计算机能够通过域名 ncxyol.com 访问web服务器，并且不同VLAN间的计算机可以相互通信。
VLAN划分如下：
VLAN10: PC1:192.168.1.1 PC2:192.168.1.2 PC3:192.168.1.3 默认网关：192.168.1.254 DNSserver:192.168.40.1 VLAN20: PC1:192.168.2.1 PC2:192.168.2.2 PC3:192.168.2.3 默认网关：192.168.2.254 DNSserver:192.168.40.1 VLAN30: PC1:192.168.3.1 PC2:192.168.3.2 PC3:192.168.3.3 默认网关：192.168.3.254 DNSserver:192.168.40.1 VLAN40: DNS服务器：192.168.40.1 在DNS服务器上添加一A条记录即web服务器的域名解析：ncxyol.com 192.168.40.2 Web服务器：192.168.40.2 默认网关：192.168.40.254 交换机配置如下：
SW1（三层交换机） en config t vtp mode server vtp domain jxdy vlan 10 name jxdy1 vlan 20 name jxdy2 vlan 30 name jxdy3 vlan 40 name jxdy4 int range f0/22 - 24 sw mode trunk no sh int range f0/1 - 2 swit mode acc sw acc vlan 40 no shut int vlan 10 ip add 192.</description>
      <content:encoded><![CDATA[<p>实际局域网划分VLAN后，每个VLAN是一个单独的广播域，所以在默认情况下，不同VLAN中的计算机无法通信。允许此类计算机之间通信的一种方法是VLAN间路由，它是使用三层设备（如三层交换或路由器）从一个VLAN向另一个VLAN转发流量的过程。</p>
<p>VLAN与网络中唯一的IP子网相关联，VLAN中的每个设备配置一个相同网段的IP地址，不同的VLAN使用不同网段的IP地址。这种子网VLAN关联简化了多VLAN环境中的路由处理。三层交换机属于三层设备，因此，它是实现VLAN间设备通信的良好选择。</p>
<p>为了使第三层交换机执行路由功能，交换机上的VLAN接口需配置合适的IP地址，该地址就是VLAN中主机的网关地址。</p>
<p>下面通过一个实例来看三层交换机如何实现VLAN间路由。</p>
<p>下图所示是一个校园网的网络拓扑，要求所有计算机能够通过域名 <code>ncxyol.com</code> 访问web服务器，并且不同VLAN间的计算机可以相互通信。</p>
<p><img loading="lazy" src="/images/content/posts/networkTech/20220116/9a982f389ec6a86d57ba5ad5b2b9181092b0722b80c3b1fe6c000e82b8948fff.png" alt="拓扑图"  />
</p>
<p>VLAN划分如下：</p>
<pre tabindex="0"><code>VLAN10:

PC1:192.168.1.1

PC2:192.168.1.2

PC3:192.168.1.3

默认网关：192.168.1.254

DNSserver:192.168.40.1

VLAN20:

PC1:192.168.2.1

PC2:192.168.2.2

PC3:192.168.2.3

默认网关：192.168.2.254

DNSserver:192.168.40.1

VLAN30:

PC1:192.168.3.1

PC2:192.168.3.2

PC3:192.168.3.3

默认网关：192.168.3.254

DNSserver:192.168.40.1

VLAN40:

DNS服务器：192.168.40.1

在DNS服务器上添加一A条记录即web服务器的域名解析：ncxyol.com  192.168.40.2

Web服务器：192.168.40.2

默认网关：192.168.40.254
</code></pre><p>交换机配置如下：</p>
<pre tabindex="0"><code>SW1（三层交换机）

en

config t

vtp mode server

vtp domain jxdy

vlan 10

name jxdy1

vlan 20

name jxdy2

vlan 30

name jxdy3

vlan 40

name jxdy4

int range f0/22 - 24

sw mode trunk

no sh

int range f0/1 - 2

swit mode acc

sw acc vlan 40

no shut

int vlan 10

ip add 192.168.1.254 255.255.255.0

no shut

int vlan 20

ip add 192.168.2.254 255.255.255.0

no shut

int vlan 30

ip add 192.168.3.254 255.255.255.0

no shut

int vlan 40

ip add 192.168.40.254 255.255.255.0

no shut

SW2

en

config t

vtp mode cli

vtp domain jxdy

int f0/24

swit mod trunk

no sh

exit

int f0/1

swit mode acc

swit acc vlan 10

no shut

int f0/2

swit mode acc

swit acc vlan 20

no shut

int f0/3

swit mode acc

swit acc vlan 30

no shut

SW3

en

config t

vtp mode cli

vtp domain jxdy

int f0/24

swit mod trunk

no sh

exit

int f0/1

swit mode acc

swit acc vlan 10

no shut

int f0/2

swit mode acc

swit acc vlan 20

no shut

int f0/3

swit mode acc

swit acc vlan 30

no shut

SW4

en

config t

vtp mode cli

vtp domain jxdy

int f0/24

swit mod trunk

no sh

exit

int f0/1

swit mode acc

swit acc vlan 10

no shut

int f0/2

swit mode acc

swit acc vlan 20

no shut

int f0/3

swit mode acc

swit acc vlan 30

no shut
</code></pre><p>按照如上方法配置成功以后，在SW1（三层交换机）上 show ip route 会发现四个直连路由:</p>
<pre tabindex="0"><code>Switch#show ip route

Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP

       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

       E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP

       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area

       * - candidate default, U - per-user static route, o - ODR

       P - periodic downloaded static route

Gateway of last resort is not set

C    192.168.1.0/24 is directly connected, Vlan10

C    192.168.2.0/24 is directly connected, Vlan20

C    192.168.3.0/24 is directly connected, Vlan30

C    192.168.40.0/24 is directly connected, Vlan40
</code></pre><p>配置就绪以后测试就会发现不同VLAN间可以通信了。</p>
<p>详细实验见附件：</p>
<p><a href="/attachs/RouteBetweenVlan.zip">三层交换机实现VLAN通信.zip</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>路由器的基本配置</title>
      <link>https://w.toomore.us/posts/networktech/%E8%B7%AF%E7%94%B1%E5%99%A8%E7%9A%84%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE/</link>
      <pubDate>Wed, 05 Oct 2011 20:29:22 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/%E8%B7%AF%E7%94%B1%E5%99%A8%E7%9A%84%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE/</guid>
      <description>[基础知识］ 路由器常用模式有：
①用户模式：提示符 &amp;gt;，登录路由器时进入该模式，在这个模式下只能查看部分交换机的信息，但不能修改信息。
②特权模式：提示符 #，该模式是进入各种配置状态的入口，在这个模式下也只能查看路由器的信息，但不能修改。这个模式通常设置密码保护。
③全局配置模式：提示符 (config)#，可以配置路由器的一些全局性信息，如名字、密码等。
④接口配置模式：提示符 (config-if)#，可以配置路由器的接口信息。
⑤路由配置模式：提示符 (config-router)#，可以在路由器上配置路由协议。
⑥线路配置模式：提示符 (config-line)# ，可以配置路由器连接线路的参数。
[实验内容］ 通过console连接到路由器；
将路由器的名称设置为CCNA；
为CCNA设置特权密码（password sss;secret cisco）；
启用控制台密码（ccna）；
为telnet访问启用密码（telccna）；
保存配置信息，重新启动路由器。
［实验步骤］ 本人没有真实的实验环境，只能在 Cisco Packet Tracer 做虚拟实验。
首先，添加一台路由器和一台PC机，选择console线，将二者连起来，然后在PC机中单击Terminal，设置相关串口参数，即可连接至路由器。
Router&amp;gt;enable Router#configure terminal Enter configuration commands, one per line. End with CNTL/Z. Router(config)#hostname CCNA CCNA(config)#enable password sss CCNA(config)#enable secret cisco CCNA(config)#line console 0 CCNA(config-line)#password ccna CCNA(config-line)#login CCNA(config-line)#exit CCNA(config)#line vty 0 4 CCNA(config-line)#password telccna CCNA(config-line)#login CCNA(config-line)#exit CCNA(config)#exit %SYS-5-CONFIG_I: Configured from console by console CCNA#copy running-config startup-config Destination filename [startup-config]?</description>
      <content:encoded><![CDATA[<p><img loading="lazy" src="/images/content/posts/networkTech/20220116/9b59c32f451934e356a5d1b38d06547cac4558f48f172e2f965542ca7cb3a533.png" alt="拓扑图"  />
</p>
<h2 id="基础知识">[基础知识］</h2>
<p>路由器常用模式有：</p>
<p>①用户模式：提示符 &gt;，登录路由器时进入该模式，在这个模式下只能查看部分交换机的信息，但不能修改信息。</p>
<p>②特权模式：提示符 #，该模式是进入各种配置状态的入口，在这个模式下也只能查看路由器的信息，但不能修改。这个模式通常设置密码保护。</p>
<p>③全局配置模式：提示符 (config)#，可以配置路由器的一些全局性信息，如名字、密码等。</p>
<p>④接口配置模式：提示符 (config-if)#，可以配置路由器的接口信息。</p>
<p>⑤路由配置模式：提示符 (config-router)#，可以在路由器上配置路由协议。</p>
<p>⑥线路配置模式：提示符 (config-line)# ，可以配置路由器连接线路的参数。</p>
<h2 id="实验内容">[实验内容］</h2>
<ol>
<li>
<p>通过console连接到路由器；</p>
</li>
<li>
<p>将路由器的名称设置为CCNA；</p>
</li>
<li>
<p>为CCNA设置特权密码（password sss;secret cisco）；</p>
</li>
<li>
<p>启用控制台密码（ccna）；</p>
</li>
<li>
<p>为telnet访问启用密码（telccna）；</p>
</li>
<li>
<p>保存配置信息，重新启动路由器。</p>
</li>
</ol>
<h3 id="实验步骤">［实验步骤］</h3>
<p>本人没有真实的实验环境，只能在 <code>Cisco Packet Tracer</code> 做虚拟实验。</p>
<p>首先，添加一台路由器和一台PC机，选择console线，将二者连起来，然后在PC机中单击Terminal，设置相关串口参数，即可连接至路由器。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>Router&gt;enable
</span></span><span style="display:flex;"><span>Router#configure terminal
</span></span><span style="display:flex;"><span>Enter configuration commands, one per line. End with CNTL/Z.
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Router<span style="color:#f92672">(</span>config<span style="color:#f92672">)</span><span style="color:#75715e">#hostname CCNA</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>CCNA<span style="color:#f92672">(</span>config<span style="color:#f92672">)</span><span style="color:#75715e">#enable password sss</span>
</span></span><span style="display:flex;"><span>CCNA<span style="color:#f92672">(</span>config<span style="color:#f92672">)</span><span style="color:#75715e">#enable secret cisco</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>CCNA<span style="color:#f92672">(</span>config<span style="color:#f92672">)</span><span style="color:#75715e">#line console 0</span>
</span></span><span style="display:flex;"><span>CCNA<span style="color:#f92672">(</span>config-line<span style="color:#f92672">)</span><span style="color:#75715e">#password ccna</span>
</span></span><span style="display:flex;"><span>CCNA<span style="color:#f92672">(</span>config-line<span style="color:#f92672">)</span><span style="color:#75715e">#login</span>
</span></span><span style="display:flex;"><span>CCNA<span style="color:#f92672">(</span>config-line<span style="color:#f92672">)</span><span style="color:#75715e">#exit</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>CCNA<span style="color:#f92672">(</span>config<span style="color:#f92672">)</span><span style="color:#75715e">#line vty 0 4</span>
</span></span><span style="display:flex;"><span>CCNA<span style="color:#f92672">(</span>config-line<span style="color:#f92672">)</span><span style="color:#75715e">#password telccna</span>
</span></span><span style="display:flex;"><span>CCNA<span style="color:#f92672">(</span>config-line<span style="color:#f92672">)</span><span style="color:#75715e">#login</span>
</span></span><span style="display:flex;"><span>CCNA<span style="color:#f92672">(</span>config-line<span style="color:#f92672">)</span><span style="color:#75715e">#exit</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>CCNA<span style="color:#f92672">(</span>config<span style="color:#f92672">)</span><span style="color:#75715e">#exit</span>
</span></span><span style="display:flex;"><span>%SYS-5-CONFIG_I: Configured from console by console
</span></span><span style="display:flex;"><span>CCNA#copy running-config startup-config
</span></span><span style="display:flex;"><span>Destination filename <span style="color:#f92672">[</span>startup-config<span style="color:#f92672">]</span>? ccna
</span></span><span style="display:flex;"><span>%Error copying nvram:ccna <span style="color:#f92672">(</span>Invalid argument<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>CCNA#write
</span></span><span style="display:flex;"><span>Building configuration...
</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>OK<span style="color:#f92672">]</span>
</span></span><span style="display:flex;"><span>CCNA#exit
</span></span></code></pre></div><p>手动关掉路由器电源，重启路由器：</p>
<p>再次连接至路由器时：</p>
<p>1.User Access Verification，要进入用户模式必须输入控制台密码ccna;</p>
<p>2.要进入特权模式必须输入cisco;</p>
<p>转自: <a href="http://blog.sina.com.cn/s/blog_4c543eb40100hyab.html">http://blog.sina.com.cn/s/blog_4c543eb40100hyab.html</a> 奈何桥之吻的博客</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>路由器接口类型及连接方式</title>
      <link>https://w.toomore.us/posts/networktech/%E8%B7%AF%E7%94%B1%E5%99%A8%E6%8E%A5%E5%8F%A3%E7%B1%BB%E5%9E%8B%E5%8F%8A%E8%BF%9E%E6%8E%A5%E6%96%B9%E5%BC%8F/</link>
      <pubDate>Wed, 05 Oct 2011 20:24:24 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/%E8%B7%AF%E7%94%B1%E5%99%A8%E6%8E%A5%E5%8F%A3%E7%B1%BB%E5%9E%8B%E5%8F%8A%E8%BF%9E%E6%8E%A5%E6%96%B9%E5%BC%8F/</guid>
      <description>路由器接口
路由器具有非常强大的网络连接和路由功能，它可以与各种各样的不同网络进行物理连接，这就决定了路由器的接口技术非常复杂，越是高档的路由器其接口种类也就越多，因为它所能连接的网络类型越多。路由器的端口主要分局域网端口、广域网端口和配置端口三类，下面分别介绍。
局域网接口 常见的以太网接口主要有AUI、BNC和RJ-45接口，还有FDDI、ATM、千兆以太网等都有相应的网络接口，下面分别介绍主要的几种局域网接口。
（1）. AUI端口
AUI端口它就是用来与粗同轴电缆连接的接口，它是一种“D”型15针接口，这在令牌环网或总线型网络中是一种比较常见的端口之一。路由器可通过粗同轴电缆收发器实现与10Base-5网络的连接。但更多的则是借助于外接的收发转发器（AUI-to-RJ-45），实现与10Base-T以太网络的连接。当然，也可借助于其他类型的收发转发器实现与细同轴电缆（10Base-2）或光缆（10Base-F）的连接。AUI接口示意图如图1所示。
（2）．RJ-45端口
RJ-45端口是我们最常见的端口了，它是我们常见的双绞线以太网端口。因为在快速以太网中也主要采用双绞线作为传输介质，所以根据端口的通信速率不同RJ-45端口又可分为10Base-T网RJ-45端口和100Base-TX网RJ-45端口两类。其中，10Base-T网的RJ-45 端口在路由器中通常是标识为“ETH”，而100Base-TX 网的RJ-45端口则通常标识为“10/100bTX”。
10Base-T 网RJ-45端口，10/100Base-TX网RJ-45端口。其实这两种RJ-45端口仅就端口本身而言是完全一样的，但端口中对应的网络电路结构是不同的，所以也不能随便接。
（3）SC端口
SC端口也就是我们常说的光纤端口，它是用于与光纤的连接。光纤端口通常是不直接用光纤连接至工作站，而是通过光纤连接到快速以太网或千兆以太网等具有光纤端口的交换机。这种端口一般在高档路由器才具有，都以“100b FX”标注。
广域网接口 在上面就讲过，路由器不仅能实现局域网之间连接，更重要的应用还是在于局域网与广域网、广域网与广域网之间的连接。但是因为广域网规模大，网络环境复杂，所以也就决定了路由器用于连接广域网的端口的速率要求非常高，在以太网中一般都要求在100Mbps快速以太网以上。下面介绍几种常见的广域网接口。
（1）．RJ-45端口
利用RJ-45端口也可以建立广域网与局域网VLAN（虚拟局域网）之间，以及与远程网络或Internet的连接。如果使用路由器为不同VLAN提供路由时，可以直接利用双绞线连接至不同的VLAN端口。但要注意这里的RJ-45端口所连接的网络一般就不太可有是10Base-T这种了，一般都是100Mbps快速以太网以上。如果必须通过光纤连接至远程网络，或连接的是其他类型的端口时，则需要借助于收发转发器才能实现彼此之间的连接。如图5所示为快速以太网（Fast Ethernet）端口。
（2）AUI端口
AUI端口我们在局域网中也讲过，它是用于与粗同轴电缆连接的网络接口，其实AUI端口也被常用于与广域网的连接，但是这种接口类型在广域网应用得比较少。在Cisco 2600系列路由器上，提供了AUI与RJ-45两个广域网连接端口，用户可以根据自己的需要选择适当的类型。
（3）高速同步串口
在路由器的广域网连接中，应用最多的端口还要算“高速同步串口”（SERIAL）了。
这种端口主要是用于连接目前应用非常广泛的DDN、帧中继（Frame Relay）、X.25、PSTN（模拟电话线路）等网络连接模式。在企业网之间有时也通过DDN或X.25等广域网连接技术进行专线连接。这种同步端口一般要求速率非常高，因为一般来说通过这种端口所连接的网络的两端都要求实时同步。</description>
      <content:encoded><![CDATA[<p>路由器接口</p>
<blockquote>
<p>路由器具有非常强大的网络连接和路由功能，它可以与各种各样的不同网络进行物理连接，这就决定了路由器的接口技术非常复杂，越是高档的路由器其接口种类也就越多，因为它所能连接的网络类型越多。路由器的端口主要分局域网端口、广域网端口和配置端口三类，下面分别介绍。</p>
</blockquote>
<ol>
<li>局域网接口</li>
</ol>
<p>常见的以太网接口主要有AUI、BNC和RJ-45接口，还有FDDI、ATM、千兆以太网等都有相应的网络接口，下面分别介绍主要的几种局域网接口。</p>
<p>（1）. AUI端口</p>
<p>AUI端口它就是用来与粗同轴电缆连接的接口，它是一种“D”型15针接口，这在令牌环网或总线型网络中是一种比较常见的端口之一。路由器可通过粗同轴电缆收发器实现与10Base-5网络的连接。但更多的则是借助于外接的收发转发器（AUI-to-RJ-45），实现与10Base-T以太网络的连接。当然，也可借助于其他类型的收发转发器实现与细同轴电缆（10Base-2）或光缆（10Base-F）的连接。AUI接口示意图如图1所示。</p>
<p>（2）．RJ-45端口</p>
<p>RJ-45端口是我们最常见的端口了，它是我们常见的双绞线以太网端口。因为在快速以太网中也主要采用双绞线作为传输介质，所以根据端口的通信速率不同RJ-45端口又可分为10Base-T网RJ-45端口和100Base-TX网RJ-45端口两类。其中，10Base-T网的RJ-45 端口在路由器中通常是标识为“ETH”，而100Base-TX 网的RJ-45端口则通常标识为“10/100bTX”。</p>
<p>10Base-T 网RJ-45端口，10/100Base-TX网RJ-45端口。其实这两种RJ-45端口仅就端口本身而言是完全一样的，但端口中对应的网络电路结构是不同的，所以也不能随便接。</p>
<p>（3）SC端口</p>
<p>SC端口也就是我们常说的光纤端口，它是用于与光纤的连接。光纤端口通常是不直接用光纤连接至工作站，而是通过光纤连接到快速以太网或千兆以太网等具有光纤端口的交换机。这种端口一般在高档路由器才具有，都以“100b FX”标注。</p>
<ol start="2">
<li>广域网接口</li>
</ol>
<p>在上面就讲过，路由器不仅能实现局域网之间连接，更重要的应用还是在于局域网与广域网、广域网与广域网之间的连接。但是因为广域网规模大，网络环境复杂，所以也就决定了路由器用于连接广域网的端口的速率要求非常高，在以太网中一般都要求在100Mbps快速以太网以上。下面介绍几种常见的广域网接口。</p>
<p>（1）．RJ-45端口</p>
<p>利用RJ-45端口也可以建立广域网与局域网VLAN（虚拟局域网）之间，以及与远程网络或Internet的连接。如果使用路由器为不同VLAN提供路由时，可以直接利用双绞线连接至不同的VLAN端口。但要注意这里的RJ-45端口所连接的网络一般就不太可有是10Base-T这种了，一般都是100Mbps快速以太网以上。如果必须通过光纤连接至远程网络，或连接的是其他类型的端口时，则需要借助于收发转发器才能实现彼此之间的连接。如图5所示为快速以太网（Fast Ethernet）端口。</p>
<p>（2）AUI端口</p>
<p>AUI端口我们在局域网中也讲过，它是用于与粗同轴电缆连接的网络接口，其实AUI端口也被常用于与广域网的连接，但是这种接口类型在广域网应用得比较少。在Cisco 2600系列路由器上，提供了AUI与RJ-45两个广域网连接端口，用户可以根据自己的需要选择适当的类型。</p>
<p>（3）高速同步串口</p>
<p>在路由器的广域网连接中，应用最多的端口还要算“高速同步串口”（SERIAL）了。</p>
<p>这种端口主要是用于连接目前应用非常广泛的DDN、帧中继（Frame Relay）、X.25、PSTN（模拟电话线路）等网络连接模式。在企业网之间有时也通过DDN或X.25等广域网连接技术进行专线连接。这种同步端口一般要求速率非常高，因为一般来说通过这种端口所连接的网络的两端都要求实时同步。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>碎语</title>
      <link>https://w.toomore.us/moments/</link>
      <pubDate>Wed, 14 Sep 2011 12:00:00 +0800</pubDate>
      
      <guid>https://w.toomore.us/moments/</guid>
      <description>读史早知今日事，对花犹忆去年人。
铭记历史要有洁癖
2025-08-16 14:59:01
哦吼，收到的情人节礼物！🩲 仪式感还是挺重要的。🥰😘️🤗️
2025-02-16 18:52:41
糟糕的一天&amp;hellip;
2024-01-10 22:42:41
哈哈，我姐还记着我生日，我自己都忘了。
上一次过生日，还是这篇日志「回眸,模糊了青春的脚印」的时候。
今天竟然用的全是句号，浑然不知，时间大概就是这样改变很多东西的吧。
2023-11-14 09:56
我想我是枯蓬。
高二的时候给 QQ 起了个昵称叫「大漠枯蓬」，取自「使至塞上」，当时的感觉是很酷。
现在突然感觉我又是枯蓬了，但是感觉是如假包换的枯。
我想我确实是枯了&amp;hellip; 🥀
2023-10-31 10:04
“We have two lives, and the second begins when we realize we only have one”
&amp;ndash; Confucius.
2023-01-06 12:57
如果一个人告诉你某个项目很赚钱，无非三个目的：
他想赚你的钱 他想让你帮他赚钱 他想让你来填坑 赚钱要有道，不是你的别多要，天上没有掉馅饼的事，掉的也是个陷阱。
2021-12-17 14:41
去您妈的&amp;hellip;🌞
2021-01-20 19:11
😞，好累！
2018-02-10 22:10
😭 坑爹啊！
2016-07-01 16:21
心酸&amp;hellip; 😢
2016-03-07 14:58
世事无常，整个人都不好了，走好&amp;hellip;😞
2015-07-30 14:53
果然任性！
2015-01-15 19:57</description>
      <content:encoded><![CDATA[<p>读史早知今日事，对花犹忆去年人。</p>
<p><a href="https://www.youtube.com/watch?v=h262SoSA7Iw">铭记历史要有洁癖</a></p>
<p>2025-08-16 14:59:01</p>
<hr>
<p>哦吼，收到的情人节礼物！🩲 仪式感还是挺重要的。🥰😘️🤗️</p>
<p><img loading="lazy" src="image/index/1739702981363.png" alt="小内内"  />
</p>
<p>2025-02-16 18:52:41</p>
<hr>
<p><strong>糟糕</strong>的一天&hellip;</p>
<p>2024-01-10 22:42:41</p>
<hr>
<p>哈哈，我姐还记着我生日，我自己都忘了。</p>
<p>上一次过生日，还是这篇日志「<a href="/posts/youth/the-footprints-of-youth-are-blurred-when-look-back/">回眸,模糊了青春的脚印</a>」的时候。</p>
<p>今天竟然用的全是句号，浑然不知，时间大概就是这样改变很多东西的吧。</p>
<p><img loading="lazy" src="image/index/1699926743940.png" alt="1699926743940"  />
</p>
<p>2023-11-14 09:56</p>
<hr>
<p>我想我是枯蓬。</p>
<p>高二的时候给 QQ 起了个昵称叫「大漠枯蓬」，取自「<a href="https://dict.baidu.com/shici/detail?pid=87369dc2a4c44cc2bb932eb353a8d784">使至塞上</a>」，当时的感觉是很酷。</p>
<p>现在突然感觉我又是枯蓬了，但是感觉是如假包换的枯。</p>
<p>我想我确实是枯了&hellip;  🥀</p>
<p>2023-10-31 10:04</p>
<hr>
<p>“We have two lives, and the second begins when we realize we only have one”</p>
<p>&ndash; Confucius.</p>
<p>2023-01-06 12:57</p>
<hr>
<p>如果一个人告诉你某个项目很赚钱，无非三个目的：</p>
<ol>
<li>他想赚你的钱</li>
<li>他想让你帮他赚钱</li>
<li>他想让你来填坑</li>
</ol>
<p>赚钱要有道，不是你的别多要，天上没有掉馅饼的事，掉的也是个陷阱。</p>
<p>2021-12-17 14:41</p>
<hr>
<p>去您妈的&hellip;🌞</p>
<p>2021-01-20 19:11</p>
<hr>
<p>😞，好累！</p>
<p>2018-02-10 22:10</p>
<hr>
<p>😭 坑爹啊！</p>
<p>2016-07-01 16:21</p>
<hr>
<p>心酸&hellip; 😢</p>
<p>2016-03-07 14:58</p>
<hr>
<p>世事无常，整个人都不好了，走好&hellip;😞</p>
<p>2015-07-30 14:53</p>
<hr>
<p>果然任性！</p>
<p><img loading="lazy" src="image/index/1673022369115.png" alt="1673022369115"  />
</p>
<p>2015-01-15 19:57</p>
<hr>
<p>干的漂亮！</p>
<p>2015-01-14 19:29</p>
<hr>
<p>思维真的很重要！</p>
<p>2015-01-06 21:48</p>
<hr>
<p>庸人自扰！😫</p>
<p>2014-11-20 14:27</p>
<hr>
<p>能不能少一点悔不当初的抱怨！🌧️</p>
<p>2014-10-29 19:35</p>
<hr>
<p>😭</p>
<p>2014-10-27 16:28</p>
<hr>
<p>有多大本事端多大的碗，路要一步一步走！😞</p>
<p>2014-10-12 22:22</p>
<hr>
<p>曾经的你！</p>
<p><img loading="lazy" src="image/index/1673021811282.png" alt="1673021811282"  />
</p>
<p>2014-09-19 21:23</p>
<hr>
<p>你们都这样，要我怎么样？！</p>
<p><img loading="lazy" src="image/index/1673021695813.png" alt="1673021695813"  />
</p>
<p>2014-09-17 04:33</p>
<hr>
<p>失眠！</p>
<p>2014-09-17 04:18</p>
<hr>
<p>呵！呵呵！<br>
呵呵！呵！</p>
<p>2014-07-25 01:20</p>
<hr>
<p>难难难！</p>
<p>2014-07-24 23:54</p>
<hr>
<p>累成狗了！</p>
<p>2014-06-11 00:35</p>
<hr>
<p>test</p>
<p>2014-05-19 16:59</p>
<hr>
<p>我是猴子请来的逗逼吗？！😞</p>
<p>2014-04-20 00:00</p>
<hr>
<p>贫贱夫妻！</p>
<p>2014-03-21 13:21</p>
<hr>
<p>该来的都来了，让暴风雨来淹死我吧！</p>
<p>2014-01-06 00:39</p>
<hr>
<p>对不起媳妇让你受委屈了，在这大喜的日子！<br>
我发誓一定要好好对你！<br>
希望你也能理解我！<br>
我爱你，媳妇！</p>
<p>2013-12-25 23:50</p>
<hr>
<p>唉！每一句话都要往我心上扎么？！</p>
<p>2013-12-22 19:27</p>
<hr>
<p>Do you love me or not ?!</p>
<p>2013-11-07 23:22</p>
<hr>
<p>只晒网不打鱼&hellip;..</p>
<p>2013-07-29 22:53</p>
<hr>
<p>不能让时间慢慢把你废了，成功属于勇敢的人&hellip;..</p>
<p>2013-07-28 07:09</p>
<hr>
<p>艰难的日子！剩下的只有坚持..</p>
<p>2013-05-14 18:02</p>
<hr>
<p>烦的一逼！我特么没谁压力大&hellip;.</p>
<p>2013-04-17 12:29</p>
<hr>
<p>嗯嗯！先把自己养活再说&hellip;.</p>
<p>2013-04-15 19:23</p>
<hr>
<p>呵呵一笑&hellip;</p>
<p>2013-04-02 11:48</p>
<hr>
<p>我小气,自私,不男人！<br>
为什么要告诉我？！<br>
为什么？！</p>
<p>2013-02-20 10:35</p>
<hr>
<p>#黑莓微信#<br>
说好的黑莓微信呢？！ <br>
用了你我还是好男淫么？！</p>
<p>2012-10-29 10:45</p>
<hr>
<p>苦逼啊！哥还在国道上晃荡，大人给元芳挡辆车吧！</p>
<p>2012-10-26 23:51</p>
<hr>
<p>都没人形了！元芳咋整？！</p>
<p>2012-10-23 16:11</p>
<hr>
<p>什么是个性解放？！</p>
<p>2012-10-23 07:49</p>
<hr>
<p>我想关机碎觉了，元芳你怎么看？！</p>
<p>2012-10-19 00:04</p>
<hr>
<p>啥都不想干..</p>
<p>2012-10-18 23:24</p>
<hr>
<p>成家、立业、生娃&hellip;</p>
<p>2012-10-16 23:13</p>
<hr>
<p>eggache&hellip;</p>
<p>2012-10-16 14:35</p>
<hr>
<p>练姑娘头发白的那一刻，好心疼啊&hellip;<br>
啊啊！</p>
<p>2012-10-13 17:53</p>
<hr>
<p>下雨天就是用来碎觉滴&hellip;..<br>
0.o</p>
<p>2012-09-01 16:28</p>
<hr>
<p>翔哥早该急流勇退了&hellip;<br>
但是有人不允许啊&hellip;</p>
<p>2012-08-07 20:45</p>
<hr>
<p>林子大了！ 什么鸟都不能放过&hellip;</p>
<p>2012-08-06 21:45</p>
<hr>
<p>买手机→卖手机→买手机→卖手机→买手机→卖手机→买手机→卖手机→&hellip;&hellip;.. <br>
《一个搞机爱好者的一生》&hellip;&hellip;</p>
<p>2012-08-05 05:52</p>
<hr>
<p>墙又高了一截！</p>
<p>2012-08-03 17:46</p>
<hr>
<p>人生苦短，世事无常，且行且珍惜.. 生者节哀，逝者安息！ 默哀..</p>
<p>2012-08-02 22:37</p>
<hr>
<p>各种不给力&hellip;VMware、Cisco VPN、GNS3.. <br>
尼玛能有一个攒劲点不？！</p>
<p>2012-08-01 00:33</p>
<hr>
<p>什么时候我也有个相册取名叫“媳妇”&hellip;</p>
<p>2012-07-29 19:46</p>
<hr>
<p>都是牛逼角色！</p>
<p>2012-07-14 23:56</p>
<hr>
<p>擦！ 包被拉开了！ 还好最近比较穷逼里头没钱！ 坑爹的偷儿&hellip;.</p>
<p>2012-07-13 21:00</p>
<hr>
<p>是谁能等的起&hellip;<br>
错别字 惭愧！</p>
<p>2012-07-12 18:39</p>
<hr>
<p>“房子像青春，谁能等的气！” 公交站牌广告&hellip;.. <br>
说的好！</p>
<p>2012-07-12 18:37</p>
<hr>
<p>外边有点小冷哈&hellip;</p>
<p>2012-06-26 08:50</p>
<hr>
<p>热死了&hellip;.</p>
<p>2012-06-24 15:40</p>
<hr>
<p>明天喝西北风&hellip;</p>
<p>2012-06-09 20:59</p>
<hr>
<p>OMG！ 又高考了&hellip; 加油！孩子们！</p>
<p>2012-06-07 09:22</p>
<hr>
<p>外边叫个不停的都是流浪狗吗？！ <br>
看来我睡的比狗要早！</p>
<p>2012-05-30 00:48</p>
<hr>
<p>目送一波又一波的人上车离去！<br>
就是等不到我要的那一辆&hellip;</p>
<p>2012-05-16 18:15</p>
<hr>
<p>公交车上风好大哇&hellip;.</p>
<p>2012-05-15 13:38</p>
<hr>
<p>生命真特么短暂，你一秒钟都 不能浪费&hellip;</p>
<p>2012-05-15 00:47</p>
<hr>
<p>博客上线一周年，纪念下&hellip;</p>
<p>2012-05-13 19:13</p>
<hr>
<p>=4!=4!</p>
<p>2012-05-01 20:13</p>
<hr>
<p>这两天睡得很早，只想尽快结束这苦逼的一天！<br>
醒得早那是必然了，所有的问题都抛给这静默的凌晨3点！<br>
每一个决定结果如何不说，决定的那一刻是最诚挚的&hellip;.</p>
<p>2012-04-24 06:33</p>
<hr>
<p>睡觉了！ 真特么烦&hellip;</p>
<p>2012-04-23 22:42</p>
<hr>
<p>你特么是闲的蛋疼呢还是闲的蛋疼呢！？</p>
<p>2012-04-19 17:44</p>
<hr>
<p>豆瓣上有很多关于天蝎男的小组，主题思想是“远离天蝎，珍爱生命！”，蝎子有这么差劲么？！</p>
<p>2012-04-17 08:09</p>
<hr>
<p>若干年后那只备胎还是你的么？！</p>
<p>2012-04-14 12:16</p>
<hr>
<p>又特么成功的傻逼了一回&hellip;</p>
<p>2012-04-13 17:53</p>
<hr>
<p>大家有啥心愿赶紧提出来, 我明天烧给你们&hellip;</p>
<p>2012-04-03 14:31</p>
<hr>
<p>话说大啦&hellip;</p>
<p>2012-03-30 23:07</p>
<hr>
<p>墙内的世界很精彩，无奈只有在墙外才能观赏&hellip;</p>
<p>2012-03-23 10:54</p>
<hr>
<p>连我都感冒了，看来人类已经无所不能了！ 哈！哈！哈哈&hellip;.</p>
<p>2012-03-22 01:02</p>
<hr>
<p>帐号密码全记不得了&hellip;. 咋混呢！》？</p>
<p>2012-03-14 23:26</p>
<hr>
<p>没钱还活个毛线！ 哥们要发力了&hellip;. Money money！</p>
<p>2012-03-07 23:36</p>
<hr>
<p>O(∩_∩)O哈哈~！ 我好中意类哦&hellip;</p>
<p>2012-03-06 21:47</p>
<hr>
<p>饿了！</p>
<p>2012-03-02 00:59</p>
<hr>
<p>脸红有两种！一种是生病，另一种是恋爱！</p>
<p>2012-01-24 23:28</p>
<hr>
<p>鸭梨山大啊 &hellip;&hellip;</p>
<p>2012-01-15 23:35</p>
<hr>
<p>谁都回来了？！</p>
<p>2012-01-10 11:05</p>
<hr>
<p>科目三抽个夜考&hellip;. 照过不误哈！ o(∩_∩)o 哈哈！</p>
<p>2011-12-28 23:40</p>
<hr>
<p>赶不上变化的计划就不是计划&hellip;..</p>
<p>2011-12-25 12:25</p>
<hr>
<p>读书改变了什么？！</p>
<p>2011-12-15 23:30</p>
<hr>
<p>想法越多死的越快&hellip;.</p>
<p>2011-12-10 02:10</p>
<hr>
<p>emershare 刚更新到3.0 测试下！</p>
<p>2011-11-30 04:08</p>
<hr>
<p>想给博客注册个域名！木有钱啊 &hellip;</p>
<p>2011-11-30 02:03</p>
<hr>
<p>好家伙这就算被就业了么？！</p>
<p>2011-11-29 17:13</p>
<hr>
<p>我不是真的快乐&hellip;.</p>
<p>2011-11-25 00:39</p>
<hr>
<p>改了一晚上模版，竟然不兼容IE浏览器，我勒个去&hellip;..太纠结了！</p>
<p>2011-11-22 03:51</p>
<hr>
<p>感觉要被贩卖了&hellip;. NND！</p>
<p>2011-11-22 01:52</p>
<hr>
<p>断粮草了！ 求包养&hellip;&hellip;</p>
<p>2011-11-07 21:00</p>
<hr>
<p>好吧！卡不要紧，但是能不能卡的步调一致点儿？！ 声音跟画面不同步的卡，我凌乱了~</p>
<p>2011-11-07 16:24</p>
<hr>
<p>尼玛！星期天狂欢啊？！
放一整天广播，就一首歌翻来覆去的放，让人活不？！</p>
<p>2011-11-06 15:48</p>
<hr>
<p>南职影吧！热门影视抢先观看&hellip; 别hold了！速度围观！</p>
<p>2011-11-05 02:28</p>
<hr>
<p>炮灰&hellip;</p>
<p>2011-11-04 00:06</p>
<hr>
<p>话说！科目三改革，200快钱糊弄过关的日子已经一去不复返！<br>
教练说：“你们是幸运滴，至少你们如果过了，那可是堂堂正正的过的！”<br>
不过请同学们万万要对天朝充满信心，即使制度在严格，多掏点money还是可以糊弄的！<br>
苍天啊！<br>
可怜我们这些小白鼠了。<br>
好吧为我们饯行吧&hellip;<br></p>
<p>2011-11-02 01:33</p>
<hr>
<p>RIP就是比1跟2谁大？！</p>
<p>2011-10-30 17:09</p>
<hr>
<p>网速太快!请系好安全带&hellip;</p>
<p>2011-10-29 11:14</p>
<hr>
<p>好吧！I will here waitting for you！</p>
<p>2011-10-29 01:04</p>
<hr>
<p>我cha！这是给我的礼物吗？！ 管理员密码让人改了，后台都进不了！ 这就是TM耻辱！</p>
<p>2011-10-28 18:07</p>
<hr>
<p>低调的给自己说声生日快乐！尽管根本不快乐！</p>
<p>2011-10-28 01:50</p>
<hr>
<p>无奈哈！</p>
<p>2011-10-27 17:46</p>
<hr>
<p>什么情况？！</p>
<p>2011-10-27 13:10</p>
<hr>
<p>我也不想这么笨！但就是这么笨有啥办法！ 对不起影响你心情了&hellip;.</p>
<p>2011-10-26 21:58</p>
<hr>
<p>再牛逼的文笔也丰满不了你骨干的故事&hellip;&hellip;.</p>
<p>2011-10-25 19:10</p>
<hr>
<p>亲爱滴姐！ 生日快乐哈&hellip;.</p>
<p>2011-10-22 02:01</p>
<hr>
<p>低着头追风筝不是追她的影子，而是知道风筝在哪儿！</p>
<p>2011-10-21 00:50</p>
<hr>
<p>是金子总会发光，是银子总会花光&hellip;&hellip;</p>
<p>2011-10-18 13:23</p>
<hr>
<p>0.0</p>
<p>2011-10-17 22:42</p>
<hr>
<p>我就想吃个蒸馍蘸辣子！仅此而已&hellip;&hellip;</p>
<p>2011-10-17 16:22</p>
<hr>
<p>酝酿已久的南职在线终于低调上线了！ 同鞋们速度围观哈&hellip;. <a href="http://ncxyol.com">http://ncxyol.com</a></p>
<p>2011-10-05 10:10</p>
<hr>
<p>童鞋们好! 国庆快乐哈！ “蜗牛的壳壳”已经搬迁至http://ncxyol.com</p>
<p>2011-10-01 02:03</p>
<hr>
<p>不要让我失望哈&hellip;.</p>
<p>2011-09-27 01:25</p>
<hr>
<p>呜哈哈！ 收被子了&hellip;.</p>
<p>2011-09-24 16:53</p>
<hr>
<p>饿了！恰饭&hellip;.</p>
<p>2011-09-22 18:29</p>
<hr>
<p>The most so sad one is not so kind to me ,let&rsquo;s be good friends&hellip;</p>
<p>2011-09-20 03:41</p>
<hr>
<p>没有以后了！再也不会有了&hellip;</p>
<p>2011-09-19 14:59</p>
<hr>
<p>又开始了黑白颠倒的非人日子&hellip;.</p>
<p>2011-09-18 08:47</p>
<hr>
<p>下雨了！吼吼&hellip; o(∩_∩)o 哈哈</p>
<p>2011-09-14 20:44</p>
<hr>
<p>这要热到什么时候哇&hellip;.</p>
<p>2011-09-14 12:00</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>19岁双IE 谈Cisco认证</title>
      <link>https://w.toomore.us/posts/internet/19%E5%B2%81%E5%8F%8Cie-%E8%B0%88cisco%E8%AE%A4%E8%AF%81/</link>
      <pubDate>Thu, 02 Jun 2011 23:47:00 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/19%E5%B2%81%E5%8F%8Cie-%E8%B0%88cisco%E8%AE%A4%E8%AF%81/</guid>
      <description>本文作者：鸿鹄论坛YY3660频道双IE&amp;mdash;乌鸦！
每一个曾经立志做计算机行业的都崇拜过比尔盖茨，或许想赚大钱的也曾经向往过他，当我们都开始接触DOS，开始红警和仙剑的时候，我们很少有人知道，一对情侣开发出了网络的私有协议和相对的设备，或许他们只是无聊的想做一个BB机，但是他们开创了一个新的网络纪元，这就是目前世界网络设备和方案提供商的思科。在中国，一度曾以开发硬件为止，却忽视了软件的相对性，于是我们把一个个细小的晶体管努力的集成到一个小主板上，集成上之后才发现这其实是个废物，研发一个软件远比压缩一个硬件简单，当我们作出龙芯的时候，思科已经开始自己的市场攻略。一切都是不可思议的，就像目前最流行的手机系统，开发它的苹果公司工程师只是想把电话做进电脑，而最后却把电脑做进了电话，不知道是该欢喜还是该忧伤，而中国的很多学生和在职人员却也在迷茫一件事，这就是思科的价值。
思科在中国可以说是一波三折，原先最早的工程师都喜欢思科，稳定安全，现在出于密保和其他的考虑中国政府大力推广H3C和华为，我有幸去参观过大唐的研发基地，在那里的人都很玩命，老板给开工资随便要，前提是完成进度，可是就算如此TD-SCDMA仍然是其他国家放弃的一个产品，于是回头看看我们的华为和H3C，不否认他们的专利和特有的东西，但是仔细看看，一个思科4948的设备可以满足H3C 7900系产品的要求，面对这些萝卜白菜的我们更需要认识的是思科的认证。
思科最初的认证很有价值，一个CCNA的认证就被认为是技术的象征，后来慢慢的增多一直到现在的一文不值，这样说对于考过CCNA和学生打算考CCNA的人而言或许很痛苦，然而事实如此。我曾经留意过2008年青岛一家小型企业对于求职者的要求，思科CCNA，3年经验和一些网络管理基础，企业越来越看中思科的技术，但是不得不看到的是中国教育的一种误区，就像我们有了高考，于是有了作弊，有了思科，于是有了代考。培训机构5天包过，上午讲课，下午实验，晚上题库，题库一共300个题目，于是在中国出现了很多的1000分。我拿到CCNA的时候在亿泰达呆过一段时间，在那里CCNA的价值就是你守着路由器和交换机但是不要动，出现问题立刻打电话给CCNP，你看到的是一台机器的价值而不是一个网络的价值，在CCNA考完后3个月内有能力直接拿出CCNP吧，否则你的所有付出都是一堆泡影。我拿到2个CCIE证书的时候曾经有幸参加过思科的峰会，在里有一些英国人和我抱怨，there are so many person in china who owns ccie。当我听到这句话的时候我问了身边上海的一位朋友，大他说一个毕业刚出校门的大学生都可以拿到CCIE，这就是思科在中国的价值。写到这些不是否认思科的价值，而是在中国，请正确的面对思科，他不是一个敲门砖，而是让你看的更远的垫脚石。
做一个这样的比喻，CCNA让你知道网络内部的东西，把一个抽象的马路实体化出来，当你拥有CCNA的时候你知道，哇塞，原来我打的字是这么传输的，我写的情书可以给隔壁的美女而不是传给我的顶头上司。CCNP是让你创造一个环境和结构，就如同你和你隔壁的美女，你可以选择凿一个洞慢慢的投递，这就是我们的TCP和路由器，这样的话很安全但是很慢，于是你选择一个快速的办法，你选择给一个人带过去，这就是我们的UDP和交换机，网络就如同我们生活的环境，如何创造更好的网络环境CCNP会交给你。古人说过圆的理论，你学的知识就是一个圆，你学的越多，发现未知的就越大。当你拿到第一个CCIE证书的时候你会发现自己很薄弱，于是去拿第二个，当拿到第三个还想继续，这是一种贪婪，无论是知识还是自己，都是一种贪婪，于是老天开始报应这种人，学的越多越迷茫。你在和隔壁美女交往的时候忽然发现其实她需要的很多，她不仅仅要看到你的字还要你的声音，还要你的一切，这个时候你就给自己做了可视电话，这就是我们的思科网真，但是一切太渺茫，于是你开始打算做老板，这就是我们回头研究和创造私有协议。
中国对于读书认为，把书读薄再读厚是一种境界，思科技术也是这样，学习思科CCNA只是让你知道什么是思科，而到达CCNP的时候你就开始考虑如何看的更多，书就变薄了，而当你到CCIE等级的时候你就后从头开始看协议，一本看薄的书慢慢的变厚，因为里面有你自己的思想了。对于学生和在职深造的朋友，学习思科不一定要达到CCIE的等级，而对于思科而言，当你学习到CCIE等级的时候一定要给自己定位，如果你是为了充实自己，那你只需要在床头放一本CCIE而不是费尽心思的去考一个证书，因为你要知道CCIE是对CCNP的一个补充和完善，它会告诉你如何更好的使用CCNP。如果你给自己定位在一个协议研究者或者一个绿卡上时，你需要多努力了，每一个CCIE都是一个不同的领域，但是当你怀里有了熊掌和鱼的时候，你会舍得哪一个呢？</description>
      <content:encoded><![CDATA[<p>本文作者：鸿鹄论坛YY3660频道双IE&mdash;乌鸦！</p>
<p>每一个曾经立志做计算机行业的都崇拜过比尔盖茨，或许想赚大钱的也曾经向往过他，当我们都开始接触DOS，开始红警和仙剑的时候，我们很少有人知道，一对情侣开发出了网络的私有协议和相对的设备，或许他们只是无聊的想做一个BB机，但是他们开创了一个新的网络纪元，这就是目前世界网络设备和方案提供商的思科。在中国，一度曾以开发硬件为止，却忽视了软件的相对性，于是我们把一个个细小的晶体管努力的集成到一个小主板上，集成上之后才发现这其实是个废物，研发一个软件远比压缩一个硬件简单，当我们作出龙芯的时候，思科已经开始自己的市场攻略。一切都是不可思议的，就像目前最流行的手机系统，开发它的苹果公司工程师只是想把电话做进电脑，而最后却把电脑做进了电话，不知道是该欢喜还是该忧伤，而中国的很多学生和在职人员却也在迷茫一件事，这就是思科的价值。</p>
<p>思科在中国可以说是一波三折，原先最早的工程师都喜欢思科，稳定安全，现在出于密保和其他的考虑中国政府大力推广H3C和华为，我有幸去参观过大唐的研发基地，在那里的人都很玩命，老板给开工资随便要，前提是完成进度，可是就算如此TD-SCDMA仍然是其他国家放弃的一个产品，于是回头看看我们的华为和H3C，不否认他们的专利和特有的东西，但是仔细看看，一个思科4948的设备可以满足H3C 7900系产品的要求，面对这些萝卜白菜的我们更需要认识的是思科的认证。</p>
<p>思科最初的认证很有价值，一个CCNA的认证就被认为是技术的象征，后来慢慢的增多一直到现在的一文不值，这样说对于考过CCNA和学生打算考CCNA的人而言或许很痛苦，然而事实如此。我曾经留意过2008年青岛一家小型企业对于求职者的要求，思科CCNA，3年经验和一些网络管理基础，企业越来越看中思科的技术，但是不得不看到的是中国教育的一种误区，就像我们有了高考，于是有了作弊，有了思科，于是有了代考。培训机构5天包过，上午讲课，下午实验，晚上题库，题库一共300个题目，于是在中国出现了很多的1000分。我拿到CCNA的时候在亿泰达呆过一段时间，在那里CCNA的价值就是你守着路由器和交换机但是不要动，出现问题立刻打电话给CCNP，你看到的是一台机器的价值而不是一个网络的价值，在CCNA考完后3个月内有能力直接拿出CCNP吧，否则你的所有付出都是一堆泡影。我拿到2个CCIE证书的时候曾经有幸参加过思科的峰会，在里有一些英国人和我抱怨，there are so many person in china who owns ccie。当我听到这句话的时候我问了身边上海的一位朋友，大他说一个毕业刚出校门的大学生都可以拿到CCIE，这就是思科在中国的价值。写到这些不是否认思科的价值，而是在中国，请正确的面对思科，他不是一个敲门砖，而是让你看的更远的垫脚石。</p>
<p>做一个这样的比喻，CCNA让你知道网络内部的东西，把一个抽象的马路实体化出来，当你拥有CCNA的时候你知道，哇塞，原来我打的字是这么传输的，我写的情书可以给隔壁的美女而不是传给我的顶头上司。CCNP是让你创造一个环境和结构，就如同你和你隔壁的美女，你可以选择凿一个洞慢慢的投递，这就是我们的TCP和路由器，这样的话很安全但是很慢，于是你选择一个快速的办法，你选择给一个人带过去，这就是我们的UDP和交换机，网络就如同我们生活的环境，如何创造更好的网络环境CCNP会交给你。古人说过圆的理论，你学的知识就是一个圆，你学的越多，发现未知的就越大。当你拿到第一个CCIE证书的时候你会发现自己很薄弱，于是去拿第二个，当拿到第三个还想继续，这是一种贪婪，无论是知识还是自己，都是一种贪婪，于是老天开始报应这种人，学的越多越迷茫。你在和隔壁美女交往的时候忽然发现其实她需要的很多，她不仅仅要看到你的字还要你的声音，还要你的一切，这个时候你就给自己做了可视电话，这就是我们的思科网真，但是一切太渺茫，于是你开始打算做老板，这就是我们回头研究和创造私有协议。</p>
<p>中国对于读书认为，把书读薄再读厚是一种境界，思科技术也是这样，学习思科CCNA只是让你知道什么是思科，而到达CCNP的时候你就开始考虑如何看的更多，书就变薄了，而当你到CCIE等级的时候你就后从头开始看协议，一本看薄的书慢慢的变厚，因为里面有你自己的思想了。对于学生和在职深造的朋友，学习思科不一定要达到CCIE的等级，而对于思科而言，当你学习到CCIE等级的时候一定要给自己定位，如果你是为了充实自己，那你只需要在床头放一本CCIE而不是费尽心思的去考一个证书，因为你要知道CCIE是对CCNP的一个补充和完善，它会告诉你如何更好的使用CCNP。如果你给自己定位在一个协议研究者或者一个绿卡上时，你需要多努力了，每一个CCIE都是一个不同的领域，但是当你怀里有了熊掌和鱼的时候，你会舍得哪一个呢？</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Secondary IP-Address 用途</title>
      <link>https://w.toomore.us/posts/networktech/secondary-ip-address%E7%94%A8%E9%80%94/</link>
      <pubDate>Thu, 02 Jun 2011 15:21:34 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/secondary-ip-address%E7%94%A8%E9%80%94/</guid>
      <description>为端口设置一个IP地址，在端口设置状态下
ip address 本端口IP地址 子网掩码 另外，在同一端口中可以设置两个以上的不同网段的IP地址，这样可以实现连接在同一局域网上不同网段之间的通讯。一般由于一个网段对于用户来说不够用，可以采用这种办法。
在端口设置状态下
ip address 本端口IP地址 子网掩码 secondary 注意：如果要实现连在同一路由器端口的不同网段的通讯，必须在端口设置状态下
ip redirect 一般地，Cisco路由器不允许从同一端口进来的IP包又发回到原端口中，ip redirect 表示允许在同一端进入路由器的IP包由原端口发送回去。
网络中含有0的IP地址如138.0.0.1或192.1.0.2，强烈建议尽量不要使用这样的IP地址，如要使用这的地址，在全局设置模式下必须设置
ip subnet-zero 对于 secondary address
动态路由协议的更新中，不以 secondary address作为 source address。
包括广播，arp的source address。
用途：
在物理的子网上创建逻辑子网
使桥接网络分成更多子网。
解决rip version1等不连续子网的问题。
放置的端口：
Secondary 地址一般可以配置在两个地方：
局域网段端口 作用是允许单个路由器端口连接多于两个网段，并可以实现网段互通。
广域网互联端口上 广域互连端口配置Secondary地址，可以在更改互连端口时，可以Telnet远程更改，避免直接更改端口地址造成网络中断。
如果在路由器上启用了动态路由协议，动态路由协议包含Secondary地址网段，在动态路由更新只用端口地址作路由更新和邻居建立，不使用Secondary地址，但Secondary地址所在网段可以参加到动态路由域中。
可以解决的问题：
secondary addresS 可以RIPV1中解决路由汇总的问题
secondary address 可以用于NAT的，转换后地址并非路由器直连地址（利用secondary address 为转换后地址）
ip redirect 为路由重定向功能，具体可以看TCP/IP的解释，告诉主机更优的网关。</description>
      <content:encoded><![CDATA[<p>为端口设置一个IP地址，在端口设置状态下</p>
<pre tabindex="0"><code>ip address 本端口IP地址 子网掩码
</code></pre><p>另外，在同一端口中可以设置两个以上的不同网段的IP地址，这样可以实现连接在同一局域网上不同网段之间的通讯。一般由于一个网段对于用户来说不够用，可以采用这种办法。</p>
<p>在端口设置状态下</p>
<pre tabindex="0"><code>ip address 本端口IP地址 子网掩码 secondary
</code></pre><p>注意：如果要实现连在同一路由器端口的不同网段的通讯，必须在端口设置状态下</p>
<pre tabindex="0"><code>ip redirect
</code></pre><p>一般地，Cisco路由器不允许从同一端口进来的IP包又发回到原端口中，<code>ip redirect</code> 表示允许在同一端进入路由器的IP包由原端口发送回去。</p>
<p>网络中含有0的IP地址如<code>138.0.0.1</code>或<code>192.1.0.2</code>，强烈建议尽量不要使用这样的IP地址，如要使用这的地址，在全局设置模式下必须设置</p>
<pre tabindex="0"><code>ip subnet-zero
</code></pre><p>对于 <code>secondary address</code></p>
<p>动态路由协议的更新中，不以 <code>secondary address</code>作为 <code>source address</code>。</p>
<p>包括广播，arp的source address。</p>
<p>用途：</p>
<p>在物理的子网上创建逻辑子网</p>
<p>使桥接网络分成更多子网。</p>
<p>解决rip version1等不连续子网的问题。</p>
<p>放置的端口：</p>
<p>Secondary 地址一般可以配置在两个地方：</p>
<ol>
<li>局域网段端口</li>
</ol>
<p>作用是允许单个路由器端口连接多于两个网段，并可以实现网段互通。</p>
<ol start="2">
<li>广域网互联端口上</li>
</ol>
<p>广域互连端口配置Secondary地址，可以在更改互连端口时，可以Telnet远程更改，避免直接更改端口地址造成网络中断。</p>
<p>如果在路由器上启用了动态路由协议，动态路由协议包含Secondary地址网段，在动态路由更新只用端口地址作路由更新和邻居建立，不使用Secondary地址，但Secondary地址所在网段可以参加到动态路由域中。</p>
<p>可以解决的问题：</p>
<ol>
<li>
<p>secondary addresS 可以RIPV1中解决路由汇总的问题</p>
</li>
<li>
<p>secondary address 可以用于NAT的，转换后地址并非路由器直连地址（利用secondary address 为转换后地址）</p>
</li>
<li>
<p>ip redirect 为路由重定向功能，具体可以看TCP/IP的解释，告诉主机更优的网关。</p>
</li>
</ol>
]]></content:encoded>
    </item>
    
    <item>
      <title>儿童节NA战报</title>
      <link>https://w.toomore.us/posts/networktech/%E5%84%BF%E7%AB%A5%E8%8A%82na%E6%88%98%E6%8A%A5/</link>
      <pubDate>Wed, 01 Jun 2011 22:07:17 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/%E5%84%BF%E7%AB%A5%E8%8A%82na%E6%88%98%E6%8A%A5/</guid>
      <description>考试地点:上海马戏城，考试用时1小时。
参考的题库是V104.3及9次更新，还有V104.4.题库比较稳定。感觉上新题库考的多一点，老题库少一点。
考试抽到53道题，但是仍然遇到5道以上新题。之前准备考试的时候以为ACL，ipv6的内容会很多，结果这方面考到的很少，ipv6几乎没出现。
新题 做到第五题左右出现第一道新题：
VTP共享VLAN信息的时候使用哪种方式？
选项为：anycast；multicast；unicast；broadcast
然后没过多久，第二道新题：
帧中继的问题，问的是两个非cisco router 通过serial 连接的时候使用什么封装？
选项为：encryption ppp ； frame-relay ；encryption chap。。。。
接下来还有个帧中继的问题：
给了个图，两边分别是路由器，路由器通过serial连接中间WAN，两边的serial分别是DLCI100，DLCI200 图的下面给出了 左边路由器的 信息输出 大概是： #show frame-relay map （。。。 记忆模糊了）
总之，碰到第四道新题的时候心里想，传说CCNA要换题库，看来是真的，应该等题库稳定再来考。。。。汗哪， 肾上腺素这个时候大量分泌，明显感觉自己心跳加快，脸变红，后面再遇到新题也就没心思记了。
可偏偏就在这个时候，考场里一哥们，也不知是考什么科目的，突然开始喊：X老师…… X老师…… 喊叫的声音不断升高，喊叫的频率明显加快，就在我忍无可忍的时候，X老师被召唤出来了。X老师走进一看，说：“网络有点卡，你等一下就好。”
虽然考试过程中被此君扰乱思绪，不过也让我知道了：有问题召唤老师！ 就当是个小插曲吧，大家考试的时候多少都会遇到点小状况，克服就好！
拖图题 总共遇到5道拖图题，与其他只有一道拖图题的tx相比，不知是不是我的考题新题多，所以也就多给了几个拖图题，就当系统平衡吧。 做的时候别紧张，没啥难度。没做完一道拖图题 点击 next 的时候都会问“a u suer u want to &amp;hellip;” 当然选 yes 不然怎么进行后面的？
实验题部分 做到39碰到第一道实验题，之前还在奇怪，为啥有的同学第三道就是实验题，我还以为题库改了，实验题被和谐了呢。 但是不久，吉祥三宝 如约而至！ 就这个名字，看着都吉利，大家准备考试的时候把实验题过两遍，拿下实验题就没啥问题。
VTP一共5题，第一题就swtX connect 进来会发生什么。。。也不来个前戏，真是的。。。好在咱有准备，于是依次答完5题。
ACL是第二个问法，对应acc-list 100 deny ip any host 172.189.16.17就可以了 主要被允许的是hostD
router的 f0/0配置错误</description>
      <content:encoded><![CDATA[<blockquote>
<p>考试地点:上海马戏城，考试用时1小时。</p>
</blockquote>
<p>参考的题库是V104.3及9次更新，还有V104.4.题库比较稳定。感觉上新题库考的多一点，老题库少一点。</p>
<p>考试抽到53道题，但是仍然遇到5道以上新题。之前准备考试的时候以为ACL，ipv6的内容会很多，结果这方面考到的很少，ipv6几乎没出现。</p>
<h2 id="新题">新题</h2>
<p>做到第五题左右出现第一道新题：</p>
<p>VTP共享VLAN信息的时候使用哪种方式？</p>
<p>选项为：anycast；multicast；unicast；broadcast</p>
<p>然后没过多久，第二道新题：</p>
<p>帧中继的问题，问的是两个非cisco router 通过serial 连接的时候使用什么封装？</p>
<p>选项为：encryption ppp ； frame-relay ；encryption chap。。。。</p>
<p>接下来还有个帧中继的问题：</p>
<p>给了个图，两边分别是路由器，路由器通过serial连接中间WAN，两边的serial分别是DLCI100，DLCI200
图的下面给出了 左边路由器的 信息输出 大概是： #show frame-relay map （。。。 记忆模糊了）</p>
<p>总之，碰到第四道新题的时候心里想，传说CCNA要换题库，看来是真的，应该等题库稳定再来考。。。。汗哪，
肾上腺素这个时候大量分泌，明显感觉自己心跳加快，脸变红，后面再遇到新题也就没心思记了。</p>
<p>可偏偏就在这个时候，考场里一哥们，也不知是考什么科目的，突然开始喊：X老师…… X老师…… 喊叫的声音不断升高，喊叫的频率明显加快，就在我忍无可忍的时候，X老师被召唤出来了。X老师走进一看，说：“网络有点卡，你等一下就好。”</p>
<p>虽然考试过程中被此君扰乱思绪，不过也让我知道了：有问题召唤老师！ 就当是个小插曲吧，大家考试的时候多少都会遇到点小状况，克服就好！</p>
<h2 id="拖图题">拖图题</h2>
<p>总共遇到5道拖图题，与其他只有一道拖图题的tx相比，不知是不是我的考题新题多，所以也就多给了几个拖图题，就当系统平衡吧。
做的时候别紧张，没啥难度。没做完一道拖图题 点击 next 的时候都会问“a u suer u want to &hellip;” 当然选 yes 不然怎么进行后面的？</p>
<h2 id="实验题部分">实验题部分</h2>
<p>做到39碰到第一道实验题，之前还在奇怪，为啥有的同学第三道就是实验题，我还以为题库改了，实验题被和谐了呢。
但是不久，吉祥三宝 如约而至！ 就这个名字，看着都吉利，大家准备考试的时候把实验题过两遍，拿下实验题就没啥问题。</p>
<p>VTP一共5题，第一题就swtX connect 进来会发生什么。。。也不来个前戏，真是的。。。好在咱有准备，于是依次答完5题。</p>
<p>ACL是第二个问法，对应acc-list 100 deny ip any host 172.189.16.17就可以了
主要被允许的是hostD</p>
<p>router的 f0/0配置错误</p>
<p>router的 f0/1连接的是两台服务器 finance server &amp; web server</p>
<p>做完这题，肾上腺素开始下降，心跳平稳，心想：实验题没变化，再多新题咱也能过啊！
继续下面的。。</p>
<p>50题是</p>
<pre tabindex="0"><code>eigrp as 122
core router 没有宣告 连接新路由器的网段（192.168.55.25），加进来
core router 多宣告了一个（192.168.65.0），no掉
interrouter as 22
</code></pre><p>然后按着套路出牌就行了，这道实验题是本次考试做的最舒服的一道题。</p>
<p>做完之后show一下，该出来的都出来的，然后再ping一下，该通的都通了，就当我要 copy run start 的时候，突然发现，core router新增的路由条目 <code>D 192.168.55.0【90/XXXX】via 192.168.54.1 …… fa0/0</code>。
新增的 interrouter 连接的是 <code>fa0/0</code> 没错，可是端口ip应该是 <code>192.168.55.26</code> 啊！ <code>192.168.54.1</code>是 <code>fa0/1</code> 连接的另一台路由器ip，完全不搭嘎！然后马上重新检查一遍，<code>show run show start</code>，<code>show ip interface bri</code>。然后再 ping 一遍。都是正确的，心想，估计是模拟器的问题。</p>
<p>然后依然决然的 copy run start！ next</p>
<p>做完53题之后，next</p>
<p>。
。
。
。</p>
<p>屏幕上说了堆废话，问题是，屏幕下面两个按钮，左下角是“end exam” 右下角是“next”。</p>
<p>这时浮现在我心头的是做vce模拟的时候，你按“end exam”的话会出现考试分数，你按“next”的时候就会开始新的测试。</p>
<p>就在我纠结着要点“end exam”的时候，耳边突然响起 考试中间 那哥们 含老师的声音。。。</p>
<p>于是，你们懂得，召唤老师。喊三声之后老师出现，她说要点“next”，但是心里感觉好险。等了10S本想可以看到两条水平柱状图，没想到出来的是文字界面的：</p>
<pre tabindex="0"><code>your score： 960
passing score：825
</code></pre><p>然后老师温和的说，你过了，出来吧。老师负责打印成绩单，两张单子用订书钉装订好，加盖钢印，嘱托要网上注册。。。。</p>
<p>结束啦，培训是去年末参加的，然后开始参加公司流程重组项目，也就把ccna放下了，四月末项目结束了，然后开始准备看了半个月的题库。自己不打算走纯技术路线，所以不打算继续考下去了，在实际工作过程中出系统实施方案或者售前方案的话ccna的知识能够应付了。</p>
<p>一件事，牵扯了自己半年，现在考完了，把经验与大家分享，希望对大家有帮助。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>网络工程师职业规划</title>
      <link>https://w.toomore.us/posts/internet/%E7%BD%91%E7%BB%9C%E5%B7%A5%E7%A8%8B%E5%B8%88%E8%81%8C%E4%B8%9A%E8%A7%84%E5%88%92/</link>
      <pubDate>Tue, 31 May 2011 10:55:21 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/%E7%BD%91%E7%BB%9C%E5%B7%A5%E7%A8%8B%E5%B8%88%E8%81%8C%E4%B8%9A%E8%A7%84%E5%88%92/</guid>
      <description>网络工程师职业发展方向
一、网络工程师的职业优势 最具增值潜力的职业，掌握企业核心网络架构、安全技术，具有不可替代的竞争优势
新型网络人才缺口大，27%的行业增长速度导致网络人才年缺口达30万，高薪高福利成为必然
可实现专业零基础入行，4-10个月的强化训练和职业化引导，就可成为企业急需的技能型网络人才
就业面广，一专多能，实践经验适用于各个领域
增值潜力大，职业价值随着自身经验的丰富以及项目运作的成熟，升值空间一路看涨
职业发展前景广阔，网络工程师到项目经理仅一步之遥，从容晋升Manager
二、网络工程师解读 何谓网络工程师，网络工程师是通过学习和训练，掌握网络技术的理论知识和操作技能的网络技术人员。网络工程师能够从事计算机信息系统的设计、建设、运行和维护工作。
具体来说，我们可以从企业信息化的岗位体系中作一些了解。企业（或政府）信息化过程中需要以下四种人：
企业信息化主管：负责信息化建设中的目标与方案决策，信息化建设中的方向研究；
工程技术人员：负责信息化系统的设计、建设，包括设备、系统、数据库、应用系统的建设；
运行维护人员：负责信息化系统的运行、维护、管理以及基本的开发；
操作应用人员：主要应用信息化系统进行本职工作。
一般来说，IT企业的IT技术职位根据职能可以分为:
管理岗位：企业信息主管CIO、总监、IT经理、项目经理等；
工程技术岗位：规划设计师、网络工程师、系统工程师、软件工程师和数据库工程师等；
运行维护岗位：数据库管理员、系统管理员、网络管理员、服务器管理员等；
操作岗位：办公文员、CAD设计员、网页制作员、多媒体制作员等。
根据企业规模大小，规模较小的企业，一个岗位可能涵盖几个岗位的内容，系统管理员既要负责系统管理，又要承担网络管理；大企业则会分的比较专业，有网络设计师、系统集成工程师、网络安装工程师、综合布线工程师和系统测试工程师等。
三、网络工程师职业规划过程主要有以下几步： 两年以上的小型企业→四年左右的中型企业→大型企业或跨国集团公司
第一步，小企业的网络管理员（系统管理员）；
第二步，进入大中型企业，同样的网络管理工作，工资就可能完全不同了，
一般都在3000元以上。做了部门经理时，还可以高达5000元或以上；
第三步，学习更全面的知识成为普通的网络工程师工资就高达3500元以上；
第四步，学习更全面的知识成为专业的网络工程师，如网络存储工程师、网络安全工程师的工资就可以达8000元以上，做大型企业或专业网络公司IT经理的工资就更高了，基本在万元以上。
下面从三个方面来详细说明网络工程师职业发展：
（一）、管理员
职称：初级
工作在中小企业，涵盖网络基础设施管理、网络操作系统管理、网络应用系统管理、网络用户管理、网络安全保密管理、信息存储备份管理和网络机房管理等几大方向。
这些管理涉及到多个领域，每个领域的管理又有各自特定的任务。
主要岗位：网络管理员（系统管理员）
工作职责描述：
1、网络本身的管理；
2、网络中操作/应用系统的管理(在大型企业、外资、合资企业中通常称之为“MIS（Manger Information System，信息系统管理员）。
两者的区别主要是：网络管理员重在OSI下3层，系统管理员则主要在系统维护和公司信息系统管理上。
就业前景：是一个专业网络人员必经的初始阶段
待遇：1800元——3000元（视专业的掌握程度以及技术的熟练度而定）
（二）、工程师
职称：中级
工作在网络公司或者大中型企业。在网络公司中主要任务是设计并建设；
在大中型企业中的主要任务是运营和维护。
网络工程师其实是一个包括许多种工种的职业，不同的网络工程师工种对从业的人员的要求也不一样，对从业人员的网络管理水平的要求差别很大。专业网络工程师主要有：网络系统设计师、网络工程师、系统工程师、网络安全工程师、数据存储工程师等。
1、普通网络工程师 工作职责描述：
（1）、高级网络管理员，在大企业中或是在网络公司工作
（2）、维护公司网络设备，保证公司骨干网络正常工作
（3）、对主流的网络设备非常了解
职位要求：
扎实而又全面的网络知识功底
多年专业网络管理经验
对产品性能和最新技术掌握很好
就业前景：国内网络公司的技术人员或专业的IDC中心、大的ISP服务商
2、普通系统工程师
工作职责描述：
（1）、高级网络管理员
（2）、在大企业中或是在网络公司工作
（3）、维护并保证系统工作正常
（4）、对流行的OS非常了解
（5）、对系统故障的解决有丰富的经验
职位要求：
扎实而又全面的网络知识功底
多年专业网络管理经验
对新OS系统和最新技术掌握很好
就业前景：
国内网络公司的技术人员</description>
      <content:encoded><![CDATA[<p>网络工程师职业发展方向</p>
<h2 id="一网络工程师的职业优势">一、网络工程师的职业优势</h2>
<ol>
<li>
<p>最具增值潜力的职业，掌握企业核心网络架构、安全技术，具有不可替代的竞争优势</p>
</li>
<li>
<p>新型网络人才缺口大，27%的行业增长速度导致网络人才年缺口达30万，高薪高福利成为必然</p>
</li>
<li>
<p>可实现专业零基础入行，4-10个月的强化训练和职业化引导，就可成为企业急需的技能型网络人才</p>
</li>
<li>
<p>就业面广，一专多能，实践经验适用于各个领域</p>
</li>
<li>
<p>增值潜力大，职业价值随着自身经验的丰富以及项目运作的成熟，升值空间一路看涨</p>
</li>
<li>
<p>职业发展前景广阔，网络工程师到项目经理仅一步之遥，从容晋升Manager</p>
</li>
</ol>
<h2 id="二网络工程师解读">二、网络工程师解读</h2>
<p>何谓网络工程师，网络工程师是通过学习和训练，掌握网络技术的理论知识和操作技能的网络技术人员。网络工程师能够从事计算机信息系统的设计、建设、运行和维护工作。</p>
<p>具体来说，我们可以从企业信息化的岗位体系中作一些了解。企业（或政府）信息化过程中需要以下四种人：</p>
<ol>
<li>
<p>企业信息化主管：负责信息化建设中的目标与方案决策，信息化建设中的方向研究；</p>
</li>
<li>
<p>工程技术人员：负责信息化系统的设计、建设，包括设备、系统、数据库、应用系统的建设；</p>
</li>
<li>
<p>运行维护人员：负责信息化系统的运行、维护、管理以及基本的开发；</p>
</li>
<li>
<p>操作应用人员：主要应用信息化系统进行本职工作。</p>
</li>
</ol>
<p>一般来说，IT企业的IT技术职位根据职能可以分为:</p>
<ol>
<li>
<p>管理岗位：企业信息主管CIO、总监、IT经理、项目经理等；</p>
</li>
<li>
<p>工程技术岗位：规划设计师、网络工程师、系统工程师、软件工程师和数据库工程师等；</p>
</li>
<li>
<p>运行维护岗位：数据库管理员、系统管理员、网络管理员、服务器管理员等；</p>
</li>
<li>
<p>操作岗位：办公文员、CAD设计员、网页制作员、多媒体制作员等。</p>
</li>
</ol>
<p>根据企业规模大小，规模较小的企业，一个岗位可能涵盖几个岗位的内容，系统管理员既要负责系统管理，又要承担网络管理；大企业则会分的比较专业，有网络设计师、系统集成工程师、网络安装工程师、综合布线工程师和系统测试工程师等。</p>
<h2 id="三网络工程师职业规划过程主要有以下几步">三、网络工程师职业规划过程主要有以下几步：</h2>
<p>两年以上的小型企业→四年左右的中型企业→大型企业或跨国集团公司</p>
<p>第一步，小企业的网络管理员（系统管理员）；</p>
<p>第二步，进入大中型企业，同样的网络管理工作，工资就可能完全不同了，</p>
<p>一般都在3000元以上。做了部门经理时，还可以高达5000元或以上；</p>
<p>第三步，学习更全面的知识成为普通的网络工程师工资就高达3500元以上；</p>
<p>第四步，学习更全面的知识成为专业的网络工程师，如网络存储工程师、网络安全工程师的工资就可以达8000元以上，做大型企业或专业网络公司IT经理的工资就更高了，基本在万元以上。</p>
<p>下面从三个方面来详细说明网络工程师职业发展：</p>
<p>（一）、管理员</p>
<p>职称：初级</p>
<p>工作在中小企业，涵盖网络基础设施管理、网络操作系统管理、网络应用系统管理、网络用户管理、网络安全保密管理、信息存储备份管理和网络机房管理等几大方向。</p>
<p>这些管理涉及到多个领域，每个领域的管理又有各自特定的任务。</p>
<p>主要岗位：网络管理员（系统管理员）</p>
<p>工作职责描述：</p>
<p>1、网络本身的管理；</p>
<p>2、网络中操作/应用系统的管理(在大型企业、外资、合资企业中通常称之为“MIS（Manger Information System，信息系统管理员）。</p>
<p>两者的区别主要是：网络管理员重在OSI下3层，系统管理员则主要在系统维护和公司信息系统管理上。</p>
<p>就业前景：是一个专业网络人员必经的初始阶段</p>
<p>待遇：1800元——3000元（视专业的掌握程度以及技术的熟练度而定）</p>
<p>（二）、工程师</p>
<p>职称：中级</p>
<p>工作在网络公司或者大中型企业。在网络公司中主要任务是设计并建设；</p>
<p>在大中型企业中的主要任务是运营和维护。</p>
<p>网络工程师其实是一个包括许多种工种的职业，不同的网络工程师工种对从业的人员的要求也不一样，对从业人员的网络管理水平的要求差别很大。专业网络工程师主要有：网络系统设计师、网络工程师、系统工程师、网络安全工程师、数据存储工程师等。</p>
<p>1、普通网络工程师
工作职责描述：</p>
<p>（1）、高级网络管理员，在大企业中或是在网络公司工作</p>
<p>（2）、维护公司网络设备，保证公司骨干网络正常工作</p>
<p>（3）、对主流的网络设备非常了解</p>
<p>职位要求：</p>
<ul>
<li>
<p>扎实而又全面的网络知识功底</p>
</li>
<li>
<p>多年专业网络管理经验</p>
</li>
<li>
<p>对产品性能和最新技术掌握很好</p>
</li>
</ul>
<p>就业前景：国内网络公司的技术人员或专业的IDC中心、大的ISP服务商</p>
<p>2、普通系统工程师</p>
<p>工作职责描述：</p>
<p>（1）、高级网络管理员</p>
<p>（2）、在大企业中或是在网络公司工作</p>
<p>（3）、维护并保证系统工作正常</p>
<p>（4）、对流行的OS非常了解</p>
<p>（5）、对系统故障的解决有丰富的经验</p>
<p>职位要求：</p>
<ul>
<li>
<p>扎实而又全面的网络知识功底</p>
</li>
<li>
<p>多年专业网络管理经验</p>
</li>
<li>
<p>对新OS系统和最新技术掌握很好</p>
</li>
</ul>
<p>就业前景：</p>
<ul>
<li>
<p>国内网络公司的技术人员</p>
</li>
<li>
<p>大公司的技术人员</p>
</li>
<li>
<p>外包公司</p>
</li>
</ul>
<p>3、网络系统设计师</p>
<p>工作职责描述：</p>
<p>（1）、公司需要建设网络，主要根据要求进行设计，客户能满意</p>
<p>（2）、设计项目达到全面、高的实用性和可用性</p>
<p>（3）、网络系统设计师是一个综合性的工种</p>
<p>（4）、网络和系统方面都有很好的经验</p>
<p>职位要求：</p>
<ul>
<li>
<p>扎实而又全面的网络知识功底</p>
</li>
<li>
<p>多年专业网络管理、设计经验</p>
</li>
<li>
<p>对网络核心技术掌握很好</p>
</li>
</ul>
<p>就业前景：国内真正的设计师凤毛麟角 工资过万</p>
<p>4、网络存储工程师</p>
<p>工作职责描述：</p>
<p>（1）、主要工作在一些大的数据需要量大的公司如银行、电视台、IDC中心</p>
<p>（2）、有效管理公司海量数据，有存储设备测试、评估环境、系统咨询、实施指导、测试、培训、相关解决方案</p>
<p>（3）、灾难恢复</p>
<p>职位要求：</p>
<ul>
<li>
<p>有多年的网络管理经验</p>
</li>
<li>
<p>熟悉一些常用数据库软件</p>
</li>
<li>
<p>有网络存储理论知识，包括存储基础、技术及网络存储高级技术</p>
</li>
<li>
<p>熟悉主流存储、备份厂商的产品线；如IBM/HP/SUN</p>
</li>
<li>
<p>熟练掌握veritas、legato、tsm、dp等备份软件工具使用</p>
</li>
<li>
<p>具有良好的撰写需求分析、解决方案、PPT、系统软硬件配置等方案的能力</p>
</li>
</ul>
<p>就业前景：</p>
<p>国内每年所需的网络存储人才在60万以上，而目前国内每年最多仅能提供1万左右，缺口极大。随着网络经济的日益普及，此类人才在未来几年中的需求将持续攀升，专业的硬件服务器和网络存储人才的工资标准可能还要远高于软、硬件开发人员。</p>
<p>5、网络安全工程师</p>
<p>工作职责描述：</p>
<p>（1）、主要保护网络安全</p>
<p>（2）、保护网站、邮件等服务器安全</p>
<p>（3）、合理布置网络结构和网络产品</p>
<p>（4）、对企业能进行安全评估和防护</p>
<p>工作要求：</p>
<ul>
<li>
<p>有多年的网络管理经验</p>
</li>
<li>
<p>熟悉多种网络安全技术，对各种主流的安全产品（如防火墙、防病毒、入侵检测等）有较好的理论基础和实践经验，了解各种安全产品（例如FireWall、VPN、防病毒产品、IPS等）的特点、使用方法及常用的调试技巧；</p>
</li>
<li>
<p>精通Windows、Linux等系统环境，能进行维护管理和故障分析</p>
</li>
</ul>
<p>就业前景：当前最急缺的人才，工资增长幅度大</p>
<p>（三）、专家</p>
<p>职称：高级</p>
<p>工作在大的网络公司、或研究所</p>
<p>主要是技术主管、项目经理、技术专家</p>
<p>1、技术专家</p>
<p>工作描述：</p>
<p>（1）、某一行业的专家、顾问、权威；</p>
<p>（2）、如果的确非常喜爱技术工作，而不擅长和喜欢与人沟通，则可以完全专注于自身的领域，以发展成为行业资深专家为方向和目标</p>
<p>（3）、发展过程比较漫长，任何一个领域的顶尖技术人才都需要长期的行业经验的累积和个人孜孜不倦的投入；</p>
<p>（4）、优势是越老越吃香，当别人随着年龄的逐步增长而开始担心饭碗问题时，</p>
<p>你则渐入佳境，开始进入职业发展的黄金时期。</p>
<p>工作要求：</p>
<ul>
<li>
<p>全面的网络技术</p>
</li>
<li>
<p>对新技术有深刻的认识，所以要求有极强的学习能力</p>
</li>
</ul>
<p>就业前景：待遇很高，技术人员到30岁后的发展目标之一</p>
<p>2、项目经理</p>
<p>工作内容：</p>
<p>（1）、融合技术和管理的复合性人才</p>
<p>（2）、参与项目谈判</p>
<p>（3）、项目目标和项目财务指标</p>
<p>（4）、划分工作内容并合理分配</p>
<p>（5）、指导网络工程师</p>
<p>（6）、控制工作的进度，按计划完成项目</p>
<p>（7）、组织项目会议</p>
<p>职位要求：</p>
<ul>
<li>
<p>多年的网络工程师经验</p>
</li>
<li>
<p>希望做管理</p>
</li>
<li>
<p>需要自己学习项目管理知识</p>
</li>
</ul>
<p>就业前景：</p>
<p>技术人员到35岁后的发展目标之一</p>
<p>待遇高，可晋升企业核心管理层</p>
<p>3、技术主管</p>
<p>工作任务描述：</p>
<p>（1）、带领技术团队创造更多的价值</p>
<p>（2）、在信息方面参与公司的规划和计划</p>
<p>职位要求：技术全面；有管理能力</p>
<p>就业前景：是网络工程师30岁后的发展方向</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>CCNA疑难解析之network x.x.x.x</title>
      <link>https://w.toomore.us/posts/networktech/ccna%E7%96%91%E9%9A%BE%E8%A7%A3%E6%9E%90%E4%B9%8Bnetwork-x.x.x.x/</link>
      <pubDate>Tue, 31 May 2011 10:24:59 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/ccna%E7%96%91%E9%9A%BE%E8%A7%A3%E6%9E%90%E4%B9%8Bnetwork-x.x.x.x/</guid>
      <description>在配置动态路由协议的时候，在路由进程下，都会用到network x.x.x.x 。
该命令的作用一般认为是向邻居路由器宣告自己直连的网络，其实还有一个功能，那就是让地址在该网络上的接口参与路由进程，接收和发送路由信息。
因为所有运行了动态路由协议的路由器都要依靠邻居路由器获取远程路由信息。所以，在宣告自己直连的网络的同时，还要让接口参与路由进程中，接收邻居宣告的路由信息。</description>
      <content:encoded><![CDATA[<p>在配置动态路由协议的时候，在路由进程下，都会用到<code>network x.x.x.x</code> 。<br>
该命令的作用一般认为是<em><strong>向邻居路由器宣告自己直连的网络</strong></em>，其实还有一个功能，那就是让地址<em><strong>在该网络上的接口参与路由进程，接收和发送路由信息</strong></em>。</p>
<p>因为所有运行了动态路由协议的路由器都要依靠邻居路由器获取远程路由信息。所以，在宣告自己直连的网络的同时，还要让接口参与路由进程中，接收邻居宣告的路由信息。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>CCNA疑难解析IP Default-Network</title>
      <link>https://w.toomore.us/posts/networktech/ccna%E7%96%91%E9%9A%BE%E8%A7%A3%E6%9E%90ip-default-network/</link>
      <pubDate>Thu, 26 May 2011 10:02:29 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/ccna%E7%96%91%E9%9A%BE%E8%A7%A3%E6%9E%90ip-default-network/</guid>
      <description>使用ip route命令设置的默认路由仅在本地（设置默认路由的路由器）生效，不能随动态路由进程被发送到其它路由器，使其它路由器也产生默认路由，除非使用了重分布。而ip default-network 是在动态路由进程中产生一条默认路由的命令，即使其它路由器获得一条默认路由。使用该命令的路由器能够吸引数据流。
Ip default-network x.x.x.x ，语法中network变量应该使用主网号声明，即A,B,C类网络号，并且保证使用该命令的路由器的路由表中存在该路由条目或着其子网路由条目。
该命令在rip协议和igrp/eigrp协议中产生的默认路由，其在路由表中的表达方式也不尽相同。在rip中，以 0.0.0.0 表达；而在igrp/eigrp中使用声明的主网号表达。
使其它路由器产生缺省路由：就是通告给其它路由器一条缺省路由的意思，通俗说，就是其他路由器上不用手工设置缺省路由了就会有一条缺省路由。比如使用RIP，那么这条缺省路由前也有个R的标记。
由于路由器动态获得的这个缺省路由最终的指向是向动态路由进程注入该缺省路由的那台路由器，所以，在任何一台路由器上，只要没有具体路由指示的数据，最终都是送到注入缺省路由的那台路由器的，就等于是有吸引流量的作用了。
比如，你的网络内有多台路由器，其中有一台路由器与ISP连，在这台边界路由器上使用ip default-network命令旧可以向你内部的路由器通告一条缺省路由，内部路由器就可以把去往internet的数据送到边界路由器上。这样的好处是不需要在每一台内部路由器上都手工设置缺省路由了。边界路由器就具有了类似吸引流量的能力。</description>
      <content:encoded><![CDATA[<p>使用ip route命令设置的默认路由仅在本地（设置默认路由的路由器）生效，不能随动态路由进程被发送到其它路由器，使其它路由器也产生默认路由，除非使用了重分布。而ip default-network 是在动态路由进程中产生一条默认路由的命令，即使其它路由器获得一条默认路由。使用该命令的路由器能够吸引数据流。</p>
<p><code>Ip default-network x.x.x.x</code> ，语法中network变量应该使用主网号声明，即A,B,C类网络号，并且保证使用该命令的路由器的路由表中存在该路由条目或着其子网路由条目。</p>
<p>该命令在rip协议和igrp/eigrp协议中产生的默认路由，其在路由表中的表达方式也不尽相同。在rip中，以 0.0.0.0 表达；而在igrp/eigrp中使用声明的主网号表达。</p>
<ol>
<li>
<p>使其它路由器产生缺省路由：就是通告给其它路由器一条缺省路由的意思，通俗说，就是其他路由器上不用手工设置缺省路由了就会有一条缺省路由。比如使用RIP，那么这条缺省路由前也有个R的标记。</p>
</li>
<li>
<p>由于路由器动态获得的这个缺省路由最终的指向是向动态路由进程注入该缺省路由的那台路由器，所以，在任何一台路由器上，只要没有具体路由指示的数据，最终都是送到注入缺省路由的那台路由器的，就等于是有吸引流量的作用了。</p>
</li>
<li>
<p>比如，你的网络内有多台路由器，其中有一台路由器与ISP连，在这台边界路由器上使用ip default-network命令旧可以向你内部的路由器通告一条缺省路由，内部路由器就可以把去往internet的数据送到边界路由器上。这样的好处是不需要在每一台内部路由器上都手工设置缺省路由了。边界路由器就具有了类似吸引流量的能力。</p>
</li>
</ol>
]]></content:encoded>
    </item>
    
    <item>
      <title>IT必杀技之“独孤九剑学习法”</title>
      <link>https://w.toomore.us/posts/internet/it%E5%BF%85%E6%9D%80%E6%8A%80%E4%B9%8B%E7%8B%AC%E5%AD%A4%E4%B9%9D%E5%89%91%E5%AD%A6%E4%B9%A0%E6%B3%95/</link>
      <pubDate>Mon, 23 May 2011 23:32:47 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/it%E5%BF%85%E6%9D%80%E6%8A%80%E4%B9%8B%E7%8B%AC%E5%AD%A4%E4%B9%9D%E5%89%91%E5%AD%A6%E4%B9%A0%E6%B3%95/</guid>
      <description>独孤九剑学习法为汤姆一通ITAA实验室 Gotolab马老师 创立的一种独特的学习方法，为学习技术的人提供了一种快捷有效的学习方式 减少学习者走弯路的概率。
独孤九剑学习法共分九式：
第一式：破书式 互联网的知识是很广泛的，即使所谓搞技术的老鸟，也很难说知其1%，何况知识更新的速度是很快的；单在思科公司涉及的领域便包括了数几十种介质、数100种接口、链路技术20种左右，100多种交换技术，IPv4/IPv6，路由协议，及不下千种的高级路由技术，其他如服务质量QOS、流量工程、组播应用、网络管理、安全管理、VPN及防御监测，IP语音通信，IP存储、光传输、 接入服务等；一开始接触这些知识，如入大海，想全部吃通透，不掌握恰当的方法，天天抱书在看，把有限之生命投入到无限的瞎忙乎之 中；何况还不一定能够天天学，知识也是在老化中的，新的不断在出来。一个技术人员，即便你不断学习数10年，不用独孤九剑之破书式，终归是成不了事。
破书式中的“破书”有几层意思：
把书戳掉，书是用来查的，不是用来看的； 把书戳少，书多了，便分心 了，书少了，便会用心去理解；本来吃透了一块，再去吃另外一块，循序渐进，功力会不断增长，问题现在学习技术者，鲜少对某种技术掌握很透彻的，而不乏泛泛者，基础不甚了了，越是看得多，越是积重难返。 所以学习第一步，就是不看书，或少看书，本来预备1个月看完的书，2天就要“看”完，相信我，2天后你懂得的东西和你1个月后懂得的是一样的甚至更好。
第二式：想象式 这一招是接着上面这一招来的。互联网知识分成两大部分，一是在线上传输的，一是在设备里运行的；如流量整形技术，在线上传输的是协议、信号，那是固定的格式，否则线路的对端设备不认，而算法、排队、缓存、机制那是在设备里运行的。
要掌握这些知识呢，线上传的东西，都可以查到，内容要记住。在机器里面运行的东西，你是看不到的，无法嗅探，读系统源代码则效率太低，唯有想象式可以破解：
不是空想，凡是机器，总是遵循逻辑来的，凡是数学合格者，不难理解这些逻辑。
技术总是为解决问题而生的，如遇到 某问题，你应当想，如由你来设计解决，会怎么办。
虽然不懂，只管去想；大脑利用率不及10%，不用担心你的大脑已经开发完了。 人的潜力是很大的，能不能做到，全靠发掘。因为不懂，所以像想起来没有约束，爱因斯坦也是这么出来的，你想到得可能比实际更高明 ，以后明白了，会笑开发者竟用如此卑劣的手段。
一开始从基本的想起，吃饭睡觉走路坐车都可以想，这样别人一天只有10个小时 学习，而你却有24小时。能不突飞猛进？
第三式：强迫式 很多人学习一段时间，进展缓慢，那是因为不懂得强迫自己，控制自己。我们都经常犯的，就是这个毛病，大家都很清楚。这个是一层意思，另外还有一层意思，就是过分强迫自己，认了死理，这个大家都忽略了吧？那么这个招式怎么解:
强迫自己看书：看书看不明白 ，你再看仔细还是看不明白的，因为你的知识的缺陷断层了，基本的逻辑还不具备，便去看高级应用。中途便放弃了，这样你前面的努力不就白费了，以后还得重新再来，这个时候应强迫自己看完，快速地看，不懂也不用浪费任何时间去多想，最后看完了虽然不懂，但总归 是看完了，总归知道一些行话，可以唬唬人，内心不会感到内疚。
强迫自己不看书，如你一心读入门的书，终归入不了门，考了证书 也只是 Paper。这个时候只管去做根据真实环境搭建的实验，照着配置去敲，做完几套了，回头来看入门的书，那就像大学生看小学生的书，肯定能够窥得门径。
强迫自己硬着头皮去做实验，如学 OSPF，5种区域类型、7种 LSA、5种路由模式、区域认证、 链路认证、虚链路等，这些光看书，你记得不牢，而且不知具体变化及应用，还是那句话，先去做实验，一开始不懂，强迫自己全部变化 都调试一遍，理解的深度就直达化境了。
强迫自己去面对问题，总是做容易的，不给自己找难题，到一定程度就很难有进步；给自己 的路由器加1000条路由条目、改参数、重启、做冗余、关闭接口&amp;hellip;，看能不能解决？
第四式：争论式 我们真正深入接触网络也就是这几年的光景，当所谓高手在大谈网络的时候，我们在哪里呢？我们可能正在争论双绞线的线序呢。现在我们都成了大型工程的骨干，还培训了很多人，靠的是什么？就是认真地去争论每个技术细节。一个良好的学习团队，争论是经常的事情 ；思想最发达，学术最好的时代，都是充满争论的，如“百家争鸣”。学习技术，也是要强调争论，越辩越明，更透彻地理解。大家在一 起学习，每个人的心得总是不完全一样的，是片面的。
因为:
数10个小时的调试结果，能证明的也仅仅是一个参数的机理，如做 RIP 的实验，何谓水平分割、无限跳数、毒性逆转、定时更新、无效计时、保持计时、刷新计时、即时更新、即时更新抑制、更新版本、 汇总、重发布、过滤等等，配置技巧、如何触发、具体机理为何？不同的网络结构，有不同的变化，一下很难理清楚。
个人的思维， 总有局限性，有时不是实验做得不够，而是思路没有开拓出来。解决这些问题，就是看书做实验，凡是有所得一定要尽快地讲，告诉其他人，要讲清楚，取其精华，精确演示，几十小时的成果要十几分钟就讲明白，其他人不愿意听，一定要抓住他，讲到他懂为止，让其他人发现你的不足；大家反复争论，10个人争论，10小时学习的成果，每人花数十分钟就讲完，这样数天下来就能学到本来一个人学习数 月的知识，大家再争论疑问，发现不足的地方，要验证。如是反复，功力一定非常深厚。
第五式：攻击式 学了2、3年技术，考过一些证书，自认为学得很扎实；但要说出个道道来，遇到问题，系统地分析，却还是有一定的困难。看书再加上工作中的历练，遇到的问题总是片面，理论也都粗略懂了，看起来懂了，看过的，但遇到问题还得查。可以做些事情，但为什么这样就不甚了了，设计、分析就更谈不上了。这些情况都是非常普遍的，从一无所知，慢慢地就到了这个境地。这个时候，要不断进步，取得突破，就要知道自己到底哪些是真懂的？哪些是假懂的？运用这个攻击式，就是用于找到不足，开拓思路。
做练习题，如 Boson 的认证题目，分很多科目，如你自认 CCNP 的水平了，那么应该做做其中CCNP的题，每天有空的时候就做练习题，10分钟，20分 钟都可以用。看看得分，真懂假懂就出来了！不要背答案，做题时都是分析清楚，这样子就能利用这个工具不断给自己做评估。
我们 做实验，一段时间后，就要请大家来做一个评估，就是攻击，不断地问你问题，方方面面，很细的知识点也问到，如能答得头头是道，解 析透彻，那么恭喜你，你准备成为技术专家吧！
第六式：问答式 这一式接着攻击式来的，相辅相成，精髓是在建立缜密的整体思维方式和深刻理解技术原理；大家知道一种知识，有人讲解，可以很容易地掌握；但是并非所有的知识，都能找到已经理解的人来讲，即使如此，其理解程度也可能有些缺陷，或者新的知识刚出来，大家都不知 道怎么应用。即使是高手，掌握的知识也仅仅是互联网知识的一小部分；在实验室，大家可以学到很多知识，但总有一天，我们要面对新 出现问题，需要迅速学习的能力，问答式在这一点上帮助是很大的。应该好好利用实验室的环境，练就这一式。
平时学习的时候，要多给自己找问题，不能喜欢自圆其说，反正把答案作对就算了；要求把这些问题，自己理解清楚，自问自答；实在想不明白，问其他人， 在实验室里都是在学习的，让他们解释给你听，一个不满意就问其他人。意思就是说不能等有人深刻理解再来给你说，而是要多主动去学习思考，去推动大家思考，然后把成果和大家交流，一定做到精益求精。</description>
      <content:encoded><![CDATA[<blockquote>
<p>独孤九剑学习法为汤姆一通ITAA实验室 <code>Gotolab马老师</code> 创立的一种独特的学习方法，为学习技术的人提供了一种快捷有效的学习方式 减少学习者走弯路的概率。</p>
</blockquote>
<p>独孤九剑学习法共分九式：</p>
<h2 id="第一式破书式">第一式：破书式</h2>
<p>互联网的知识是很广泛的，即使所谓搞技术的老鸟，也很难说知其1%，何况知识更新的速度是很快的；单在思科公司涉及的领域便包括了数几十种介质、数100种接口、链路技术20种左右，100多种交换技术，IPv4/IPv6，路由协议，及不下千种的高级路由技术，其他如服务质量QOS、流量工程、组播应用、网络管理、安全管理、VPN及防御监测，IP语音通信，IP存储、光传输、 接入服务等；一开始接触这些知识，如入大海，想全部吃通透，不掌握恰当的方法，天天抱书在看，把有限之生命投入到无限的瞎忙乎之 中；何况还不一定能够天天学，知识也是在老化中的，新的不断在出来。一个技术人员，即便你不断学习数10年，不用独孤九剑之破书式，终归是成不了事。</p>
<p>破书式中的“破书”有几层意思：</p>
<ol>
<li>把书戳掉，书是用来查的，不是用来看的；</li>
<li>把书戳少，书多了，便分心 了，书少了，便会用心去理解；本来吃透了一块，再去吃另外一块，循序渐进，功力会不断增长，问题现在学习技术者，鲜少对某种技术掌握很透彻的，而不乏泛泛者，基础不甚了了，越是看得多，越是积重难返。</li>
</ol>
<p>所以学习第一步，就是不看书，或少看书，本来预备1个月看完的书，2天就要“看”完，相信我，2天后你懂得的东西和你1个月后懂得的是一样的甚至更好。</p>
<h2 id="第二式想象式">第二式：想象式</h2>
<p>这一招是接着上面这一招来的。互联网知识分成两大部分，一是在线上传输的，一是在设备里运行的；如流量整形技术，在线上传输的是协议、信号，那是固定的格式，否则线路的对端设备不认，而算法、排队、缓存、机制那是在设备里运行的。</p>
<p>要掌握这些知识呢，线上传的东西，都可以查到，内容要记住。在机器里面运行的东西，你是看不到的，无法嗅探，读系统源代码则效率太低，唯有想象式可以破解：</p>
<ol>
<li>
<p>不是空想，凡是机器，总是遵循逻辑来的，凡是数学合格者，不难理解这些逻辑。</p>
</li>
<li>
<p>技术总是为解决问题而生的，如遇到 某问题，你应当想，如由你来设计解决，会怎么办。</p>
</li>
<li>
<p>虽然不懂，只管去想；大脑利用率不及10%，不用担心你的大脑已经开发完了。 人的潜力是很大的，能不能做到，全靠发掘。因为不懂，所以像想起来没有约束，爱因斯坦也是这么出来的，你想到得可能比实际更高明 ，以后明白了，会笑开发者竟用如此卑劣的手段。</p>
</li>
<li>
<p>一开始从基本的想起，吃饭睡觉走路坐车都可以想，这样别人一天只有10个小时 学习，而你却有24小时。能不突飞猛进？</p>
</li>
</ol>
<h2 id="第三式强迫式">第三式：强迫式</h2>
<p>很多人学习一段时间，进展缓慢，那是因为不懂得强迫自己，控制自己。我们都经常犯的，就是这个毛病，大家都很清楚。这个是一层意思，另外还有一层意思，就是过分强迫自己，认了死理，这个大家都忽略了吧？那么这个招式怎么解:</p>
<ol>
<li>
<p>强迫自己看书：看书看不明白 ，你再看仔细还是看不明白的，因为你的知识的缺陷断层了，基本的逻辑还不具备，便去看高级应用。中途便放弃了，这样你前面的努力不就白费了，以后还得重新再来，这个时候应强迫自己看完，快速地看，不懂也不用浪费任何时间去多想，最后看完了虽然不懂，但总归 是看完了，总归知道一些行话，可以唬唬人，内心不会感到内疚。</p>
</li>
<li>
<p>强迫自己不看书，如你一心读入门的书，终归入不了门，考了证书 也只是 Paper。这个时候只管去做根据真实环境搭建的实验，照着配置去敲，做完几套了，回头来看入门的书，那就像大学生看小学生的书，肯定能够窥得门径。</p>
</li>
<li>
<p>强迫自己硬着头皮去做实验，如学 OSPF，5种区域类型、7种 LSA、5种路由模式、区域认证、 链路认证、虚链路等，这些光看书，你记得不牢，而且不知具体变化及应用，还是那句话，先去做实验，一开始不懂，强迫自己全部变化 都调试一遍，理解的深度就直达化境了。</p>
</li>
<li>
<p>强迫自己去面对问题，总是做容易的，不给自己找难题，到一定程度就很难有进步；给自己 的路由器加1000条路由条目、改参数、重启、做冗余、关闭接口&hellip;，看能不能解决？</p>
</li>
</ol>
<h2 id="第四式争论式">第四式：争论式</h2>
<p>我们真正深入接触网络也就是这几年的光景，当所谓高手在大谈网络的时候，我们在哪里呢？我们可能正在争论双绞线的线序呢。现在我们都成了大型工程的骨干，还培训了很多人，靠的是什么？就是认真地去争论每个技术细节。一个良好的学习团队，争论是经常的事情 ；思想最发达，学术最好的时代，都是充满争论的，如“百家争鸣”。学习技术，也是要强调争论，越辩越明，更透彻地理解。大家在一 起学习，每个人的心得总是不完全一样的，是片面的。</p>
<p>因为:</p>
<ol>
<li>
<p>数10个小时的调试结果，能证明的也仅仅是一个参数的机理，如做 RIP 的实验，何谓水平分割、无限跳数、毒性逆转、定时更新、无效计时、保持计时、刷新计时、即时更新、即时更新抑制、更新版本、 汇总、重发布、过滤等等，配置技巧、如何触发、具体机理为何？不同的网络结构，有不同的变化，一下很难理清楚。</p>
</li>
<li>
<p>个人的思维， 总有局限性，有时不是实验做得不够，而是思路没有开拓出来。解决这些问题，就是看书做实验，凡是有所得一定要尽快地讲，告诉其他人，要讲清楚，取其精华，精确演示，几十小时的成果要十几分钟就讲明白，其他人不愿意听，一定要抓住他，讲到他懂为止，让其他人发现你的不足；大家反复争论，10个人争论，10小时学习的成果，每人花数十分钟就讲完，这样数天下来就能学到本来一个人学习数 月的知识，大家再争论疑问，发现不足的地方，要验证。如是反复，功力一定非常深厚。</p>
</li>
</ol>
<h2 id="第五式攻击式">第五式：攻击式</h2>
<p>学了2、3年技术，考过一些证书，自认为学得很扎实；但要说出个道道来，遇到问题，系统地分析，却还是有一定的困难。看书再加上工作中的历练，遇到的问题总是片面，理论也都粗略懂了，看起来懂了，看过的，但遇到问题还得查。可以做些事情，但为什么这样就不甚了了，设计、分析就更谈不上了。这些情况都是非常普遍的，从一无所知，慢慢地就到了这个境地。这个时候，要不断进步，取得突破，就要知道自己到底哪些是真懂的？哪些是假懂的？运用这个攻击式，就是用于找到不足，开拓思路。</p>
<ol>
<li>
<p>做练习题，如 Boson 的认证题目，分很多科目，如你自认 CCNP 的水平了，那么应该做做其中CCNP的题，每天有空的时候就做练习题，10分钟，20分 钟都可以用。看看得分，真懂假懂就出来了！不要背答案，做题时都是分析清楚，这样子就能利用这个工具不断给自己做评估。</p>
</li>
<li>
<p>我们 做实验，一段时间后，就要请大家来做一个评估，就是攻击，不断地问你问题，方方面面，很细的知识点也问到，如能答得头头是道，解 析透彻，那么恭喜你，你准备成为技术专家吧！</p>
</li>
</ol>
<h2 id="第六式问答式">第六式：问答式</h2>
<p>这一式接着攻击式来的，相辅相成，精髓是在建立缜密的整体思维方式和深刻理解技术原理；大家知道一种知识，有人讲解，可以很容易地掌握；但是并非所有的知识，都能找到已经理解的人来讲，即使如此，其理解程度也可能有些缺陷，或者新的知识刚出来，大家都不知 道怎么应用。即使是高手，掌握的知识也仅仅是互联网知识的一小部分；在实验室，大家可以学到很多知识，但总有一天，我们要面对新 出现问题，需要迅速学习的能力，问答式在这一点上帮助是很大的。应该好好利用实验室的环境，练就这一式。</p>
<ol>
<li>
<p>平时学习的时候，要多给自己找问题，不能喜欢自圆其说，反正把答案作对就算了；要求把这些问题，自己理解清楚，自问自答；实在想不明白，问其他人， 在实验室里都是在学习的，让他们解释给你听，一个不满意就问其他人。意思就是说不能等有人深刻理解再来给你说，而是要多主动去学习思考，去推动大家思考，然后把成果和大家交流，一定做到精益求精。</p>
</li>
<li>
<p>问之前要构想好整体架构，在哪一步不清楚，要表达清楚， 这样才能一步步推进，使逻辑前后一致，非常严密；这无论对你解决问题或者技术交流都是非常有利的一式。</p>
</li>
</ol>
<h2 id="第七式激发式">第七式：激发式</h2>
<p>激发自己的潜能是独孤九剑里面的核心，乱出剑肯定是不行，但是招式正确了，但没有斗志，没有志在必得，则效率仍然是很低的。关于人的潜能，有很多相关的研究，衍生出有很多理论，我这里只讲实际的经验，符合独孤九剑的易学易上手原则。上面谈到过，其实人的潜力是很大的，但一开始面对大量的知识时，信心不足，前进一步都是很不容易的。这个时候激发式的作用就出来了。无论如何，在学习的 过程中，总会有各种各样的阻力，很多时候不是技术的问题，克服这些问题，靠的是意志力和决心；不是万里长征（是也无妨嘛），关键 要摆正心态。</p>
<ol>
<li>
<p>你最终成为什么和你想成为什么的关系是最大的，如你敢去做大型网络的实验，那么就真的能理解那里面的知识。若一直学入门知识，终究还是个低手。不过目前做不做地到，要有这个想法、目标。去做了，或许成功、或许失败，但是如果连这个目标都没有，那么根本没有达到的一天。如我们的学员要做中国网络界薪水前 5000 名，或许可以做到，或许做不到，但若没这个想法，那就是 impossible。蹲街边和到麦肯锡工作是由不同的想法决定的。</p>
</li>
<li>
<p>遇到困难，理解不了的技术，就想忽略过去，这若成了惯性 就不好了；时刻激发自己去弄懂它，要有好奇心。我们实验室很多都是在学操作各种设备，要知道设备厂家不是一个学术研究机构，他的产品拿到市场上卖，操作系统里任何一条命令、一个参数都是针对解决实际的问题来的，不愿意去理解，那是还没遇到问题而已，总有一 天，检验真正的实力的时候，会发现书到用时方恨少。</p>
</li>
</ol>
<h2 id="第八式熏陶式">第八式：熏陶式</h2>
<p>一个好的学习环境是何其的重要！我学习技术好几年了，有一些相关的体会。看上面几式，就知道如能找到志同道合之人一起学习，那么效果会好很多。整天接触到的、讨论的、闲聊的，都是学习内容，在这样的环境里面，从各方面巩固学习的成果是很有用的。</p>
<p>归结起来：</p>
<ol>
<li>
<p>接受高水平的熏陶，如刚开始学习基础知识，不知道方向，瞎撞。而参加一个高水准的讨论的话，能真切感受到，你将要掌握哪些知识，到什么程度，或许根本听不动，但是这会在你脑海里留下印象，慢慢地你学习轨迹就清晰化了。</p>
</li>
<li>
<p>熏陶不是单纯讲接受熏陶，坐享其成，而是作为一个团队，大家共同往里面出力，基础虽然大不一样，但水平相近的也要多交流。这就是我们常讲的学习要“OPEN” 。在此过程中也能很好地锻炼 presentation，拿高薪水，靠的就是这个。</p>
</li>
</ol>
<h2 id="第九式综合式">第九式：综合式</h2>
<p>这不是具体的一式，本来没什么好讲的，但是为了上面发挥出最大的作用，需要做一些说明。独孤九剑，每一式都不是孤独的，而是关联的，威力最大就是能够综合起来使用。如“破书式”讲不看书，但“争论式”有需要深厚的理论基础，看起来矛盾，其内在的联系是这样 ，“破书”是避免把精力投入到死胡同里，而“争论”在集中在一点上，把精力用在刀刃上，没有“破书”的节省精力，就没有“争论” 的全力以赴。这九剑，都是这样子的，内在联系很强，需要多体会。另外说明一点，知识是没有捷径的，如不想去理解掌握，那还有更加好的，不需要用到这九式剑法，独孤九剑的目的是为了做到知其然知其所以然。看到实验室这么多人在日以继夜地学习，不难明白这一点 。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>记忆算是永垂不朽的“什么”吗？！</title>
      <link>https://w.toomore.us/posts/youth/is-memory-an-immortal-what/</link>
      <pubDate>Thu, 19 May 2011 22:56:59 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/is-memory-an-immortal-what/</guid>
      <description>永垂 呵 有人把自己的名字刻在石碑上 想不朽 因为他认为这个可以有 有人说没有永垂不朽的东西 不朽？！骗人的..&amp;nbsp; 或许他也曾天真的认为 永垂是可以的 比如爱情 但是 爱情让他失望了 于是他绝望的说 这个真木有 其实骨子里 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;一直念叨：这个必须有.</description>
      <content:encoded><![CDATA[<span style="widows:2;text-transform:none;text-indent:0px;letter-spacing:normal;border-collapse:separate;font:medium Simsun;white-space:normal;orphans:2;word-spacing:0px;-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:0px;" class="Apple-style-span"> 
<p style="text-align:center;">
	永垂
</p>
<p style="text-align:center;">
	呵
</p>
<p style="text-align:center;">
	有人把自己的名字刻在石碑上
</p>
<p style="text-align:center;">
	想不朽
</p>
<p style="text-align:center;">
	因为他认为<span style="color:#ff0000;"><span style="font-size:xx-large;">这个可以有</span></span> 
</p>
<p style="text-align:center;">
	有人说没有永垂不朽的东西
</p>
<p style="text-align:center;">
	不朽？！骗人的..&nbsp;
</p>
<p style="text-align:center;">
	或许他也曾天真的认为
</p>
<p style="text-align:center;">
	永垂是可以的
</p>
<p style="text-align:center;">
	比如爱情
</p>
<p style="text-align:center;">
	但是
</p>
<p style="text-align:center;">
	爱情让他失望了
</p>
<p style="text-align:center;">
	于是他绝望的说
</p>
<p style="text-align:center;">
	这个<span style="color:#ff0000;"><span style="font-size:xx-large;">真木有</span></span> 
</p>
<p style="text-align:center;">
	其实骨子里
</p>
<p style="text-align:center;">
	&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</p>
<p style="text-align:center;">
	&nbsp;
</p>
<p style="text-align:center;">
	&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;一直念叨：这个<span style="font-size:xx-large;"><span style="color:#ff0000;">必须有...</span></span> 
</p>
<p style="text-align:center;">
	&nbsp;
</p>
<p style="text-align:center;">
	&nbsp;如果真的没有什么可以是永垂不朽的话
</p>
<p style="text-align:center;">
	那么就姑且把<span style="color:#ff0000;"><span style="font-size:x-large;">记忆</span></span>拿来充数把
</p>
<p style="text-align:center;">
	美好的
</p>
<p style="text-align:center;">
	不堪回首的
</p>
<p style="text-align:center;">
	都已经永垂了
</p>
<p style="text-align:center;">
	哈哈
</p>
<p style="text-align:center;">
	至今还记得我干过
</p>
<p style="text-align:center;">
	有意义的
</p>
<p style="text-align:center;">
	无聊的
</p>
<p style="text-align:center;">
	愚蠢的
</p>
<p style="text-align:center;">
	道德的
</p>
<p style="text-align:center;">
	不道德的
</p>
<p style="text-align:center;">
	可爱的事儿们
</p>
<p style="text-align:center;">
	想抹也抹不去
</p>
<p style="text-align:center;">
	&nbsp;
</p>
<p style="text-align:center;">
	..... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;这算是不朽的东西吗？！
</p>
</span> 
]]></content:encoded>
    </item>
    
    <item>
      <title>「转」个人独立博客如何盈利</title>
      <link>https://w.toomore.us/posts/website/%E4%B8%AA%E4%BA%BA%E7%8B%AC%E7%AB%8B%E5%8D%9A%E5%AE%A2%E5%A6%82%E4%BD%95%E7%9B%88%E5%88%A9/</link>
      <pubDate>Wed, 18 May 2011 00:59:11 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/website/%E4%B8%AA%E4%BA%BA%E7%8B%AC%E7%AB%8B%E5%8D%9A%E5%AE%A2%E5%A6%82%E4%BD%95%E7%9B%88%E5%88%A9/</guid>
      <description>或许起始选择做独立博客的时候，你只是想着能有一块儿自己的地方。能够写一些自己感兴趣或心情日记什么的，但是时间久了，就难免要考虑博客赢利的事情。而个人独立博客怎样才能实现真正的赢利呢？
一、博客推广篇 随着个人站长的不断涌现，个人独立博客也越来越多了，要想使自己的博客访问量大，必须做好博客推广工作，下面网推365为大家介绍几种常见的博客推广方法，当然也适用于多种类型的网站推广。
1. 网站目录层要清晰 我用博客也好多年了，从新浪、网易、搜狐等门户网站的博客一直玩到今天的个人独立博客“网推365”，个人独立博客也是网站的一种，做好博客优化是关键的一步。首先要把个人博客的结构调整好，做到网站结构清晰，即网站目录层不要太深，一般不超过三层，这样才有利于搜索引擎的抓取。
2. 网页静态化的处理 大家都知道，静态网页对于搜索引擎来说是最友好的，便于收录，并且能减轻服务器的压力，而动态的网站页面是不利于搜索引擎的，甚至有时会抓取不到。
3. 制作精品网站内容 不管什么网站，制作精品网站内容是关键中的关键，只有你所撰写的文章能够足以吸引网民的眼球才算是好文章。我们在撰写博客时尽量要以文字为主，搜索引擎对图片和flash动画不是很友好，如果文章中插有图片的话，一定要给图片加好ALT描述，做个小小的优化处理，这样就不会被搜索引擎置之不理了。在撰写文章时，一定要注意用户体验的问题，一些细节也是要注意的，比如你的文章排版是否整齐，能否让用户把阅读你的文章当作一种享受。如果你能坚持做好这一点，你的博客就会吸引很多读者。
4. 做好友情链接交换 这也是做好博客推广的一项重要内容，找一些与自己博客相关的站点去交换链接也能带来不少流量，具体如何做好友情链接的技巧，在网上的文章已铺天盖地，网推365在这里不再详述。
5. 内链和外链的建设 根据网推365的经验，虽然外链建设对自己的博客网站有一定的好处，但实践证明， 做好内链建设要比外链更重要，对于那些一味寻找外链的朋友，网推365建议这些朋友可适当放缓脚步，相信做网站优化的朋友都有过相同的经历，也就是你与那些PR值较高的网站去交换链接，他们往往不愿意跟小站交换，原因就是大网站怕降低他们的权重，因此我们要把更多的工作放到内链建设上，做好内链建设不仅会增加更多的搜索引擎收录量，还能提升网站内页或者栏目页的权重，并且还能获得长尾关键词的较好排名，因此建议大家多在内链建设方面下功夫。
6. 视频网站营销推广 大家对优酷网、土豆网、酷6网非常熟悉，网推365建议大家如果有时间的话可以自己录制一段与自己博客内容相关的视频介绍等等，然后上传至各大视频网站。由于每天这些视频网站的访问量非常大，如果你在这些网站放上几个视频，对宣传自己的博客网站形象是非常有利的。
7. 利用RSS进行推广 相信很多做博客推广的朋友都会把RSS放到网站页面最显眼的位置，最好使用橘黄色的RSS图标，并与抓虾网、FeedSky等RSS工具进行绑定，每当你发布文章时，都会同步至这些RSS网站。
8. 微博和微博群推广 现在已经进入“围脖”时代了，各大门户网站纷纷推出自己的微博产品，微博有着其它推广工具无法比拟的“传播速度快，宣传范围广”优势，利用好微博进行推广是很必要的。我们做好自己的博客推广也不例外，可先开通自己的官方微博，再与自己的独立博客进行同步绑定，每次更新博客时，微博也能同步更新。目前比较好用的群发微博工具有Follow5、9911微博客等，Follow5可同时绑定20多个微博或社区网站，每个微博还可绑定1-3个帐号不等，总共可绑定好几十个微博或社区，使我们推广进行更加轻松自如。
除了微博以外，现在新浪、搜狐等还开通了微博群等工具产品，微博群也可以理解为以前我们常用的圈子，我们不妨也建立一个属于自己的官方微博群，像新浪微博群是可以被搜索引擎抓取收录的，因些我们利用好微博群推广自己的独立博客也是个不错的方法。
二、博客盈利篇 我们不能只把自己的博客当作一个普通网站来看待，要学会经营自己的博客，把经营博客当作自己的事业来做，以至最终实现商业化运作，达到盈利的目的。
1. 广告联盟 做网络推广的朋友都知道比较知名的广告联盟有百度联盟、谷歌联盟、猫扑联盟和淘宝联盟等，我们在经营自己的博客时，也可以在页面中留出几个广告位，建议首页不要放置太多，要以文字内容为主，只需在一些关键的位置放上广告即可，如果首页广告太多，会给大家一种很凌乱的感觉，像栏目页或内容页可找一些合适的位置放置广告。当你的博客访问量越来越大时，你的广告联盟收入也会随之增加的，当然做独立博客的朋友们不要为了赚取广告收入而做博客，更不要为了赚取广告收入而实施作弊行为，一定要把思想摆正，关键还是要脚踏实地的做好博客内容，只有把博客流量提高上去，你的广告收入也会有所增加的。
2. 付费文章 现在网上的免费文章越来越多，网推365建议做博客时可以设立“会员专栏”等付费栏目，将一些付费文章添加至博客，这些内容只有当会员付费后才能开通浏览权限，从而为自己的博客增加一些收入。
3. 销售商品 如果可能的话，你可以考虑卖域名、主机空间、各种礼品等。从美国的经验来看，博客用户网上购物的比例和购物平均金额明显要高于总体互联网用户水平，说明博客产业基本依靠电子商务盈利。
4. 网站业务 现在做网站建设、网站优化、网站策划类的业务越来越多了，你可以利用博客提供一些相关网站类的业务，比如有些个人独立博客中就标明了提供“网站设计、网站优化”服务等。
5. 吸引风投 个人独立博客正逐步由自我展示和自我表达的平台转变为可以盈利的平台。目前，有很多个人独立博客已经吸引了多家风险投资公司的关注，同时也有不少博客通过网络广告等途径挣到了钱，因此网推365认为个人独立博客的发展前景还是很乐观的。
来源： 崔京辉</description>
      <content:encoded><![CDATA[<p>或许起始选择做独立博客的时候，你只是想着能有一块儿自己的地方。能够写一些自己感兴趣或心情日记什么的，但是时间久了，就难免要考虑博客赢利的事情。而个人独立博客怎样才能实现真正的赢利呢？</p>
<h2 id="一博客推广篇">一、博客推广篇</h2>
<p>随着个人站长的不断涌现，个人独立博客也越来越多了，要想使自己的博客访问量大，必须做好博客推广工作，下面网推365为大家介绍几种常见的博客推广方法，当然也适用于多种类型的网站推广。</p>
<h3 id="1-网站目录层要清晰">1. 网站目录层要清晰</h3>
<p>我用博客也好多年了，从新浪、网易、搜狐等门户网站的博客一直玩到今天的个人独立博客“网推365”，个人独立博客也是网站的一种，做好博客优化是关键的一步。首先要把个人博客的结构调整好，做到网站结构清晰，即网站目录层不要太深，一般不超过三层，这样才有利于搜索引擎的抓取。</p>
<h3 id="2-网页静态化的处理">2. 网页静态化的处理</h3>
<p>大家都知道，静态网页对于搜索引擎来说是最友好的，便于收录，并且能减轻服务器的压力，而动态的网站页面是不利于搜索引擎的，甚至有时会抓取不到。</p>
<h3 id="3-制作精品网站内容">3. 制作精品网站内容</h3>
<p>不管什么网站，制作精品网站内容是关键中的关键，只有你所撰写的文章能够足以吸引网民的眼球才算是好文章。我们在撰写博客时尽量要以文字为主，搜索引擎对图片和flash动画不是很友好，如果文章中插有图片的话，一定要给图片加好ALT描述，做个小小的优化处理，这样就不会被搜索引擎置之不理了。在撰写文章时，一定要注意用户体验的问题，一些细节也是要注意的，比如你的文章排版是否整齐，能否让用户把阅读你的文章当作一种享受。如果你能坚持做好这一点，你的博客就会吸引很多读者。</p>
<h3 id="4-做好友情链接交换">4. 做好友情链接交换</h3>
<p>这也是做好博客推广的一项重要内容，找一些与自己博客相关的站点去交换链接也能带来不少流量，具体如何做好友情链接的技巧，在网上的文章已铺天盖地，网推365在这里不再详述。</p>
<h3 id="5-内链和外链的建设">5. 内链和外链的建设</h3>
<p>根据网推365的经验，虽然外链建设对自己的博客网站有一定的好处，但实践证明， 做好内链建设要比外链更重要，对于那些一味寻找外链的朋友，网推365建议这些朋友可适当放缓脚步，相信做网站优化的朋友都有过相同的经历，也就是你与那些PR值较高的网站去交换链接，他们往往不愿意跟小站交换，原因就是大网站怕降低他们的权重，因此我们要把更多的工作放到内链建设上，做好内链建设不仅会增加更多的搜索引擎收录量，还能提升网站内页或者栏目页的权重，并且还能获得长尾关键词的较好排名，因此建议大家多在内链建设方面下功夫。</p>
<h3 id="6-视频网站营销推广">6. 视频网站营销推广</h3>
<p>大家对优酷网、土豆网、酷6网非常熟悉，网推365建议大家如果有时间的话可以自己录制一段与自己博客内容相关的视频介绍等等，然后上传至各大视频网站。由于每天这些视频网站的访问量非常大，如果你在这些网站放上几个视频，对宣传自己的博客网站形象是非常有利的。</p>
<h3 id="7-利用rss进行推广">7. 利用RSS进行推广</h3>
<p>相信很多做博客推广的朋友都会把RSS放到网站页面最显眼的位置，最好使用橘黄色的RSS图标，并与抓虾网、FeedSky等RSS工具进行绑定，每当你发布文章时，都会同步至这些RSS网站。</p>
<h3 id="8-微博和微博群推广">8. 微博和微博群推广</h3>
<p>现在已经进入“围脖”时代了，各大门户网站纷纷推出自己的微博产品，微博有着其它推广工具无法比拟的“传播速度快，宣传范围广”优势，利用好微博进行推广是很必要的。我们做好自己的博客推广也不例外，可先开通自己的官方微博，再与自己的独立博客进行同步绑定，每次更新博客时，微博也能同步更新。目前比较好用的群发微博工具有Follow5、9911微博客等，Follow5可同时绑定20多个微博或社区网站，每个微博还可绑定1-3个帐号不等，总共可绑定好几十个微博或社区，使我们推广进行更加轻松自如。</p>
<p>除了微博以外，现在新浪、搜狐等还开通了微博群等工具产品，微博群也可以理解为以前我们常用的圈子，我们不妨也建立一个属于自己的官方微博群，像新浪微博群是可以被搜索引擎抓取收录的，因些我们利用好微博群推广自己的独立博客也是个不错的方法。</p>
<h2 id="二博客盈利篇">二、博客盈利篇</h2>
<p>我们不能只把自己的博客当作一个普通网站来看待，要学会经营自己的博客，把经营博客当作自己的事业来做，以至最终实现商业化运作，达到盈利的目的。</p>
<h3 id="1-广告联盟">1. 广告联盟</h3>
<p>做网络推广的朋友都知道比较知名的广告联盟有百度联盟、谷歌联盟、猫扑联盟和淘宝联盟等，我们在经营自己的博客时，也可以在页面中留出几个广告位，建议首页不要放置太多，要以文字内容为主，只需在一些关键的位置放上广告即可，如果首页广告太多，会给大家一种很凌乱的感觉，像栏目页或内容页可找一些合适的位置放置广告。当你的博客访问量越来越大时，你的广告联盟收入也会随之增加的，当然做独立博客的朋友们不要为了赚取广告收入而做博客，更不要为了赚取广告收入而实施作弊行为，一定要把思想摆正，关键还是要脚踏实地的做好博客内容，只有把博客流量提高上去，你的广告收入也会有所增加的。</p>
<h3 id="2-付费文章">2. 付费文章</h3>
<p>现在网上的免费文章越来越多，网推365建议做博客时可以设立“会员专栏”等付费栏目，将一些付费文章添加至博客，这些内容只有当会员付费后才能开通浏览权限，从而为自己的博客增加一些收入。</p>
<h3 id="3-销售商品">3. 销售商品</h3>
<p>如果可能的话，你可以考虑卖域名、主机空间、各种礼品等。从美国的经验来看，博客用户网上购物的比例和购物平均金额明显要高于总体互联网用户水平，说明博客产业基本依靠电子商务盈利。</p>
<h3 id="4-网站业务">4. 网站业务</h3>
<p>现在做网站建设、网站优化、网站策划类的业务越来越多了，你可以利用博客提供一些相关网站类的业务，比如有些个人独立博客中就标明了提供“网站设计、网站优化”服务等。</p>
<h3 id="5-吸引风投">5. 吸引风投</h3>
<p>个人独立博客正逐步由自我展示和自我表达的平台转变为可以盈利的平台。目前，有很多个人独立博客已经吸引了多家风险投资公司的关注，同时也有不少博客通过网络广告等途径挣到了钱，因此网推365认为个人独立博客的发展前景还是很乐观的。</p>
<p>来源： <a href="http://www.cuijinghui.com" rel="nofollow" target="blank">崔京辉</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>好男生找不到女朋友的原因，你们女生也要进来看看！</title>
      <link>https://w.toomore.us/posts/youth/the-reason-why-good-boys-cant-find-girlfriends/</link>
      <pubDate>Wed, 18 May 2011 00:39:45 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/the-reason-why-good-boys-cant-find-girlfriends/</guid>
      <description> &amp;nbsp; Really？！
男人不坏，女人不爱。这句话在现实中非常准确。虽然很多女人会矢口否认这一点甚至对此嗤之以鼻。但实际上，坏男人的求爱方式的确比好男人的方式有效得多。 坏男人的特点是：脸皮厚，大胆，善于撒谎，不太受道德约束，花招诡计多，一旦有机会“日”后再说，不负责任。而这些特点恰恰击中了女人的软肋。 假设硬件条件相似的好男人和坏男人遇到同一个女人，坏男人的杀伤力要强出N倍。 首先，好男人的出手概率要小得多，因为好男人开始追求之前就要考虑负责任的问题，所以不完全中意的不会去追，条件不成熟的目前不能追，对方已有男友的不能追，未来前景不看好（例：在不同城市）的不能追，限制极多。而坏男人反正也没打算负责任，只要对方有点姿色，或是触手可得，一概先追了再说。 第二，好男人诚实，没钱没关系就实话实说，对女方的缺点也坦诚相告，往往让女人很失望。而坏男人随便编两个故事就可以显得自己实力超群；对女人花言巧语又很容易让她们心花怒放，认为找到了知己伯乐。在这个浮躁的社会背景下，好男人多年的辛苦努力换来的成果多半还不如一个坏男人用3分钟时间编出来的故事更能让女人心动。 第三，好男人总想着尊重对方，不会找机会调戏非礼。而坏男人通过调笑，酒精，跳舞等方式随时刺激女人的荷尔蒙，一有机会就把对方占为己有。女人的快感一旦被调动起来，反而很快会爱上这个男人。坏男人一次嘿咻的效果往往超过好男人默默的多次付出。有些傻女人认为男人上了她就是爱上了她；更傻的女人认为一旦被男人上了，她就必须爱上这个男人。女人的本性中隐含着逆来顺受的基因。 第四，好男人真心付出，把双方的感情看得很重，心态容易不平衡，为一些小事和女友争吵。而坏男人心想：反正我不过是做一场游戏，找点刺激罢了，哄哄她得了，生个什么气啊？心态更平和，反而显得成熟个性好。 第五，坏男人的约会经验通常比好男人多得多。参照第一条，坏男人一有机会就出手，即使不成功也积累了经验，逐渐了解了女人的心理。女人大多不理智，有种种莫名其妙。完全不合逻辑的偏见（比如：一个鞋上有污点的男人一定***不住）。坏男人通过大量的实战经验在约会时把这些表面工作做得很好，而好男人却懵然不知，被唰了都不明白为什么，还以为是自己实力不够。 第六，双方发生争执时，好男人自尊心，原则性强，不会轻易迁就对方，往往为些小事谁都不让步，最后只能分手。而坏男人脸皮厚，认个错比喝稀饭都容易，往往轻而易举就能哄得对方回心转意；当然，那是在他还没有玩腻的时候，否则即使女方让步他也能找出借口分手，有时候女人反而会一再让步，彻底沦为坏男人的玩物。 第七，好男人原则性强，循规蹈矩，往往显得乏味。而坏男人一心追求刺激，变化多端，常常给女人以新鲜感。不知不觉中，女人就被坏男人迷惑住，控制住了。 第八，如果女人认识到双方不合适，提出主动分手。好男人只会采取光明正大的手段，实际效果有限；而坏男人可以不择手段，死缠滥打，威逼利诱。女人的惰性强，情感多变，又容易向强势低头，常常摆脱不了坏男人的下三滥手段。 大部分女人虚荣心、自尊心很强，喜欢甜言蜜语，对生活的期望值不现实（爱情小说，电影看多了的后果）。造成的后果是诚实的好男人达不到她们的期望值，只有骗子男人才能编造出一个她们心目中的理想世界。 这就好比正规医生告诉你一个病要花很多钱，吃很多药，最后还难以根治（真实情况往往不够理想）；而江湖郎中骗你说两三幅药，几天就能搞定，而且另外还有美容，强身等种种功效。一个缺乏保健知识的人就很可能上江湖郎中的当。 区别在于：被江湖郎中欺骗的那些病人发现被骗后多半会去找对方算账；而被色狼欺骗的女人往往有苦难言（觉得不光彩，说不清楚，或者嫁鸡随鸡认命了）。另外，对于多数女人来说，搣上床攠造成两人关系的质变。占有她身体的男人比起其他男人有太多的优势（亲密程度大大增强，对方无形之中多出很多操纵女方身体及行为的权力，等等）。 坏男人能做到的，好男人为什么做不到呢？很简单，因为好男人在乎道德与负责任，顾忌太多。等好男人明白过来,好的早给人家“上”了。非处又说不要。 另外，好男人永远也不可能做到像骗子那样心态平和。对于好男人，你是他生命中的重要组成部分，他对你的过去，现在，未来都在意。而骗子要的只是眼前的一点刺激，当然更容易为达到目标而迎合你。骗子更能容忍你的缺点，因为他只需要容忍几天，一两个月；而好男人却要计划一辈子的前景，所以必须进行一些磨合工作！ </description>
      <content:encoded><![CDATA[<span style="widows:2;text-transform:none;text-indent:0px;letter-spacing:normal;border-collapse:separate;font:medium Simsun;white-space:normal;orphans:2;word-spacing:0px;-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:0px;" class="Apple-style-span"> 
<div class="post-body">
	<p>
		&nbsp;
	</p>
	<p align="center">
		<span style="color:#990000;"><span style="font-size:xx-large;"><span style="font-family:隶书;">Really？</span></span><span style="font-size:small;">！</span></span><span style="font-size:small;"><br />
<br />
</span>
	</p>
	<p align="left">
		<span style="font-size:small;"><br />
</span><span style="font-family:KaiTi_GB2312;">男人不坏，女人不爱。这句话在现实中非常准确。虽然很多女人会矢口否认这一点甚至对此嗤之以鼻。但实际上，坏男人的求爱方式的确比好男人的方式有效得多。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">坏男人的特点是：脸皮厚，大胆，善于撒谎，不太受道德约束，花招诡计多，一旦有机会“日”后再说，不负责任。而这些特点恰恰击中了女人的软肋。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">假设硬件条件相似的好男人和坏男人遇到同一个女人，坏男人的杀伤力要强出N倍。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">首先，好男人的出手概率要小得多，因为好男人开始追求之前就要考虑负责任的问题，所以不完全中意的不会去追，条件不成熟的目前不能追，对方已有男友的不能追，未来前景不看好（例：在不同城市）的不能追，限制极多。而坏男人反正也没打算负责任，只要对方有点姿色，或是触手可得，一概先追了再说。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">第二，好男人诚实，没钱没关系就实话实说，对女方的缺点也坦诚相告，往往让女人很失望。而坏男人随便编两个故事就可以显得自己实力超群；对女人花言巧语又很容易让她们心花怒放，认为找到了知己伯乐。在这个浮躁的社会背景下，好男人多年的辛苦努力换来的成果多半还不如一个坏男人用3分钟时间编出来的故事更能让女人心动。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">第三，好男人总想着尊重对方，不会找机会调戏非礼。而坏男人通过调笑，酒精，跳舞等方式随时刺激女人的荷尔蒙，一有机会就把对方占为己有。女人的快感一旦被调动起来，反而很快会爱上这个男人。坏男人一次嘿咻的效果往往超过好男人默默的多次付出。有些傻女人认为男人上了她就是爱上了她；更傻的女人认为一旦被男人上了，她就必须爱上这个男人。女人的本性中隐含着逆来顺受的基因。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">第四，好男人真心付出，把双方的感情看得很重，心态容易不平衡，为一些小事和女友争吵。而坏男人心想：反正我不过是做一场游戏，找点刺激罢了，哄哄她得了，生个什么气啊？心态更平和，反而显得成熟个性好。</span>
	</p>
	<p>
		<span style="font-family:KaiTi_GB2312;">第五，坏男人的约会经验通常比好男人多得多。参照第一条，坏男人一有机会就出手，即使不成功也积累了经验，逐渐了解了女人的心理。女人大多不理智，有种种莫名其妙。完全不合逻辑的偏见（比如：一个鞋上有污点的男人一定***不住）。</span><span style="font-family:KaiTi_GB2312;">坏男人通过大量的实战经验在约会时把这些表面工作做得很好，而好男人却懵然不知，被唰了都不明白为什么，还以为是自己实力不够。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">第六，双方发生争执时，好男人自尊心，原则性强，不会轻易迁就对方，往往为些小事谁都不让步，最后只能分手。而坏男人脸皮厚，认个错比喝稀饭都容易，往往轻而易举就能哄得对方回心转意；当然，那是在他还没有玩腻的时候，否则即使女方让步他也能找出借口分手，有时候女人反而会一再让步，彻底沦为坏男人的玩物。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">第七，好男人原则性强，循规蹈矩，往往显得乏味。而坏男人一心追求刺激，变化多端，常常给女人以新鲜感。不知不觉中，女人就被坏男人迷惑住，控制住了。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">第八，如果女人认识到双方不合适，提出主动分手。好男人只会采取光明正大的手段，实际效果有限；而坏男人可以不择手段，死缠滥打，威逼利诱。女人的惰性强，情感多变，又容易向强势低头，常常摆脱不了坏男人的下三滥手段。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">大部分女人虚荣心、自尊心很强，喜欢甜言蜜语，对生活的期望值不现实（爱情小说，电影看多了的后果）。造成的后果是诚实的好男人达不到她们的期望值，只有骗子男人才能编造出一个她们心目中的理想世界。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">这就好比正规医生告诉你一个病要花很多钱，吃很多药，最后还难以根治（真实情况往往不够理想）；而江湖郎中骗你说两三幅药，几天就能搞定，而且另外还有美容，强身等种种功效。一个缺乏保健知识的人就很可能上江湖郎中的当。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">区别在于：被江湖郎中欺骗的那些病人发现被骗后多半会去找对方算账；而被色狼欺骗的女人往往有苦难言（觉得不光彩，说不清楚，或者嫁鸡随鸡认命了）。另外，对于多数女人来说，搣上床攠造成两人关系的质变。占有她身体的男人比起其他男人有太多的优势（亲密程度大大增强，对方无形之中多出很多操纵女方身体及行为的权力，等等）。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">坏男人能做到的，好男人为什么做不到呢？很简单，因为好男人在乎道德与负责任，顾忌太多。等好男人明白过来,好的早给人家“上”了。非处又说不要。</span>
	</p>
	<p>
		<br />
<span style="font-family:KaiTi_GB2312;">另外，好男人永远也不可能做到像骗子那样心态平和。对于好男人，你是他生命中的重要组成部分，他对你的过去，现在，未来都在意。而骗子要的只是眼前的一点刺激，当然更容易为达到目标而迎合你。骗子更能容忍你的缺点，因为他只需要容忍几天，一两个月；而好男人却要计划一辈子的前景，所以必须进行一些磨合工作！</span>
	</p>
</div>
</span> 
<p>
]]></content:encoded>
    </item>
    
    <item>
      <title>我挖了个大坑，把自己给埋了</title>
      <link>https://w.toomore.us/posts/youth/i-dug-a-big-hole-and-buried-myself/</link>
      <pubDate>Tue, 17 May 2011 01:19:44 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/i-dug-a-big-hole-and-buried-myself/</guid>
      <description> 今天 哦不 应该是昨天了吧 因为现在已经凌晨快两点了 好笑 真是脚步缓慢 还停留在昨天 ....... 突然发现 我一直在执着地 挖 挖呀 挖呀 挖了好大一个坑 而且越来越大 越来越大 马上 或者&amp;nbsp; 已经把自己给埋了起来 坑里没长出树 更不必说结个果子了 难道这就是所谓的 掘坑自焚 谁知道呢 反正 我已经爬不上来了 ........ </description>
      <content:encoded><![CDATA[<span style="widows:2;text-transform:none;text-indent:0px;letter-spacing:normal;border-collapse:separate;font:medium Simsun;white-space:normal;orphans:2;color:#000000;word-spacing:0px;-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:0px;" class="Apple-style-span"> 
<p style="text-align:center;">
	<span style="color:#990000;">今天</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">哦不</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">应该是昨天了吧</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">因为现在已经凌晨快两点了</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">好笑</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">真是脚步缓慢</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">还停留在昨天</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">.......</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">突然发现</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">我一直在执着地</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">挖</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">挖呀</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">挖呀</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">挖了好大一个坑</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">而且越来越大</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">越来越大</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">马上</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">或者&nbsp;</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">已经把自己给埋了起来</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">坑里没长出树</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">更不必说结个果子了</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">难道这就是所谓的</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;"><span style="font-size:xx-large;">掘坑自焚</span></span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">谁知道呢</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">反正</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">我已经爬不上来了</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;"><br type="_moz" />
</span>
</p>
<p style="text-align:center;">
	<span style="color:#990000;">........</span>
</p>
</span> ]]></content:encoded>
    </item>
    
    <item>
      <title>网络摄像机原理</title>
      <link>https://w.toomore.us/posts/networktech/%E7%BD%91%E7%BB%9C%E6%91%84%E5%83%8F%E6%9C%BA%E5%8E%9F%E7%90%86/</link>
      <pubDate>Fri, 13 May 2011 03:02:38 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/networktech/%E7%BD%91%E7%BB%9C%E6%91%84%E5%83%8F%E6%9C%BA%E5%8E%9F%E7%90%86/</guid>
      <description>网络摄像机简介 网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机，它可以将影像通过网络传至地球另一端，且远端的浏览者不需用任何专业软件，只要标准的网络浏览器（如“Microsoft IE或Netscape）即可监视其影像。网络摄像机内置一个嵌入式芯片，采用嵌入式实时操作系统。摄像机传送来的视频信号数字化后由高效压缩芯片压缩，通过网络总线传送到Web服务器。网络上用户可以直接用浏览器观看Web服务器上的摄像机图像，授权用户还可以控制摄像机云台镜头的动作或对系统配置进行操作。
网络摄像机的应用 宽带信息网络除了提供高速的网络接入外还能取代铜轴电缆图像传输线路，将实时图像监控纳入宽带信息网络应用范围，这就使得信息网络代替传统闭路电视成为必然 .基于PC的多媒体监控系统功能较强，但主要进行小范围监控。当传输距离远或者需要上网时，基于PC的多媒体监控稳定性不够好、功耗高、需要有人值守、软件的开放性不好。这些问题为基于网络和嵌入式技术的网络视频监控提供了舞台。 网络摄像机将图像转换为基于TCP/IP网络标准的数据包，使摄像机所摄的画面通过RJ-45以太网接口或WIFI WLAN无线接口直接传送到网络上，通过网络即可远端监视画面。
网络摄像机采用了最先进的摄像技术和网络技术，具有强大的功能。内置的系统软件能实现真正的即插即用，使用户免去了复杂的网络配置；内置的大容量内存存储警报触发前的图像；内置的I/O端口和通讯口便于扩充外部周边设备如：门禁系统，红外线感应装置，全方位云台等。提供软件包(SDK)便于用户自行快速开发应用软件。 网络摄像广泛应用于教育，商业，医疗，公共事业等各方面领域。
网络摄像机组成原理 网络摄像机一般由镜头、图像传感器、声音传感器、A/D转换器、图像、声音、控制器网络服务器、外部报警、控制接口等部分组成。
镜头
镜头作为网络摄像机的前端部件，有固定光圈、自动光圈、自动变焦、自动变倍等种类，与模拟摄像机相同。
图像传感器、声音传感器
图像传感器有CMOS和CCD两种模式。CMOS既互补性金属氧化物半导体，CMOS主要是利用硅和锗这两种元素所做成的半导体，通过CMOS上带负电和带正电的晶体管来实现基本的功能的。这两个互补效应所产生的电流即可被处理芯片记录和解读成影像。CMOS针对CCD最主要的优势就是非常省电。不像由二级管组成的CCD和CMOS电路几乎没有静态电量消耗。这就使得CMOS的耗电量只有普通CCD的1/3左右，CMOS重要问题是在处理快速变换的影像时，由于电流变换过于频繁而过热。暗电流抑制的好就问题不大，如果抑制的不好就十分容易出现杂点。
CCD图像传感器由在单晶硅基片上呈二维排列的光电二级管及其传输电路构成。光电二极管把光转化成电荷，再经转化电路传送和输出。 通常，传送优良图像质量的设备都采用CCD图像传感器，而注重功耗和成本的产品则选择CMOS图像传感器。但新的技术正在克服每种器体固有的弱点，同时保留了适合于特定用途的某些特性。这一部分与模拟摄像机相同。 声音传感器即拾声器或叫麦克风，与传统的话筒原理一样。
A/D转换器
A/D转换器的功能是将图像和声音等模拟信号转换成数字信号。 基于CMOS模式的图像传感器模块有直接数字信号输出的接口，无须A/D转换器；而基于CCD模式的图像传感器模块如有直接数字输出的接口，亦无须A/D转换器，但由于此模块主要针对模拟摄像机设计，只有模拟输出接口，故需要进行A/D转换。
图像、声音编码器
经A/D转换后的图像、声音数字信号，按一定的格式或标准进行编码压缩。编码压缩的目的是为了便于实现音/视信号与多媒体信号的数字化；便于在计算机系统、网络以及万维网上不失真地传输上述信号。
目前，图像编码压缩技术有两种：一种是硬件编码压缩，即将编码压缩算法固化在芯片上；另一种是基于DSP的软件编码压缩，即软件运行在DSP上进行图像的编码压缩。同样，声音的压缩亦可采用硬件编码压缩和软件压缩，其编码标准有MP3等格式。
控制器
控制器是网络摄像机的心脏，它肩负着网络摄像机的管理和控制工作。如果是硬件压缩编码，控制器是一个独立部件；如果是软件编码压缩，控制器是运行编码压缩软件的DSP，即二者合而为一。
网络服务器
网络服务器提供网络摄像机的网络功能，它采用了RTP/RTCP、UDP、HTTP、TCP/IP等相关网络协议，允许用户从自己的PC机使用标准的浏览器根据网络摄像机的IP地址对网络摄像机进行访问，观看实时图像，及控制摄像机的镜头和云台。
外部报警、控制接口
网络摄像机为工程应用提供了实用的外部接口，如控制云台的485接口，用于报警信号输入输出的I/O口。如红外探头发现有目标出现，发报警信号给网络摄像机，网络摄像机自动调整镜头方向并实时录像；另一方面，当网络摄像机侦测到有移动目标出现时，亦可向外发出报警信号。
网络摄像机的基本原理是：图像信号经过镜头输入及声音信号经过麦克风输入后，由图像传感器的声音传感器转化为电信号，A/D转换器将模拟电信号转换为数字电信号，再经过编码器按一定的编码标准进行编码压缩，再控制器的控制下，由网络服务器按一定的网络协议送上局域网或INTERNET，控制器还可以接收报警信号及向外发送报警信号，且按要求发出控制信号。
图像的编码标准
目前，网络摄像机的图像压缩编码标准主要有MPEG4、H.263、H.264、M-JPEG等。
MPEG4:
所谓MPEG标准就是指由ISO的活动图像专家组制定的一系列关于音视频信号以及多媒体信号的压缩与解压缩技术的标准。到目前为止，已经制定完成并批准执行的有：1991年批准的MPEG1、MP3;1994年批准的MPEG2;1999年批准的MPEG4和MP4。正在制定的标准有：MPEG7和MEPG21.
H.263:
H.263是ITU-T提出的作为H.324终端使用的视频编解码建议，H.263经过不断地完善和多次的升级已经日臻成熟，如今已经大部分代替了H.261，而且H.263由于能在低带宽上传输高质量的视频流而日益受到欢迎。 H.263是基于运动补偿的DPCM的混合编码，在运动补偿的DPCM混合编码，在运动搜索的基础上进行运动补偿，然后运用DCT变换和“之”字形扫描编码，从而得到输出码流。H.263在H.261建议的基础上，将运动矢量的搜索增加为半象素点搜索；同时又增加了无限制运动矢量、基于语法的算术编码、高级预测技术和PB帧编码等四个高级选项；从而达到了进一步降低码速率和提高编码质量的目的。
H.264:
H.264是ITU-T的VCEG和ISO/IEC的MPEG的联合视频组开发的一个新的数字视频编码标准，它既是ITU-T的H.264，又是ISO/IEC的MPEG4的第十部分。
在相同的重建图像质量下，H.264能够比H.263节约50％左右的码率，比目前根据MPEG4实现的视频格式在性能方面提高33％左右。
M-JPEG:
M-JPEG技术即运动静止图像压缩技术，它把运动的视频序列作为连续的静止图像来处理，这种压缩技术方式单独完整地压缩每一帧，在编辑过程中可随机存储每一帧，可进行精确到帧地编辑。但M-JPEG只对帧内地空间冗余进行压缩，不对帧间的时间冗余进行压缩，故压缩效率不高。
网络摄像机特点优势 应用优势：
网络摄像机不仅可基于计算机局域网用于区域监控，如住宅小区监控、办公楼、银行、商场等传统地监控；而且也能通过INTERNET用于新型地跨区域远程监控及网上展示，远程儿童及老人看护、无人值守通信机房监控、旅游景点网上演播、产品网上展览等。
特点：
把图像进行M-JPEG编码压缩，通过网络利用TCP/IP协议进行传输；通过网络摄像机或镜头、云台和其它外部设备进行操作控制；内置一个10M/100M以太网RJ45接口，可通过网络实现远程接口；一个并行I/O口，可以连接外部传感器进行自动报警，也可以对外部设备进行控制或进行联动报警功能；一个RS45串口，可以对镜头、云台进行控制，或连接其他外部设备；内嵌WEB SERVER，网络摄像机内部提供了一个WEB SERVER,允许用户从PC机使用标准地浏览器进行各种接口、操作；具有单独地安全机制，可以对操作本摄像机地用户进行分级别的权限验证；有中心的集中式管理与控制的监控网以及无中心的分布式监控网；内置实时操作系统，支持软件下载和配置设置，方便升级和操作管理。
选择网络摄像机的误区
网络摄像机(网络摄像服务器、视频服务器、网络视频转换器等)正在进入实际工程中。 消除理解上的误区，认清网络摄像机的特点可以加快实际应用的普及。
问题提出：
在选择数字化网络化多媒体监控产品的时候，由于主观和客观的因素产生了种种的疑虑，前几年很难得到广泛的推广和应用。步入二十一世纪，随着信息革命的发展和推动，随着宽带网络的普及，人们的意识发生了相应的转变，但仍存在许多理解上的误区，阻碍了监控向数字化、网络化发展的步代。
网络摄像机太“贵” 在选择监控产品时，一提到网络摄像机，人们就会以为网络摄像机要一两万元一台，与花千把块钱就买到的普通摄像机相比太贵。 首先，前期国外生产的网络摄像机确实需要一两万元一台，但是一批国内厂家生产的产品其价格已经减低到几千左右，这已经大大降低了产品价格。
其次，一台W74GM网络摄像机等于计算机+视频捕捉卡+CCD普通摄像机+网卡+操作系统+软件，即在监控端，只需要一台网络摄像机就可以将视频送上网络。因此拿普通摄像机和网络摄像机比价格是不合适的。
网络摄像机“技术要求太高”
在选择监控产品的同时，一提到网络摄像机，人们还会以为网络太复杂，技术要求太高。其实这是一种怕的心理在作怪，网络正在走入家庭，几岁的小学生都把网络玩得转，网络对工程商和使用者来说几乎是透明的，或者说几乎不需要管他。 目前，网络基本上都基于TCP/IP。虽然网络本身的协议多，网络设备（包括网络摄像机）本身技术复杂，但是由于统一的网络协议，各生产厂家的产品都做到了只要知道开机/关机，布防/撤防等基本操作就可以了，其它全部交由网络产品来完成，真正的全自动傻瓜型操作，根本就不需要干预太多。
网络摄像机“图象质量差”
网络摄像机基于网络，模拟本地图象，监控系统基于视频电缆（少数采用光纤），虽然都是监控，这是两种完全不同的系统结构。 作为网络摄像机的生产厂家，我们强调网络摄像机不是万能，因为网络本身不是万能。在传输距离不太远、监控点不多、又没有远程传输需要的情况下，我们依然推荐用户采用模拟图象监控系统。
网络摄像机应用趋势 以太网技术成熟，宽带信息网络将以太网络端口延伸到整个大楼，除了提供高速的网络接入外，还能取代铜轴电缆图象传输线路，将实时图象监控纳入宽带信息网络应用范围，这就使得信息网络代替传统闭路电视成为了必然。
随着数字视频压缩编码技术的日益成熟，微机的普及化，为基于PC的多媒体监控创造了条件。基于PC的多媒体监控系统功能较强，但是主要解决了小范围监控的问题。当传输距离远或者需要上网时，基于PC的多媒体监控稳定性不够好、功耗高、需要有人值守、软件的开放性不好。 这就为基于网络和嵌入式技术的网络视频监控提供了舞台。</description>
      <content:encoded><![CDATA[<h3 id="网络摄像机简介">网络摄像机简介</h3>
<p>网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机，它可以将影像通过网络传至地球另一端，且远端的浏览者不需用任何专业软件，只要标准的网络浏览器（如“Microsoft IE或Netscape）即可监视其影像。网络摄像机内置一个嵌入式芯片，采用嵌入式实时操作系统。摄像机传送来的视频信号数字化后由高效压缩芯片压缩，通过网络总线传送到Web服务器。网络上用户可以直接用浏览器观看Web服务器上的摄像机图像，授权用户还可以控制摄像机云台镜头的动作或对系统配置进行操作。</p>
<h3 id="网络摄像机的应用">网络摄像机的应用</h3>
<p>宽带信息网络除了提供高速的网络接入外还能取代铜轴电缆图像传输线路，将实时图像监控纳入宽带信息网络应用范围，这就使得信息网络代替传统闭路电视成为必然 .基于PC的多媒体监控系统功能较强，但主要进行小范围监控。当传输距离远或者需要上网时，基于PC的多媒体监控稳定性不够好、功耗高、需要有人值守、软件的开放性不好。这些问题为基于网络和嵌入式技术的网络视频监控提供了舞台。
网络摄像机将图像转换为基于TCP/IP网络标准的数据包，使摄像机所摄的画面通过RJ-45以太网接口或WIFI WLAN无线接口直接传送到网络上，通过网络即可远端监视画面。</p>
<p>网络摄像机采用了最先进的摄像技术和网络技术，具有强大的功能。内置的系统软件能实现真正的即插即用，使用户免去了复杂的网络配置；内置的大容量内存存储警报触发前的图像；内置的I/O端口和通讯口便于扩充外部周边设备如：门禁系统，红外线感应装置，全方位云台等。提供软件包(SDK)便于用户自行快速开发应用软件。
网络摄像广泛应用于教育，商业，医疗，公共事业等各方面领域。</p>
<h3 id="网络摄像机组成原理">网络摄像机组成原理</h3>
<p>网络摄像机一般由镜头、图像传感器、声音传感器、A/D转换器、图像、声音、控制器网络服务器、外部报警、控制接口等部分组成。</p>
<ol>
<li>
<p>镜头</p>
<p>镜头作为网络摄像机的前端部件，有固定光圈、自动光圈、自动变焦、自动变倍等种类，与模拟摄像机相同。</p>
</li>
<li>
<p>图像传感器、声音传感器</p>
<p>图像传感器有CMOS和CCD两种模式。CMOS既互补性金属氧化物半导体，CMOS主要是利用硅和锗这两种元素所做成的半导体，通过CMOS上带负电和带正电的晶体管来实现基本的功能的。这两个互补效应所产生的电流即可被处理芯片记录和解读成影像。CMOS针对CCD最主要的优势就是非常省电。不像由二级管组成的CCD和CMOS电路几乎没有静态电量消耗。这就使得CMOS的耗电量只有普通CCD的1/3左右，CMOS重要问题是在处理快速变换的影像时，由于电流变换过于频繁而过热。暗电流抑制的好就问题不大，如果抑制的不好就十分容易出现杂点。</p>
<p>CCD图像传感器由在单晶硅基片上呈二维排列的光电二级管及其传输电路构成。光电二极管把光转化成电荷，再经转化电路传送和输出。
通常，传送优良图像质量的设备都采用CCD图像传感器，而注重功耗和成本的产品则选择CMOS图像传感器。但新的技术正在克服每种器体固有的弱点，同时保留了适合于特定用途的某些特性。这一部分与模拟摄像机相同。 声音传感器即拾声器或叫麦克风，与传统的话筒原理一样。</p>
</li>
<li>
<p>A/D转换器</p>
<p>A/D转换器的功能是将图像和声音等模拟信号转换成数字信号。
基于CMOS模式的图像传感器模块有直接数字信号输出的接口，无须A/D转换器；而基于CCD模式的图像传感器模块如有直接数字输出的接口，亦无须A/D转换器，但由于此模块主要针对模拟摄像机设计，只有模拟输出接口，故需要进行A/D转换。</p>
</li>
<li>
<p>图像、声音编码器</p>
<p>经A/D转换后的图像、声音数字信号，按一定的格式或标准进行编码压缩。编码压缩的目的是为了便于实现音/视信号与多媒体信号的数字化；便于在计算机系统、网络以及万维网上不失真地传输上述信号。</p>
<p>目前，图像编码压缩技术有两种：一种是硬件编码压缩，即将编码压缩算法固化在芯片上；另一种是基于DSP的软件编码压缩，即软件运行在DSP上进行图像的编码压缩。同样，声音的压缩亦可采用硬件编码压缩和软件压缩，其编码标准有MP3等格式。</p>
</li>
<li>
<p>控制器</p>
<p>控制器是网络摄像机的心脏，它肩负着网络摄像机的管理和控制工作。如果是硬件压缩编码，控制器是一个独立部件；如果是软件编码压缩，控制器是运行编码压缩软件的DSP，即二者合而为一。</p>
</li>
<li>
<p>网络服务器</p>
<p>网络服务器提供网络摄像机的网络功能，它采用了RTP/RTCP、UDP、HTTP、TCP/IP等相关网络协议，允许用户从自己的PC机使用标准的浏览器根据网络摄像机的IP地址对网络摄像机进行访问，观看实时图像，及控制摄像机的镜头和云台。</p>
</li>
<li>
<p>外部报警、控制接口</p>
<p>网络摄像机为工程应用提供了实用的外部接口，如控制云台的485接口，用于报警信号输入输出的I/O口。如红外探头发现有目标出现，发报警信号给网络摄像机，网络摄像机自动调整镜头方向并实时录像；另一方面，当网络摄像机侦测到有移动目标出现时，亦可向外发出报警信号。</p>
<p>网络摄像机的基本原理是：图像信号经过镜头输入及声音信号经过麦克风输入后，由图像传感器的声音传感器转化为电信号，A/D转换器将模拟电信号转换为数字电信号，再经过编码器按一定的编码标准进行编码压缩，再控制器的控制下，由网络服务器按一定的网络协议送上局域网或INTERNET，控制器还可以接收报警信号及向外发送报警信号，且按要求发出控制信号。</p>
</li>
<li>
<p>图像的编码标准</p>
<p>目前，网络摄像机的图像压缩编码标准主要有MPEG4、H.263、H.264、M-JPEG等。</p>
<p>MPEG4:<br>
所谓MPEG标准就是指由ISO的活动图像专家组制定的一系列关于音视频信号以及多媒体信号的压缩与解压缩技术的标准。到目前为止，已经制定完成并批准执行的有：1991年批准的MPEG1、MP3;1994年批准的MPEG2;1999年批准的MPEG4和MP4。正在制定的标准有：MPEG7和MEPG21.</p>
<p>H.263:<br>
H.263是ITU-T提出的作为H.324终端使用的视频编解码建议，H.263经过不断地完善和多次的升级已经日臻成熟，如今已经大部分代替了H.261，而且H.263由于能在低带宽上传输高质量的视频流而日益受到欢迎。
H.263是基于运动补偿的DPCM的混合编码，在运动补偿的DPCM混合编码，在运动搜索的基础上进行运动补偿，然后运用DCT变换和“之”字形扫描编码，从而得到输出码流。H.263在H.261建议的基础上，将运动矢量的搜索增加为半象素点搜索；同时又增加了无限制运动矢量、基于语法的算术编码、高级预测技术和PB帧编码等四个高级选项；从而达到了进一步降低码速率和提高编码质量的目的。</p>
<p>H.264:<br>
H.264是ITU-T的VCEG和ISO/IEC的MPEG的联合视频组开发的一个新的数字视频编码标准，它既是ITU-T的H.264，又是ISO/IEC的MPEG4的第十部分。<br>
在相同的重建图像质量下，H.264能够比H.263节约50％左右的码率，比目前根据MPEG4实现的视频格式在性能方面提高33％左右。</p>
<p>M-JPEG:<br>
M-JPEG技术即运动静止图像压缩技术，它把运动的视频序列作为连续的静止图像来处理，这种压缩技术方式单独完整地压缩每一帧，在编辑过程中可随机存储每一帧，可进行精确到帧地编辑。但M-JPEG只对帧内地空间冗余进行压缩，不对帧间的时间冗余进行压缩，故压缩效率不高。</p>
</li>
</ol>
<h3 id="网络摄像机特点优势">网络摄像机特点优势</h3>
<p>应用优势：</p>
<p>网络摄像机不仅可基于计算机局域网用于区域监控，如住宅小区监控、办公楼、银行、商场等传统地监控；而且也能通过INTERNET用于新型地跨区域远程监控及网上展示，远程儿童及老人看护、无人值守通信机房监控、旅游景点网上演播、产品网上展览等。</p>
<p>特点：</p>
<p>把图像进行M-JPEG编码压缩，通过网络利用TCP/IP协议进行传输；通过网络摄像机或镜头、云台和其它外部设备进行操作控制；内置一个10M/100M以太网RJ45接口，可通过网络实现远程接口；一个并行I/O口，可以连接外部传感器进行自动报警，也可以对外部设备进行控制或进行联动报警功能；一个RS45串口，可以对镜头、云台进行控制，或连接其他外部设备；内嵌WEB SERVER，网络摄像机内部提供了一个WEB SERVER,允许用户从PC机使用标准地浏览器进行各种接口、操作；具有单独地安全机制，可以对操作本摄像机地用户进行分级别的权限验证；有中心的集中式管理与控制的监控网以及无中心的分布式监控网；内置实时操作系统，支持软件下载和配置设置，方便升级和操作管理。</p>
<p>选择网络摄像机的误区</p>
<p>网络摄像机(网络摄像服务器、视频服务器、网络视频转换器等)正在进入实际工程中。
消除理解上的误区，认清网络摄像机的特点可以加快实际应用的普及。</p>
<p>问题提出：<br>
在选择数字化网络化多媒体监控产品的时候，由于主观和客观的因素产生了种种的疑虑，前几年很难得到广泛的推广和应用。步入二十一世纪，随着信息革命的发展和推动，随着宽带网络的普及，人们的意识发生了相应的转变，但仍存在许多理解上的误区，阻碍了监控向数字化、网络化发展的步代。</p>
<ol>
<li>
<p>网络摄像机太“贵”
在选择监控产品时，一提到网络摄像机，人们就会以为网络摄像机要一两万元一台，与花千把块钱就买到的普通摄像机相比太贵。
首先，前期国外生产的网络摄像机确实需要一两万元一台，但是一批国内厂家生产的产品其价格已经减低到几千左右，这已经大大降低了产品价格。<br>
其次，一台W74GM网络摄像机等于计算机+视频捕捉卡+CCD普通摄像机+网卡+操作系统+软件，即在监控端，只需要一台网络摄像机就可以将视频送上网络。因此拿普通摄像机和网络摄像机比价格是不合适的。</p>
</li>
<li>
<p>网络摄像机“技术要求太高”<br>
在选择监控产品的同时，一提到网络摄像机，人们还会以为网络太复杂，技术要求太高。其实这是一种怕的心理在作怪，网络正在走入家庭，几岁的小学生都把网络玩得转，网络对工程商和使用者来说几乎是透明的，或者说几乎不需要管他。
目前，网络基本上都基于TCP/IP。虽然网络本身的协议多，网络设备（包括网络摄像机）本身技术复杂，但是由于统一的网络协议，各生产厂家的产品都做到了只要知道开机/关机，布防/撤防等基本操作就可以了，其它全部交由网络产品来完成，真正的全自动傻瓜型操作，根本就不需要干预太多。</p>
</li>
<li>
<p>网络摄像机“图象质量差”<br>
网络摄像机基于网络，模拟本地图象，监控系统基于视频电缆（少数采用光纤），虽然都是监控，这是两种完全不同的系统结构。
作为网络摄像机的生产厂家，我们强调网络摄像机不是万能，因为网络本身不是万能。在传输距离不太远、监控点不多、又没有远程传输需要的情况下，我们依然推荐用户采用模拟图象监控系统。</p>
</li>
</ol>
<h3 id="网络摄像机应用趋势">网络摄像机应用趋势</h3>
<p>以太网技术成熟，宽带信息网络将以太网络端口延伸到整个大楼，除了提供高速的网络接入外，还能取代铜轴电缆图象传输线路，将实时图象监控纳入宽带信息网络应用范围，这就使得信息网络代替传统闭路电视成为了必然。</p>
<p>随着数字视频压缩编码技术的日益成熟，微机的普及化，为基于PC的多媒体监控创造了条件。基于PC的多媒体监控系统功能较强，但是主要解决了小范围监控的问题。当传输距离远或者需要上网时，基于PC的多媒体监控稳定性不够好、功耗高、需要有人值守、软件的开放性不好。 这就为基于网络和嵌入式技术的网络视频监控提供了舞台。</p>
<p>网络摄像机集成普通摄像机和网络转换器，将图象转换为基于TCP/IP网络标准的数据包，使摄像机所摄的画面通过RJ-45以太网接口直接传送到网络上。通过网络即可远端监视画面。</p>
<p>网络摄像机采用了最先进的摄像技术和网络技术，具有强大的功能。内置的系统软件能实现真正的即插即用，使用户免去了复杂的网络配置；内置的大容量内存存储警报触发前的图象；内置的I/O端口和通讯口便于扩充外部周边设备如：门禁系统，红外线感应装置，全方位云台等。提供软件包(SDK)便于用户自行快速开发应用软件。</p>
<p>与其他方案比较：<br>
相对于传统的闭路电视监控系统：无须同轴电缆、无须庞大的视频分配器；软件实现NxN多对多（即多个观察员可同时看多个镜头画面）；安装所需设备少，工程成本大幅降低（整个安装过程就是架设摄像机和在PC机上安装系统管理软件），大幅减少线材；充分利用网络资源，走宽带网络图象传输非常廉价，增强了监控范围的灵活性，可直接实现远端监控，利用网络更新软件。这些是传统的闭路电视监控系统无法比拟的。
相对于当前的数字监控系统：对PC机的要求大为减少，一般普通配置即可；无需软件维护；无须机房，可以安装在过道和环境差的地点；可以避免了死机现象和重新启动时造成无法监控的缺陷。这些是基于PC的数字监控系统无法比拟的。</p>
<p>投资分析：<br>
基于网络摄像机的监控系统和传统监控系统成本比较需要考虑许多因素。主要因素有监控点数、监控副控数、监控范围、录像要求、报警要求等。</p>
<p>在比较基于网络摄像机的监控系统和传统监控系统成本时，还有一个重要的出发点就是：计不计算网络布线和电脑的成本？计算进入成本的理由很简单；不计算进入成本的理由是网络布线和电脑是已有投资，不做监控也需要。</p>
<p>如果不计算网络布线和电脑成本，即使在一个大楼内，当监控点数到达50个，监控副控到10个时，两种方案的投资相近（35万）。</p>
<p>总结：</p>
<p>基于网络摄像机的监控系统具有如下优点：</p>
<ol>
<li>
<p>先进性<br>
此系统利用现有的综合布线网络传输图象，并进行实时监控。系统所需的前端设备少，连线简洁；后端仅需一套软件系统即可。</p>
</li>
<li>
<p>可靠性<br>
此系统的主要设备网络摄像机采用了嵌入式实时操作系统，所需设备简单，而图象的传输是通过综合布线网络实现的，系统的可靠性是相当高的。</p>
</li>
<li>
<p>性能价格比<br>
此系统所需设备极其简单，系统的控制全由后端的软件系统实现，省去了传统模拟监控系统中的大量设备，如昂贵的矩阵、画面分割器、切换器、视频转网络的主机等。由于图象的传输通过综合布线网络，省去了大量的视频同轴电缆，降低了费用。</p>
</li>
<li>
<p>安全性<br>
系统设置了不同等级的使用者权限，仅有最高级权限的用户才可对整个系统进行设置或更改。没有权限的用户是接收不到图象的。图象数据的存储是专有的格式。</p>
</li>
<li>
<p>使用及维护性<br>
系统的安装极其简单,软件系统的安装及使用也非常易懂。在维护性方面,系统的接线十分简洁，而主要设备的可靠性很高，维护性能好，而且可实现远程维护。</p>
</li>
<li>
<p>扩展及延伸性<br>
当需要增加监控点，监控主机时，只需要通过现有网络增加一台摄像机或PC机即可，而不需要对现有布线系统做什么改动</p>
</li>
<li>
<p>应用范围广阔<br>
区域性监控：利用网络传送实时图象，如办公室、大楼等跨区远端监控：连锁事业、大型工厂机房、远端老人儿童看护、公共建物、无人危险环境监控、各金融机构分行监控、交通监管、错误警报辨识…等。</p>
</li>
</ol>
<h3 id="网络摄像机产品来源及发展趋势">网络摄像机产品来源及发展趋势</h3>
<p>最近两年来，一些公司推出了网络摄像机。</p>
<p>日本富士通下属的风险企业Alphaomega软件公司上市了采用新型图像压缩格式Wavelet（小波）的因特网摄像机“Web Cam”，价格约合803美元。</p>
<p>Web Cam摄像机内置Web服务器软件，只需利用以太网缆线连接网络，就可以收录以及发送动态图像。Web Cam采用便于使用Wavelet压缩格式进行图像最优化处理的Linux操作系统。该产品将Linux以及Web服务器等软件内置到芯片中，从而可以高速处理基于Wavelet压缩格式的图像数据。</p>
<p>索尼公司于2001年9月推出一款即使不用个人电脑也能够上网传送动态/静态图像的数码摄像机。该产品具有Web浏览器和电子邮件功能，可在2.5英寸液晶画面上进行操作。同时支持蓝牙功能，通过与索尼的支持蓝牙技术的调制解调器或日本au公司的移动电话“C413S”组合使用，可以不经过个人电脑直接上网。</p>
<p>日本JVC公司推出的网络摄像机配备了可将来自摄像机的画面和声音通过USB接口直接传送给个人电脑的“Web Camera”功能，以及可以通过因特网直接向对方电脑发送画面和声音的可视电话功能。它采用1／3.6英寸的总分辨率为133万个像素的CCD。通过与该公司独立开发的“Super High Band Camera电路”相结合从而确保水平分辨率达到540线。另外，该产品即使不使用录像带也可以将MPEG4动画文件保存在“SD内存卡”。也可以同样将记录在Mini DV录像带中的动画转换为MPEG4动画文件保存到SD内存卡。利用该产品的捆绑软件，还可以将来自摄像机的画面以MPEG1的格式直接保存到个人电脑中的硬盘。</p>
<p>你出门在外，是不是会担心家中的老人或是宠物呢?如果是的话， 日本KEYENCE 的CCD摄像机“MC-1000”就对你再适合不过了。该产品是一种连接到个人电脑USB接口的CCD摄像机，可以通过个人电脑上下左右180度自由改变摄像镜头的朝向。在操作该摄像机时需要使用附带的工具软件。利用该工具便可通过鼠标操作来改变摄像机的拍摄范围了。除此之外，还可以通过Web浏览器发出改变MC-1000朝向的指令。例如，可以在出差地通过电脑观看家中的画面，并调整摄像机的朝向一边观看房间各处的情况。由于该软件可以输出包含用来控制摄像机的JavaScript的HTML源代码，因此只要将该HTML文件上载到Web网站，便可以随时随地看到利用MC-1000所拍摄的图像。不过要想达到这一目的，连接MC-1000的个人电脑必须要有固定IP地址和永久接入因特网的环境。 另外，还可以利用该软件的检测画面变化功能监测家中是否有盗贼入侵，因此还可被用做简易防盗设备。另外，该软件还可在检测出变化的那一刻自动拍摄静画及动画，并将图像文件以附件形式发送给指定邮件地址的功能。另外，该软件还具有使摄像机自动调节到事先指定位置进行拍摄的无人运行功能。</p>
<p>国内市场上的长信嘉网络摄像机是带有内置Web服务器、网络接口和硬盘的数字摄像设备。该设备不需要通过计算机，直接与以太网相连，提供了一种方便且成本低廉的实时图像采集和传输的设备。该网络摄像机拥有自己的IP地址，安全的内部局域网上，甚至Internet上的用户可通过标准Web浏览器对它进行访问，观看它传送过来的图像。根据应用环境的不同，长信嘉网络摄像机有多种不同规格可供选用。</p>
<h3 id="网络摄像机相关术语">网络摄像机相关术语</h3>
<p>CPU</p>
<p>CPU即中央处理器，是网络摄像机最核心的部件之一，是网络摄像机的大脑，大部分的数据信息都是由它来完成的。它的工作速度快慢直接影响到摄像机的运行速度。CPU可分为控制单元（Control Unit；CU）、逻辑单元（Arithmetic Logic Unit；ALU）、存储单元（Memory Unit；MU）三大部分，从应用角度可以分为X86式、嵌入式和其他高性能式三大类。网络摄像机一般用的都是嵌入式的CPU。</p>
<p>Flash Memory</p>
<p>Flash Memory即快擦型存储器，在断电情况下仍能保持所存储的数据信息，但是数据删除不是以单个的字节为单位而是以固定的区块为单位。区块大小一般由256KB到20MB。FLASH这个词最初由东芝因为该芯片的瞬间清除能力而提出。闪存源于EPROM，芯片价格不高，存储容量大。闪存正在成为EPROM的替代品，因为它们很容易被升级。闪存被用于PCMCIA卡，PCMCIA闪存盘，其它形式硬盘，嵌入式控制器和SMART MEDIA。如果闪存或其它相关的衍生技术能够在一定的时间内清除一个字节，那将导致永久性的（不易失）RAM的到来。</p>
<p>DRAM</p>
<p>DRAM（Dynamic Random-Access Memory），即动态随机存储器最为常见的系统内存。DRAM 只能将数据保持很短的时间。为了保持数据，DRAM 必须隔一段时间刷新（refresh）一次。如果存储单元没有被刷新，数据就会丢失。</p>
<p>操作系统</p>
<p>操作系统（Operating System，简称OS）传统上是负责对计算机硬件直接控制及管理的系统软件。操作系统的功能一般包括处理器管理、存储管理、文件管理、设备管理和作业管理等。当多个程序同时运行时，操作系统负责规划以优化每个程序的处理时间。在网络摄像机是了常见的操作系统是Linux。 一个操作系统可以在概念上分割成两部分：内核Kernel以及壳shell。一个壳程序包裹了与硬件直接交流的内核：硬件-内核-壳-应用程序。但有些操作系统上内核与壳完全分开（例如Unix、Linux等），这样用户就可以在一个内核上使用不同的壳；而另一些的内核与壳关系紧密（例如Microsoft Windows），内核及壳只是操作层次上不同而已。</p>
<p>图像分辨率</p>
<p>图像分辨率的概念简单说就是指屏幕水平和方向垂直方向所显示的点数。比如1024×728，其中“1024”表示屏幕上水平方向显示的点数，“768”表示垂直方向显示的点数。分辨率越高，图像也就越清晰，且能增加屏幕上的信息容量。分辨率越高说明网络摄像机对图像的显示越清晰。</p>
<p>图像压缩速率</p>
<p>图像压缩速率是指图像压缩过以后在传输过程中的传输速率，因为每幅图片就是一帧，PAL制式每秒钟25帧，NTSC制式每秒钟30帧，也就是PAL制式的每秒钟能传送25个画面，NTSC每秒能传送30个画面。捕捉动态视频内容时，此数字愈高愈好。但不能低于24帧/秒，因为低于这个数值时，动态的图像已经不连续，开始出现掉祯现象。</p>
<p>显示尺寸</p>
<p>显示尺寸指网络摄像机可显示最大多大面积的画面，在特定的条件下也指此网络摄像机所监测的画面能否以全屏的方面显示，这也更方便了图像的观测。</p>
<p>网络协议</p>
<p>对于网络摄像机来说就是传输所摄图像时所要遵守的一些规范，由于现有的网络都是在TCP/IP协议下的，所以大部分网络摄像机都遵守这个协议。下面主要介绍一下什么叫协议，和现有的几种常用的网络协议，。 网络协议就是网络中（包括互联网）传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样，计算机之间的相互通信需要共同遵守一定的规则，这些规则就称为网络协议。 一台计算机只有在遵守网络协议的前提下，才能在网络上与其他计算机进行正常的通信。网络协议通常被分为几个层次，每层完成自己单独的功能。通信双方只有在共同的层次间才能相互联系。常见的协议有：TCP/IP协议、IPX/SPX协议、NetBIOS协议等等。在互联网上被广泛采用的是TCP/IP协议，在局域网中用得的比较多的是IPX/SPX.。用户如果访问Internet，则必须在网络协议中添加TCP/IP协议。</p>
<p>LAN接口</p>
<p>LAN接口同时也可分为广域网（WAN）接口和局域网接口，我们常用的广域网（WAN）接口有：V.35、RS232、ISDN、BRI、PRI、E1接口等。网络摄像机一般是以RJ-45接口和网络相连接的。</p>
<p>AUI端口</p>
<p>AUI端口是用来与粗同轴电缆连接的接口，它是一种“D”型15针接口，这在令牌环网或总线型网络中是一种比较常见的端口之一。路由器可通过粗同轴电缆收发器实现与10Base-5网络的连接，但更多的是借助于外接的收发转发器（AUI-to-RJ-45），实现与10Base-T以太网络的连接。当然也可借助于其他类型的收发转发器实现与细同轴电缆（10Base-2）或光缆（10Base-F）的连接。这里所讲的路由器AUI接口主要是用粗同轴电缆作为传输介质的网络进行连接用的，AUI接口示意图如图所示。</p>
<p>RJ-45端口</p>
<p>RJ-45端口是我们最常见的端口了，它是我们常见的双绞线以太网端口，因为在快速以太网中也主要采用双绞线作为传输介质，所以根据端口的通信速率不同RJ-45端口又可分为10Base-T网RJ-45端口和100Base-TX网RJ-45端口、1000Base-TX三类。其中，10Base-T网的RJ-45 端口在路由器中通常是标识为“ETH”，而100Base-TX 网的RJ-45端口则通常标识为“10/100bTX”，这主要是现在快速成以太网路由器产品多数还是采用10Mbps/100Mbps带宽自适应的。</p>
<p>软件升级</p>
<p>软件升级主要是指网络摄像机的配置软件在厂商有新版本的软件可利用时，通过何种方式对网络摄像机的配置软件进行升级的问题。有的网络摄像机内置实时操作系统，支持软件下载和配置设置，方便升级和操作管理。但一些产品只能先下载下新版本的软件，然后人工配置升级管理。</p>
<p>安全性</p>
<p>系统设置了不同等级的使用者权限，仅有最高级权限的用户才可对整个系统进行设置或更改。没有权限的用户是接收不到图像的。图像数据的存储是专有的格式。</p>
<p>视频输入/输出</p>
<p>视频输入输出的主要作用就是将显示信号输出到外部设备上，或收集外部采集的视频信号。对于网络摄像机来说由于它只要输出到浏览器上就行了，能被监控都看到就行了。</p>
<p>警报输入/输出</p>
<p>警报输入输出是指可根据需要提供多路的报警信号输入端口及一路的报警信号输出。用户可以根据情况接入烟火感应器、红外探头、湿度等各种传感器。甚至于现在有的新产品在有意外情况发生的监控画面将弹出到屏幕的最前端，并发出警报声，并可将发生图像送到指定邮箱中去。</p>
<p>远程控制</p>
<p>Pan/Tilt/Zoom远程控制主要是指网络摄像机有没有远程控制功能，以及远程控制功能的通讯接口是哪种。现有的网络摄像机般都支持这三种远程控制。并且通讯接口大部分用的都是RS 485 TxD，RxD。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>「转」摇滚靡靡之音,看清“投降派”许巍真面目</title>
      <link>https://w.toomore.us/posts/youth/%E6%91%87%E6%BB%9A%E9%9D%A1%E9%9D%A1%E4%B9%8B%E9%9F%B3%E7%9C%8B%E6%B8%85%E6%8A%95%E9%99%8D%E6%B4%BE%E8%AE%B8%E5%B7%8D%E7%9C%9F%E9%9D%A2%E7%9B%AE/</link>
      <pubDate>Fri, 13 May 2011 02:11:51 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/%E6%91%87%E6%BB%9A%E9%9D%A1%E9%9D%A1%E4%B9%8B%E9%9F%B3%E7%9C%8B%E6%B8%85%E6%8A%95%E9%99%8D%E6%B4%BE%E8%AE%B8%E5%B7%8D%E7%9C%9F%E9%9D%A2%E7%9B%AE/</guid>
      <description>编者按：8月13日，许巍在北京工人体育馆举办首次个人演唱会，这次盛会成为上世纪九十年代文艺青年的集体狂欢，他们如今已是社会的中坚分子。许巍个唱是今年最重要的音乐事件之一。
先不做乐评家，做一个听歌的人，分析别人的时候也来一点自我分析———对我来说，许巍属于不用任何音乐/理论/思想分析，一听我就会喜欢的歌手，对他的亲近就像亲近自己本性中的某个软弱部分。他经常不是高于而是低于，不是精神而属于口味，顶多不超过性情、感性部分，像是某种癖好。因为把音乐当成上升、探险、发现的事儿，我永远不会想听许巍，但一旦听了一定又会很着迷。他的不思进取和创作中许多跟不思进取一样的烂毛病多得简直每听一句都会感到，却不会影响我强烈的痴迷。总之他属于那类老套、没刺激、没新景但令我狂迷的歌手：如果不因为约稿，我永远不会想写他；如果大家都说他的好，我一定要猛揭他的不足；而如果大家都开口大骂，我一定会说起他的迷人之处。
许巍是一种瘾。
但许巍有几点还是让我没想到：他那么好听，居然没成万人迷；在我的印象里他受欢迎得简直俗滥，简直滥了街，居然还一直小众着，一直没得到体育馆的号召力；他这样一个好听得像蜜糖的人居然被人当成另类，还居然差点养活不了自己；他穷得撑不下去、崩溃得像是就要放弃的时候居然开始红了，他开始红的时候大家开始开骂了，老FANS开始倒戈了，像是他是因为投降、因为变节才开始红的。
若是许巍都不能红，还有谁能够红？若是许巍都不能成为大众的爱、都不能养活自己，那么谁还能够养活自己？这优质的流行干将差点没能混下去的事实，只能反衬出这超滥的中国音乐界，这超胡搞的流行大众，这超看不懂的全民娱乐的时代！
男邓丽君，摇滚版的靡靡之音
为了交这篇作业，上上个星期，从十年前的《两天》开始，我开始了重听。第一张红星版的合辑，第二张合辑；《在别处》、《那一年》、《时光·漫步》、《每一刻都是崭新的》，十年四张专辑，这一听居然再度被许巍深陷。
那几天的中午我躺在地板上，听着许巍在耳朵里轰鸣，什么也不想做，只是迷醉。
这种症状像极了当年听邓丽君。
许巍的音乐跟邓丽君风马牛不相及，但在音乐给人的感受上，二者逼似。
许巍有一种令人深陷的力量。他的歌不只是醉人，而是麻醉人；不只是沉醉，而是沉陷；不只让人着迷，而是让人萎靡；不只让你欲罢不能，还让你感到有被腐蚀、被化骨的那种效果。这几个句子，把主语换成邓丽君，结果是一样的。
而且，我只在这两个人身上，发现这同一种症状。它简直是我们的天敌，是人性的虚弱本身，是天赐的安慰！所以我称许巍是“男邓丽君”，是摇滚版的靡靡之音。
许巍和邓丽君还有一点是一样的，他们的唱都给人一种错觉：好像所有歌都是一样的，一从他们嘴里跑出来全像是一个调子，像前面歌曲的三胞胎四胞胎。具有同化魔力的演唱者不少，但具有像他们俩这样的同化魔力，我也没见过第三个。因为这种同化魔力，许巍的歌曲，我只记住了《两天》(因为是他的第一首)、《执著》(因为田震先唱过)、《蓝莲花》(因为“蓝莲花”那一句)，《小鱼的理想》(这首歌的歌名、歌词和旋律是许巍作品里最个性化的)、《悠远的天空》(完全不一样的许巍及其新乐境)、《曾经的你》(只有一个极简单的句子加一个绕梁三日的滴哩哩哩哩哩，所以记住了)，其他的，看到歌名我想不起歌声，听到歌声我想不起歌名，虽然我听了不下十遍。
相同背后的不同，民谣身影后的先锋试奏
许巍的所有歌曲都混淆不清、界线不明，与他那种“永恒”、“遥远”、“今夜”、“简单”、“故乡”、“九月”、“方向”、“温暖”的歌曲取名方式有关，更与有这样歌名的歌曲里千篇一律的风景季节、晨昏早晚、理想希望、失望绝望等描写和词汇有关。它像是一个人心绪的不同片断，许巍从来没有走出来过；像意识浮想的一条河，流经昨天今天，流经去年前年，却始终是这同一条河。
从音乐层面看，许巍嗓音的魅力，许巍的创作手法，也强化着这种千篇一律。嗓音的音色特征、感人魔力不好说，它所拥有的象征却说得出来，甚至在听者接受的层面，听者所感受到的，实际上就是这象征本身。邓丽君的声音是相思，是二人世界的缱绻；许巍的声音是孤寂者的思绪，是时间流逝神思飘飞，是一个人独对自己的孤独忧伤冥想。我想也许正因为是这，它才令听者深陷和麻醉吧。
许巍的创作，基本上是一个套，吉他的套，在吉他中一个和弦一个和弦地走。但非常厉害的是，许巍作的套非常套人。他的每一个旋律都是入耳难忘的，那么顺那么巧又那么别致，有那么一个小小的挑钩，碰你一下，在脑子中萦回不去，盘绕不绝；另外，那旋律又似说话，与语言的韵律、节奏相一致；又带一点点口音，这口音也是一个挑钩，将熟悉和顺畅挑开一点小异样，刺着你，钩着你，绕着你。
这是非常有侵蚀力的民谣，余音绕梁。在歌唱中说西安话的许巍，在口音、嗓音、作曲魅力、人格象征等强大感召力之下，就把其他地方都给掩盖了。所以，以下事实明显，却往往不被人看清：首先，许巍音乐的核心是民谣，十年不易；但是其器乐上的变革千里万里，以专辑为单位考量，四张许巍风格迥异。
《在别处》(1997年专辑)是一张英式噪音吉他作品。这是当时最吵闹的中国猛乐，又厚又重又脏的噪音流把中国摇滚青年全震住了，而噪音包裹着的民谣，甜美得简直可以把人化掉。如果你能理解它，如果你恰好有与许巍相一致的心境，你一点不觉得它吵，而感到那声响恰如其分，感到那声响正应对了你那颗心，应对了血脉贲张、激情翻涌、稀里哗啦的情绪大雪崩、心中渴望呐喊出全世界最大声音的内心轰鸣。它是可以代替人哭泣的，比真正的哭泣更尽兴。
迄今为止，它依然是代表许巍最恰当、最强大的专辑。许巍本质上是孤寂的，许巍就是一种孤寂———外表冷漠内心狂热，而巨大的噪音，最能酣畅淋漓地表达孤寂者内心最压抑、最强大的情绪奔流。
《那一年》(2000年专辑)音乐中突出的，是清冷、清亮中回荡的电音吉他，真正有野心的却不是它，而是键盘，键盘是这张专辑创造、自在、无拘无束地作出了先锋性探索的部分，初现出大师级的配乐智慧。它的操作者张荐，现在已经成为备受欧洲先锋音乐界瞩目的中国艺人。但这样的探索却被许巍的歌声完全盖掉了。除非特别注意才能听到，《那一年》的键盘是多么地不一样。
当所有的键盘手都在歌手身后制造音景———无论中国的还是外国的，张荐却配合着歌曲作临时、奥妙、极微和点缀式的发挥，制造着即兴、无调、非曲式、非乐句的声响实验。
《时光·漫步》(2002年专辑)可能是最中规中矩的，其主要配乐和吉他演奏变成了梁剑峰，思路真正转向民谣，转向基于原声特质的乐器演奏。从音乐想法上看，它可能是所有专辑中最没有追求的，就为给你听几首好歌，听几首扎扎实实的伴奏。但它的温暖，它的克制，它的贴切，它的实力，它的动听，都没办法轻视。而且，梁剑锋吉他演奏的华丽、开放、多样、敏锐、灵动，实实在在是吉他音乐的一个标高。这一回，许巍的民谣风格再没人会误认了。这是许巍的标准照，是里里外外的民谣摇滚作品。
《每一刻都是崭新的》(2004年专辑)似乎在延续《时光·漫步》，有时也确实是在延续《时光·漫步》。但有一个非常敏感的变化：许巍的心境变大了，乐境也变大了。
吉他演奏者固然编了不少曲，重要的变化却不是吉他思路所主宰的。它在格局上像是要流行音乐化，变得折衷、平庸、圆滑，其实却暗暗包容不少新东西，与以电子、实验为主的中国实验音乐崛起的场景暗暗相应。
总之，十年四张专辑，在许巍超强同化力的同一种歌声遮蔽之下，悄悄发生着中国内地音乐实验的碎语。1997年的主角是李延亮(吉他)、张亚东(键盘)；2000年的主角是张荐(键盘)；2005年是许巍自己导演，作出从民谣摇滚向“大乐”飞升之势，尤其上海音乐家赵光境界宏大的最后一曲(《悠远的天空》)，预示着未来很可能会变得不一样的许巍。
投降派许巍，是单人世界的慰藉
这些年，许巍的音乐，从重，变轻，变得更轻。许巍的风格，从硬，变软，变得更软。许巍的心境，从黑暗、苦闷，变温暖变明亮，近两年更变得平和、欢喜、达观。与此同时，从第三张专辑开始，“倒许”声浪渐起。
这些“倒许党”，无一例外都曾经是许巍的狂迷，他们现在不满的是：许巍不摇滚了，许巍变甜了，许巍不愤怒了，许巍不是那个热爱的许巍了，许巍变节了，许巍向这个商业、世俗的世界投降了。
但我听许巍，从未觉出这个人有真正的变化。反倒是狂迷们一直以来对许巍的通行认定，大多似是而非。比如，许巍是一个理想主义者。
许巍是一个一直坚守的人不假，但许巍算哪一门子理想主义？他的理想除了坚持唱下去，坚持作音乐，坚持奋斗养活自己、乃至有一天能站上万人欢呼的大舞台，有没有其他内容？
再比如，许巍一直走在路上。这是许巍歌里的形象。
许巍一直把自己当成一个仗剑走天涯的人，一个走在路上追求梦想的人，一个向着远方独行的浪子，但他唱这些的时候，可并没有真的走在路上呵。
走在路上，其实是许巍的梦还遥遥无期的象征。当许巍的死忠歌迷说许巍理想主义、说他一直行吟在远方路上的时候，许巍其实躲在北京郊区的小屋里深居简出、不近世事，几乎终日只与自己和吉他相伴。他唯一的一次出走，是1994年离开老家西安到北京，仗着琴艺和音乐上的才能，渴望打开一片江山，之后，他再没有离开过这个城市，再没有离开以他的小屋为中心的活动半径。
许巍确实是有梦的，他喜欢做梦，也算得上是在追求梦。如果说他有理想，他的理想同所有人一样，不过是希望以才能证明自己，甚至铸就一段人生辉煌。人总是要有梦的，不自觉这梦还会将凡俗的向往高尚化，将个人的坚守理想化。不甘于平庸和现状，在对未来的愿景中把世界描画得很美好，想象自己有一天变成万人景仰的大英雄：“那理想世界就像一道光芒”，温暖着内心，慰藉着痛苦。这差不多就是许巍的理想主义了。
对这个梦许巍一直坚持，也不算松懈，经历了黑暗/灰暗/徘徊/无望/绝望/山重水复之后，现在他的梦眼见要实现了，原来同病相怜着的那些听乐人，却一下厌弃了这宿主的柳暗花明，厌弃了他的转机与开朗，觉得这是丢掉了理想，开始堕落了。
其实许巍一直都不是一个理想主义者，还有一个原因。许巍并不是一个尚行动的人，而是一个喜欢面壁的人。如果他所向往的不是音乐而是某种实业，我完全可以推想，许巍实现它会极度地困难。因为他会花更多时间幻想、自恋而不是积极地去投入实干。许巍的本质是内向多思，感悟时光感悟生命，他是那种喜欢面对自己并终日想象的人，是孤独者疏离者白日梦者。正是在这点上，许巍才一直是许巍，许巍才成为我们喜爱的许巍。
对许巍们来说，坚持理想令自我感动，这理想是什么并不会过多考虑；坚持美好令自我感动，如何实现这美好并不会过多考虑；向往远方令自我感动，何时何地踏上这远方并不会过多考虑。总之，重要的是相信美好热爱美好坚信自己美好，在坚信中就会有持续的感动和升华。
2000年以后，许巍心境上有很大变化，但在上面说到的这个核心人格上，他可一点儿都没变。他现在依然终日面对着自己，玄想，飘飞，感光并显影着光阴中和心境中的阴阳流转。所不同的是，过去他面对这一切时，总感到忧伤彷徨苦闷；现在他却感到了豁然开朗，感到了生命的喜悦光华；在《每一刻都是崭新的》中，许巍甚至进入到了似乎是宗教的欢喜之境。
这同样是内向者的故事。内向者常年悒郁悲观，但毫无来由地心境陡转，像是突然走进了人生季节的春天，悟透了还魂了开天眼了，眼前的世界一下子充满了阳光。其实那不是真的入了宗教妙境，就只是心境变了———可能是年龄到了终于将一个时期毕了业，也可能是家境变了终于摆脱生活困境的长期纠缠。
早期，许巍的主要神魂是幻梦和幻灭。现在，他的主要神魂是感悟和体会。他一直着迷地陪着自己，无比深情地养育着那一人世界。邓丽君是两人世界的慰藉，许巍是单人世界的慰藉。是内向者心里的病，是人性的脆弱本身。
所以反抗并不是许巍音乐的特征，愤怒更不是。许巍虽然有过狂暴的噪音时期，但那噪音的实质是苦闷而非愤怒，是自我怜爱而非反抗俗世。
许巍一直都很美，一直都很甜，而不是这两年才变得美变得甜。他骨子里一直是优美的，一直甜得可以把人化开。即使在最闹人时，许巍的音乐，也根本是一种美的东西，是一种软弱的东西。
许巍一直充满内心感动。这样的艺术家就像感动本身。许巍一直靠感动写作，他的作品中没有一首是伪乐，现在依然没一首伪乐。别看他现在快乐了，这种快乐和时下的快乐一点都不一样。它是真正的喜悦，微笑，从心底里绽开，不知不觉就牵开了嘴角，显露世界最神秘动人的安慰，像花朵发现自己的秘密，像湖水漾起妙不可言的涟漪。他靠触动发现歌声，又用这歌声触动了我们，许巍的世界，从来就是真情、真诚、感动的世界。
一句话，这是内向者———是孤独的人———至深的安慰。</description>
      <content:encoded><![CDATA[<p>编者按：8月13日，许巍在北京工人体育馆举办首次个人演唱会，这次盛会成为上世纪九十年代文艺青年的集体狂欢，他们如今已是社会的中坚分子。许巍个唱是今年最重要的音乐事件之一。</p>
<p>先不做乐评家，做一个听歌的人，分析别人的时候也来一点自我分析———对我来说，许巍属于不用任何音乐/理论/思想分析，一听我就会喜欢的歌手，对他的亲近就像亲近自己本性中的某个软弱部分。他经常不是高于而是低于，不是精神而属于口味，顶多不超过性情、感性部分，像是某种癖好。因为把音乐当成上升、探险、发现的事儿，我永远不会想听许巍，但一旦听了一定又会很着迷。他的不思进取和创作中许多跟不思进取一样的烂毛病多得简直每听一句都会感到，却不会影响我强烈的痴迷。总之他属于那类老套、没刺激、没新景但令我狂迷的歌手：如果不因为约稿，我永远不会想写他；如果大家都说他的好，我一定要猛揭他的不足；而如果大家都开口大骂，我一定会说起他的迷人之处。</p>
<p>许巍是一种瘾。</p>
<p>但许巍有几点还是让我没想到：他那么好听，居然没成万人迷；在我的印象里他受欢迎得简直俗滥，简直滥了街，居然还一直小众着，一直没得到体育馆的号召力；他这样一个好听得像蜜糖的人居然被人当成另类，还居然差点养活不了自己；他穷得撑不下去、崩溃得像是就要放弃的时候居然开始红了，他开始红的时候大家开始开骂了，老FANS开始倒戈了，像是他是因为投降、因为变节才开始红的。</p>
<p>若是许巍都不能红，还有谁能够红？若是许巍都不能成为大众的爱、都不能养活自己，那么谁还能够养活自己？这优质的流行干将差点没能混下去的事实，只能反衬出这超滥的中国音乐界，这超胡搞的流行大众，这超看不懂的全民娱乐的时代！</p>
<p>男邓丽君，摇滚版的靡靡之音</p>
<p>为了交这篇作业，上上个星期，从十年前的《两天》开始，我开始了重听。第一张红星版的合辑，第二张合辑；《在别处》、《那一年》、《时光·漫步》、《每一刻都是崭新的》，十年四张专辑，这一听居然再度被许巍深陷。</p>
<p>那几天的中午我躺在地板上，听着许巍在耳朵里轰鸣，什么也不想做，只是迷醉。</p>
<p>这种症状像极了当年听邓丽君。</p>
<p>许巍的音乐跟邓丽君风马牛不相及，但在音乐给人的感受上，二者逼似。</p>
<p>许巍有一种令人深陷的力量。他的歌不只是醉人，而是麻醉人；不只是沉醉，而是沉陷；不只让人着迷，而是让人萎靡；不只让你欲罢不能，还让你感到有被腐蚀、被化骨的那种效果。这几个句子，把主语换成邓丽君，结果是一样的。</p>
<p>而且，我只在这两个人身上，发现这同一种症状。它简直是我们的天敌，是人性的虚弱本身，是天赐的安慰！所以我称许巍是“男邓丽君”，是摇滚版的靡靡之音。</p>
<p>许巍和邓丽君还有一点是一样的，他们的唱都给人一种错觉：好像所有歌都是一样的，一从他们嘴里跑出来全像是一个调子，像前面歌曲的三胞胎四胞胎。具有同化魔力的演唱者不少，但具有像他们俩这样的同化魔力，我也没见过第三个。因为这种同化魔力，许巍的歌曲，我只记住了《两天》(因为是他的第一首)、《执著》(因为田震先唱过)、《蓝莲花》(因为“蓝莲花”那一句)，《小鱼的理想》(这首歌的歌名、歌词和旋律是许巍作品里最个性化的)、《悠远的天空》(完全不一样的许巍及其新乐境)、《曾经的你》(只有一个极简单的句子加一个绕梁三日的滴哩哩哩哩哩，所以记住了)，其他的，看到歌名我想不起歌声，听到歌声我想不起歌名，虽然我听了不下十遍。</p>
<p>相同背后的不同，民谣身影后的先锋试奏</p>
<p>许巍的所有歌曲都混淆不清、界线不明，与他那种“永恒”、“遥远”、“今夜”、“简单”、“故乡”、“九月”、“方向”、“温暖”的歌曲取名方式有关，更与有这样歌名的歌曲里千篇一律的风景季节、晨昏早晚、理想希望、失望绝望等描写和词汇有关。它像是一个人心绪的不同片断，许巍从来没有走出来过；像意识浮想的一条河，流经昨天今天，流经去年前年，却始终是这同一条河。</p>
<p>从音乐层面看，许巍嗓音的魅力，许巍的创作手法，也强化着这种千篇一律。嗓音的音色特征、感人魔力不好说，它所拥有的象征却说得出来，甚至在听者接受的层面，听者所感受到的，实际上就是这象征本身。邓丽君的声音是相思，是二人世界的缱绻；许巍的声音是孤寂者的思绪，是时间流逝神思飘飞，是一个人独对自己的孤独忧伤冥想。我想也许正因为是这，它才令听者深陷和麻醉吧。</p>
<p>许巍的创作，基本上是一个套，吉他的套，在吉他中一个和弦一个和弦地走。但非常厉害的是，许巍作的套非常套人。他的每一个旋律都是入耳难忘的，那么顺那么巧又那么别致，有那么一个小小的挑钩，碰你一下，在脑子中萦回不去，盘绕不绝；另外，那旋律又似说话，与语言的韵律、节奏相一致；又带一点点口音，这口音也是一个挑钩，将熟悉和顺畅挑开一点小异样，刺着你，钩着你，绕着你。</p>
<p>这是非常有侵蚀力的民谣，余音绕梁。在歌唱中说西安话的许巍，在口音、嗓音、作曲魅力、人格象征等强大感召力之下，就把其他地方都给掩盖了。所以，以下事实明显，却往往不被人看清：首先，许巍音乐的核心是民谣，十年不易；但是其器乐上的变革千里万里，以专辑为单位考量，四张许巍风格迥异。</p>
<p>《在别处》(1997年专辑)是一张英式噪音吉他作品。这是当时最吵闹的中国猛乐，又厚又重又脏的噪音流把中国摇滚青年全震住了，而噪音包裹着的民谣，甜美得简直可以把人化掉。如果你能理解它，如果你恰好有与许巍相一致的心境，你一点不觉得它吵，而感到那声响恰如其分，感到那声响正应对了你那颗心，应对了血脉贲张、激情翻涌、稀里哗啦的情绪大雪崩、心中渴望呐喊出全世界最大声音的内心轰鸣。它是可以代替人哭泣的，比真正的哭泣更尽兴。</p>
<p>迄今为止，它依然是代表许巍最恰当、最强大的专辑。许巍本质上是孤寂的，许巍就是一种孤寂———外表冷漠内心狂热，而巨大的噪音，最能酣畅淋漓地表达孤寂者内心最压抑、最强大的情绪奔流。</p>
<p>《那一年》(2000年专辑)音乐中突出的，是清冷、清亮中回荡的电音吉他，真正有野心的却不是它，而是键盘，键盘是这张专辑创造、自在、无拘无束地作出了先锋性探索的部分，初现出大师级的配乐智慧。它的操作者张荐，现在已经成为备受欧洲先锋音乐界瞩目的中国艺人。但这样的探索却被许巍的歌声完全盖掉了。除非特别注意才能听到，《那一年》的键盘是多么地不一样。</p>
<p>当所有的键盘手都在歌手身后制造音景———无论中国的还是外国的，张荐却配合着歌曲作临时、奥妙、极微和点缀式的发挥，制造着即兴、无调、非曲式、非乐句的声响实验。</p>
<p>《时光·漫步》(2002年专辑)可能是最中规中矩的，其主要配乐和吉他演奏变成了梁剑峰，思路真正转向民谣，转向基于原声特质的乐器演奏。从音乐想法上看，它可能是所有专辑中最没有追求的，就为给你听几首好歌，听几首扎扎实实的伴奏。但它的温暖，它的克制，它的贴切，它的实力，它的动听，都没办法轻视。而且，梁剑锋吉他演奏的华丽、开放、多样、敏锐、灵动，实实在在是吉他音乐的一个标高。这一回，许巍的民谣风格再没人会误认了。这是许巍的标准照，是里里外外的民谣摇滚作品。</p>
<p>《每一刻都是崭新的》(2004年专辑)似乎在延续《时光·漫步》，有时也确实是在延续《时光·漫步》。但有一个非常敏感的变化：许巍的心境变大了，乐境也变大了。</p>
<p>吉他演奏者固然编了不少曲，重要的变化却不是吉他思路所主宰的。它在格局上像是要流行音乐化，变得折衷、平庸、圆滑，其实却暗暗包容不少新东西，与以电子、实验为主的中国实验音乐崛起的场景暗暗相应。</p>
<p>总之，十年四张专辑，在许巍超强同化力的同一种歌声遮蔽之下，悄悄发生着中国内地音乐实验的碎语。1997年的主角是李延亮(吉他)、张亚东(键盘)；2000年的主角是张荐(键盘)；2005年是许巍自己导演，作出从民谣摇滚向“大乐”飞升之势，尤其上海音乐家赵光境界宏大的最后一曲(《悠远的天空》)，预示着未来很可能会变得不一样的许巍。</p>
<p>投降派许巍，是单人世界的慰藉</p>
<p>这些年，许巍的音乐，从重，变轻，变得更轻。许巍的风格，从硬，变软，变得更软。许巍的心境，从黑暗、苦闷，变温暖变明亮，近两年更变得平和、欢喜、达观。与此同时，从第三张专辑开始，“倒许”声浪渐起。</p>
<p>这些“倒许党”，无一例外都曾经是许巍的狂迷，他们现在不满的是：许巍不摇滚了，许巍变甜了，许巍不愤怒了，许巍不是那个热爱的许巍了，许巍变节了，许巍向这个商业、世俗的世界投降了。</p>
<p>但我听许巍，从未觉出这个人有真正的变化。反倒是狂迷们一直以来对许巍的通行认定，大多似是而非。比如，许巍是一个理想主义者。</p>
<p>许巍是一个一直坚守的人不假，但许巍算哪一门子理想主义？他的理想除了坚持唱下去，坚持作音乐，坚持奋斗养活自己、乃至有一天能站上万人欢呼的大舞台，有没有其他内容？</p>
<p>再比如，许巍一直走在路上。这是许巍歌里的形象。</p>
<p>许巍一直把自己当成一个仗剑走天涯的人，一个走在路上追求梦想的人，一个向着远方独行的浪子，但他唱这些的时候，可并没有真的走在路上呵。</p>
<p>走在路上，其实是许巍的梦还遥遥无期的象征。当许巍的死忠歌迷说许巍理想主义、说他一直行吟在远方路上的时候，许巍其实躲在北京郊区的小屋里深居简出、不近世事，几乎终日只与自己和吉他相伴。他唯一的一次出走，是1994年离开老家西安到北京，仗着琴艺和音乐上的才能，渴望打开一片江山，之后，他再没有离开过这个城市，再没有离开以他的小屋为中心的活动半径。</p>
<p>许巍确实是有梦的，他喜欢做梦，也算得上是在追求梦。如果说他有理想，他的理想同所有人一样，不过是希望以才能证明自己，甚至铸就一段人生辉煌。人总是要有梦的，不自觉这梦还会将凡俗的向往高尚化，将个人的坚守理想化。不甘于平庸和现状，在对未来的愿景中把世界描画得很美好，想象自己有一天变成万人景仰的大英雄：“那理想世界就像一道光芒”，温暖着内心，慰藉着痛苦。这差不多就是许巍的理想主义了。</p>
<p>对这个梦许巍一直坚持，也不算松懈，经历了黑暗/灰暗/徘徊/无望/绝望/山重水复之后，现在他的梦眼见要实现了，原来同病相怜着的那些听乐人，却一下厌弃了这宿主的柳暗花明，厌弃了他的转机与开朗，觉得这是丢掉了理想，开始堕落了。</p>
<p>其实许巍一直都不是一个理想主义者，还有一个原因。许巍并不是一个尚行动的人，而是一个喜欢面壁的人。如果他所向往的不是音乐而是某种实业，我完全可以推想，许巍实现它会极度地困难。因为他会花更多时间幻想、自恋而不是积极地去投入实干。许巍的本质是内向多思，感悟时光感悟生命，他是那种喜欢面对自己并终日想象的人，是孤独者疏离者白日梦者。正是在这点上，许巍才一直是许巍，许巍才成为我们喜爱的许巍。</p>
<p>对许巍们来说，坚持理想令自我感动，这理想是什么并不会过多考虑；坚持美好令自我感动，如何实现这美好并不会过多考虑；向往远方令自我感动，何时何地踏上这远方并不会过多考虑。总之，重要的是相信美好热爱美好坚信自己美好，在坚信中就会有持续的感动和升华。</p>
<p>2000年以后，许巍心境上有很大变化，但在上面说到的这个核心人格上，他可一点儿都没变。他现在依然终日面对着自己，玄想，飘飞，感光并显影着光阴中和心境中的阴阳流转。所不同的是，过去他面对这一切时，总感到忧伤彷徨苦闷；现在他却感到了豁然开朗，感到了生命的喜悦光华；在《每一刻都是崭新的》中，许巍甚至进入到了似乎是宗教的欢喜之境。</p>
<p>这同样是内向者的故事。内向者常年悒郁悲观，但毫无来由地心境陡转，像是突然走进了人生季节的春天，悟透了还魂了开天眼了，眼前的世界一下子充满了阳光。其实那不是真的入了宗教妙境，就只是心境变了———可能是年龄到了终于将一个时期毕了业，也可能是家境变了终于摆脱生活困境的长期纠缠。</p>
<p>早期，许巍的主要神魂是幻梦和幻灭。现在，他的主要神魂是感悟和体会。他一直着迷地陪着自己，无比深情地养育着那一人世界。邓丽君是两人世界的慰藉，许巍是单人世界的慰藉。是内向者心里的病，是人性的脆弱本身。</p>
<p>所以反抗并不是许巍音乐的特征，愤怒更不是。许巍虽然有过狂暴的噪音时期，但那噪音的实质是苦闷而非愤怒，是自我怜爱而非反抗俗世。</p>
<p>许巍一直都很美，一直都很甜，而不是这两年才变得美变得甜。他骨子里一直是优美的，一直甜得可以把人化开。即使在最闹人时，许巍的音乐，也根本是一种美的东西，是一种软弱的东西。</p>
<p>许巍一直充满内心感动。这样的艺术家就像感动本身。许巍一直靠感动写作，他的作品中没有一首是伪乐，现在依然没一首伪乐。别看他现在快乐了，这种快乐和时下的快乐一点都不一样。它是真正的喜悦，微笑，从心底里绽开，不知不觉就牵开了嘴角，显露世界最神秘动人的安慰，像花朵发现自己的秘密，像湖水漾起妙不可言的涟漪。他靠触动发现歌声，又用这歌声触动了我们，许巍的世界，从来就是真情、真诚、感动的世界。</p>
<p>一句话，这是内向者———是孤独的人———至深的安慰。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>网吧管理员!=网络管理员</title>
      <link>https://w.toomore.us/posts/internet/internet-bar-administrator-not-network-administrator/</link>
      <pubDate>Thu, 12 May 2011 23:27:50 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/internet/internet-bar-administrator-not-network-administrator/</guid>
      <description> 网络铺天盖地的普及以及网络行业不断细化的职责，使得多数人认为网络管理员其实就跟网吧管理员一样。这种认识是不正确的，也是由于对这两类职业的具体工作不熟悉导致的。在本文中即将向大家解释这两者所承担的不同行业职责。 一、起步要求及发展方向不一致 网吧属于赢利性场所，网吧管理员充当的其实是服务员的角色，其进入门槛低，通常会一些简单的单机及网络故障诊断技能即可。自然网吧管理员在整个网吧环境中，并不具备决定性的权利，相反顾客是上帝，而网吧管理员的工作是随顾客的意愿而开展。另外随着网络在家庭中的普及，相信这个行业会慢慢的淡出市场，从而导致网吧管理员这一职业也会随即消失。 而随着企业信息化的不断深入，每个企业都会将网络环境作为重要工作来开展，这对网络管理员就有一定要求，需要掌握较全面的网络综合知识。网络管理员具备对整个企业网络的绝对处理权，企业员工通常都需要按照网络管理员既定的规范去使用网络。而且随着企业网络的不断发展，企业对高素质的网络管理员必定求贤若渴，从这方面来说，网络管理员具有更长远的发展方向。 二、工作职责不一致 前面已经提到，网吧管理员所作的工作其实很少。稍正规的网吧，会要求网吧管理员具备一定的故障排查能力，以及对网络的简单维护；其中重要的工作是保证计算机软件系统的正常运行，比如用户出现的连网游戏故障等。而整个网吧网络环境的组建，通常与网吧管理员无任何关系，在网吧管理员进入某个网吧工作时，其网络组建已经完成；因此可以说，网吧管理员从事的工作实质上就是对顾客的服务。涉及到的专业知识相当少。 而网络管理员的工作职责则大不一样，其主要体现在以下几点： 首先，网络管理员需要具备必要的网络基础知识和基本素质，比如网络规划设计、网络传输协议、英文阅读能力、培训与沟通能力等。 其次，在具体的管理范围中要涉及到设计规划网络、配置和维护网络设备、搭建网络服务器、保障系统正常运行、制作和维护企业网站、保护网络安全以及保证数据安全等内容，要想胜任这些工作并良好的开展下去，对于网络管理员自身素质的要求是非常高的。 安全与保密是工作是网络管理重要的工作职责。安全主要指防止外部对网络的攻击和入侵，保密主要指防止网络内部信息的泄漏等。对于普通级别的网络，网络管理员的任务主要是配置管理好系统防火墙。为了能够及时发现和阻止网络黑客的攻击，可以加配入侵检测系统对关键服务提供安全保护。而对于安全保密级别要求高的网络，网络管理员除了应该采取上述措施外，还应该配备网络安全漏洞扫描系统，并对关键的网络服务器采取容灾的技术手段。 总结：综上所述，网吧管理员从事的是网络管理最表面的工作，甚至可以说其根本不具备网络管理的能力；此职业所体现的职责可以用“服务”来解释。而网络管理员倾向于较专业的网络方向，其职责范围涉及网络的方方面面，并对从业人员有较高的要求，此职业所体现的职责则可以用“管理”来解释。 </description>
      <content:encoded><![CDATA[<ul style="margin-right:0px;" dir="ltr">
    <li dir="ltr">
        <div style="margin-right:0px;">
            <span style="font-family:FangSong_GB2312;color:;font-size:18px;">
                网络铺天盖地的普及以及网络行业不断细化的职责，使得多数人认为网络管理员其实就跟网吧管理员一样。这种认识是不正确的，也是由于对这两类职业的具体工作不熟悉导致的。在本文中即将向大家解释这两者所承担的不同行业职责。
            </span>
            <br />
            <br />
            <span style="font-family:FangSong_GB2312;color:;font-size:18px;">
                一、起步要求及发展方向不一致
            </span>
            <br />
            <br />
            <span style="font-family:FangSong_GB2312;color:;font-size:18px;">
                网吧属于赢利性场所，网吧管理员充当的其实是服务员的角色，其进入门槛低，通常会一些简单的单机及网络故障诊断技能即可。自然网吧管理员在整个网吧环境中，并不具备决定性的权利，相反顾客是上帝，而网吧管理员的工作是随顾客的意愿而开展。另外随着网络在家庭中的普及，相信这个行业会慢慢的淡出市场，从而导致网吧管理员这一职业也会随即消失。
            </span>
            <br />
            <br />
            <span style="font-family:FangSong_GB2312;color:;font-size:18px;">
                而随着企业信息化的不断深入，每个企业都会将网络环境作为重要工作来开展，这对网络管理员就有一定要求，需要掌握较全面的网络综合知识。网络管理员具备对整个企业网络的绝对处理权，企业员工通常都需要按照网络管理员既定的规范去使用网络。而且随着企业网络的不断发展，企业对高素质的网络管理员必定求贤若渴，从这方面来说，网络管理员具有更长远的发展方向。
            </span>
            <br />
            <br />
            <span style="font-family:FangSong_GB2312;color:;font-size:18px;">
                二、工作职责不一致
            </span>
            <br />
            <br />
            <span style="font-family:FangSong_GB2312;color:;font-size:18px;">
                前面已经提到，网吧管理员所作的工作其实很少。稍正规的网吧，会要求网吧管理员具备一定的故障排查能力，以及对网络的简单维护；其中重要的工作是保证计算机软件系统的正常运行，比如用户出现的连网游戏故障等。而整个网吧网络环境的组建，通常与网吧管理员无任何关系，在网吧管理员进入某个网吧工作时，其网络组建已经完成；因此可以说，网吧管理员从事的工作实质上就是对顾客的服务。涉及到的专业知识相当少。
            </span>
            <br />
            <br />
            <span style="font-family:FangSong_GB2312;color:;font-size:18px;">
                而网络管理员的工作职责则大不一样，其主要体现在以下几点：
            </span>
            <br />
            <br />
            <span style="font-family:FangSong_GB2312;color:;font-size:18px;">
                首先，网络管理员需要具备必要的网络基础知识和基本素质，比如网络规划设计、网络传输协议、英文阅读能力、培训与沟通能力等。
            </span>
            <br />
            <br />
            <span style="font-family:FangSong_GB2312;color:;font-size:18px;">
                其次，在具体的管理范围中要涉及到设计规划网络、配置和维护网络设备、搭建网络服务器、保障系统正常运行、制作和维护企业网站、保护网络安全以及保证数据安全等内容，要想胜任这些工作并良好的开展下去，对于网络管理员自身素质的要求是非常高的。
            </span>
            <br />
            <br />
            <span style="font-family:FangSong_GB2312;color:;font-size:18px;">
                安全与保密是工作是网络管理重要的工作职责。安全主要指防止外部对网络的攻击和入侵，保密主要指防止网络内部信息的泄漏等。对于普通级别的网络，网络管理员的任务主要是配置管理好系统防火墙。为了能够及时发现和阻止网络黑客的攻击，可以加配入侵检测系统对关键服务提供安全保护。而对于安全保密级别要求高的网络，网络管理员除了应该采取上述措施外，还应该配备网络安全漏洞扫描系统，并对关键的网络服务器采取容灾的技术手段。
            </span>
            <br />
            <br />
            <span style="font-family:FangSong_GB2312;color:;font-size:18px;">
                总结：综上所述，网吧管理员从事的是网络管理最表面的工作，甚至可以说其根本不具备网络管理的能力；此职业所体现的职责可以用“服务”来解释。而网络管理员倾向于较专业的网络方向，其职责范围涉及网络的方方面面，并对从业人员有较高的要求，此职业所体现的职责则可以用“管理”来解释。
            </span>
        </div>
    </li>
</ul>]]></content:encoded>
    </item>
    
    <item>
      <title>如果蜗牛可以相亲相爱</title>
      <link>https://w.toomore.us/posts/youth/%E5%A6%82%E6%9E%9C%E8%9C%97%E7%89%9B%E5%8F%AF%E4%BB%A5%E7%9B%B8%E4%BA%B2%E7%9B%B8%E7%88%B1/</link>
      <pubDate>Sun, 13 Feb 2011 04:49:55 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/%E5%A6%82%E6%9E%9C%E8%9C%97%E7%89%9B%E5%8F%AF%E4%BB%A5%E7%9B%B8%E4%BA%B2%E7%9B%B8%E7%88%B1/</guid>
      <description>城市边缘有一条长长的铁路线，在铁轨间的枕木上住着一个小小的蜗牛村落。很多很多年，一代又一代，他们在那里安然生活着。
浅浅和深深是在这个村落里长大的青梅竹马的玩伴。浅浅是个蜗牛女孩，壳子的正中间有一枚小小的粉红色斑点。深深很早很早以前就把浅浅当成了心中的宝贝，他暗下决心自己一定会是浅浅这辈子最好的保护，当然，这句话他还没告诉浅浅。浅浅总是像个孩子，单纯的笑，深深也陪着她笑，等她有一天长大了懂得了爱情。
雨后的春天，草尖上挂满了水珠，空气里浸满了花香，浅浅和深深沿着湿润的铁轨慢慢地散步，一列火车鸣叫着汽笛缓缓地停住了，刚好滑到他们头顶。
“喂，你们好。”浅浅和深深伸长了触角，看到了坐在火车顶上的一只蜗牛，这是他们第一次看到来自火车上的同类，都惊讶地睁大了眼睛。
“哦，这是我见过的最美丽的蜗牛，你的背上有那么美丽的一个粉红斑点。”他深情的眼神落到浅浅的眼底，浅浅忽然觉得心怦怦地跳了起来，低下头半躲在深深身后。
“你好，我是深深，她是浅浅，你从哪里来呢？”深深和他打招呼。
“我叫飞，我坐着火车到处旅行，恩，旅行实在是一件美妙的事情，可以让你看到很大很大的世界。你们不该总是留在这个小小的角落里，趁着青春正好，不如出去走走。”飞海阔天空地说了起来。在火车临时停检的几分钟时间里，他口若悬河地给浅浅和深深讲起了路过的地方，那些终年生长着茂盛树木雨水丰盛的南方，那些浅浅和深深听都没听过的地方，甚至是族里的老蜗牛都没听过的地方。
浅浅简直着了迷，目不转睛地看着飞，听飞讲那些童话般的经历。
“可是，你一个人多么孤单呢！你不如停下吧，留在我们的蜗牛村里，有同类和你做伴，会很幸福的。”深深邀请飞。
“停下？我还有那么多地方没去过呢。你们要不要和我一起上路，我就要走了，别错过这个机会啊。”他特别望了一下浅浅。
“我……”浅浅有些犹豫，她的心思已经飞到了外面，她还从来没遇到过这样有风度有学识的蜗牛，她真想和他做伴，一起去欣赏外面的风景。可是还没有来得及做好决定，火车鸣叫着就开走了，迎面的风里似乎回荡着飞和他们告别的声音。
“浅浅，回家去吧，流浪的生活是不适合我们的，外面的风景再美也不如和大家一起快乐啊。”深深拉拉走神的浅浅。他有些难过，他看得出浅浅对那个飞很着迷。
这一夜，浅浅没有睡好，她总是想起飞，虽然隔着那么高的距离，她根本看不清他的样子；深深也没有睡好，他发现浅浅已经长大了，或者该对她表白，告诉她，自己愿意陪伴她一生一世。
第二天，浅浅早早的就来找深深，深深的话还没说出口，浅浅就说：“深深，我要离开了，我决定沿着铁轨向前走，走到城市里那个车站，就可以搭上火车，就可以去南方了。”她很固执地上路了，深深急忙跟了上去，陪在她旁边，一起慢慢地向前走。
从蜗牛村到火车站的距离并不遥远，可是对两只蜗牛来说，那是无法企及的路程。从晨到昏，迎风沐雨，还有阳光炙烤，不过几天的时间，浅浅就走不动了，她伏在那里，慢慢地淡了呼吸。
“深深，我是不是走不到南方了，我好想去啊，你要是再遇到飞一定要告诉他，我爱上了那个喜欢流浪的飞。”浅浅最后看了一眼深深，再没有醒来。 深深没有哭，他没有向前走，也没有向后退，就那样坐在浅浅的身边，一动不动，一直看着浅浅的身体慢慢地在壳子里消瘦，然后守着那个有着粉红斑点的空壳。很久很久，他自己终于也变成了一枚空壳。他果然履行了心底的诺言，他陪了她一生一世。
转眼到秋天，依然是落雨的午后，一辆列车又因为临时检修停在了这里，一只老蜗牛坐在车顶的水洼里和几只飞虫聊天，他很絮叨，日复一日的，总是在和别人讲年轻时怎样风光，见过怎样的风景。
他果然是老了，眼睛也花了，望不到地面上那两只依偎着的蜗牛空壳。后来，他静静地死在了车顶上。临到生命最后一刻，他也没告诉别人，其实，他早就厌倦了这样的生活，可是没办法，从车顶到地面的距离对他来说太漫长了，在火车偶尔停歇的几分钟里，他根本就爬不下来。不然，那一天，遇见那只有粉红斑点的美丽蜗牛时，他一定会留下来陪她，一起在蜗牛村过宁静的幸福生活。他多想告诉她，他对她是如此的一见钟情。</description>
      <content:encoded><![CDATA[<p>城市边缘有一条长长的铁路线，在铁轨间的枕木上住着一个小小的蜗牛村落。很多很多年，一代又一代，他们在那里安然生活着。</p>
<p>浅浅和深深是在这个村落里长大的青梅竹马的玩伴。浅浅是个蜗牛女孩，壳子的正中间有一枚小小的粉红色斑点。深深很早很早以前就把浅浅当成了心中的宝贝，他暗下决心自己一定会是浅浅这辈子最好的保护，当然，这句话他还没告诉浅浅。浅浅总是像个孩子，单纯的笑，深深也陪着她笑，等她有一天长大了懂得了爱情。</p>
<p>雨后的春天，草尖上挂满了水珠，空气里浸满了花香，浅浅和深深沿着湿润的铁轨慢慢地散步，一列火车鸣叫着汽笛缓缓地停住了，刚好滑到他们头顶。</p>
<p>“喂，你们好。”浅浅和深深伸长了触角，看到了坐在火车顶上的一只蜗牛，这是他们第一次看到来自火车上的同类，都惊讶地睁大了眼睛。</p>
<p>“哦，这是我见过的最美丽的蜗牛，你的背上有那么美丽的一个粉红斑点。”他深情的眼神落到浅浅的眼底，浅浅忽然觉得心怦怦地跳了起来，低下头半躲在深深身后。</p>
<p>“你好，我是深深，她是浅浅，你从哪里来呢？”深深和他打招呼。</p>
<p>“我叫飞，我坐着火车到处旅行，恩，旅行实在是一件美妙的事情，可以让你看到很大很大的世界。你们不该总是留在这个小小的角落里，趁着青春正好，不如出去走走。”飞海阔天空地说了起来。在火车临时停检的几分钟时间里，他口若悬河地给浅浅和深深讲起了路过的地方，那些终年生长着茂盛树木雨水丰盛的南方，那些浅浅和深深听都没听过的地方，甚至是族里的老蜗牛都没听过的地方。</p>
<p>浅浅简直着了迷，目不转睛地看着飞，听飞讲那些童话般的经历。</p>
<p>“可是，你一个人多么孤单呢！你不如停下吧，留在我们的蜗牛村里，有同类和你做伴，会很幸福的。”深深邀请飞。</p>
<p>“停下？我还有那么多地方没去过呢。你们要不要和我一起上路，我就要走了，别错过这个机会啊。”他特别望了一下浅浅。</p>
<p>“我……”浅浅有些犹豫，她的心思已经飞到了外面，她还从来没遇到过这样有风度有学识的蜗牛，她真想和他做伴，一起去欣赏外面的风景。可是还没有来得及做好决定，火车鸣叫着就开走了，迎面的风里似乎回荡着飞和他们告别的声音。</p>
<p>“浅浅，回家去吧，流浪的生活是不适合我们的，外面的风景再美也不如和大家一起快乐啊。”深深拉拉走神的浅浅。他有些难过，他看得出浅浅对那个飞很着迷。</p>
<p>这一夜，浅浅没有睡好，她总是想起飞，虽然隔着那么高的距离，她根本看不清他的样子；深深也没有睡好，他发现浅浅已经长大了，或者该对她表白，告诉她，自己愿意陪伴她一生一世。</p>
<p>第二天，浅浅早早的就来找深深，深深的话还没说出口，浅浅就说：“深深，我要离开了，我决定沿着铁轨向前走，走到城市里那个车站，就可以搭上火车，就可以去南方了。”她很固执地上路了，深深急忙跟了上去，陪在她旁边，一起慢慢地向前走。</p>
<p>从蜗牛村到火车站的距离并不遥远，可是对两只蜗牛来说，那是无法企及的路程。从晨到昏，迎风沐雨，还有阳光炙烤，不过几天的时间，浅浅就走不动了，她伏在那里，慢慢地淡了呼吸。</p>
<p>“深深，我是不是走不到南方了，我好想去啊，你要是再遇到飞一定要告诉他，我爱上了那个喜欢流浪的飞。”浅浅最后看了一眼深深，再没有醒来。
深深没有哭，他没有向前走，也没有向后退，就那样坐在浅浅的身边，一动不动，一直看着浅浅的身体慢慢地在壳子里消瘦，然后守着那个有着粉红斑点的空壳。很久很久，他自己终于也变成了一枚空壳。他果然履行了心底的诺言，他陪了她一生一世。</p>
<p>转眼到秋天，依然是落雨的午后，一辆列车又因为临时检修停在了这里，一只老蜗牛坐在车顶的水洼里和几只飞虫聊天，他很絮叨，日复一日的，总是在和别人讲年轻时怎样风光，见过怎样的风景。</p>
<p>他果然是老了，眼睛也花了，望不到地面上那两只依偎着的蜗牛空壳。后来，他静静地死在了车顶上。临到生命最后一刻，他也没告诉别人，其实，他早就厌倦了这样的生活，可是没办法，从车顶到地面的距离对他来说太漫长了，在火车偶尔停歇的几分钟里，他根本就爬不下来。不然，那一天，遇见那只有粉红斑点的美丽蜗牛时，他一定会留下来陪她，一起在蜗牛村过宁静的幸福生活。他多想告诉她，他对她是如此的一见钟情。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>回眸,模糊了青春的脚印</title>
      <link>https://w.toomore.us/posts/youth/the-footprints-of-youth-are-blurred-when-look-back/</link>
      <pubDate>Sun, 07 Nov 2010 03:04:43 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/the-footprints-of-youth-are-blurred-when-look-back/</guid>
      <description>本以为是明天的生日
怎料今年农历的九月
竟硬生生地没有三十号
所以离青春远去的行程在毫无察觉的时候已经开始了
来的那么的突然
那么的让人难以接受！
突然的让我21岁的最后一天
就这样悄无声息的溜走了
没有留下一丝纪念
...
&amp;nbsp;&amp;nbsp; 记忆里从来没有自己以前生日的印象，
偶尔翻一翻日历
才发现
Oh
生日已经是几天前的事了
...
那最最神圣的
一生有
且仅有一次
DE
十八岁也不知是如何过来的
所有的所有都来的措手不及
------
十八岁的任务
似乎一样也未曾完成
甚至还没有企及
等一切都准备的差不多了
才发现
oh
你已经是一根老玉米了
掐不出水来了
再瞎折腾也没用的
！！
真的没用的
即便你捶胸顿足
哭天抢地
...
没人理你
没有的
我只得悻悻地
转身
然后走开
一个人
黯然伤神
默默流泪
...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 纵使如此
却庆幸自己艰难地走到了现在
明白了在适当的时间干适当的事
尽管代价很是惨不忍睹
...
..
鼠标向上滚动
才发现竟没有一个句号
不是我想
&#39;一逗到底&#39;
只是实在不忍
给青春就此画上一个看似圆满实则残忍的句号
...
我不喜欢句号
真的
甚或说讨厌
如果真要做个了结
我宁愿选择感叹号
那该有多轰轰烈烈
！！！！！
....</description>
      <content:encoded><![CDATA[<span style="widows:2;text-transform:none;text-indent:0px;letter-spacing:normal;border-collapse:separate;font:medium Simsun;white-space:normal;orphans:2;color:#000000;word-spacing:0px;-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:0px;" class="Apple-style-span">
<p style="text-align:center;"><span style="line-height:22px;border-collapse:collapse;font-size:14px;" class="Apple-style-span"><span style="font-family:楷体_GB2312;color:#cc0000;" class="Apple-style-span">本以为是明天的生日</span></span></p>
<p></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">怎料今年农历的九月</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">竟硬生生地没有三十号</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">所以离青春远去的行程</span><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">在毫无察觉的时候已经开始了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">来的那么的突然</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">那么的让人难以接受！</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">突然的让我21岁的最后一天</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">就这样悄无声息的溜走了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">没有留下一丝纪念</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">&nbsp;&nbsp; 记忆里从来没有自己以前生日的印象，</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">偶尔翻一翻日历</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">才发现</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">Oh</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">生日已经是几天前的事了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">那最最神圣的</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">一生有</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">且仅有一次</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">DE</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">十八岁也不知是如何过来的</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">所有的所有都来的措手不及</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">------</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">十八岁的任务</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">似乎一样也未曾完成</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">甚至还没有企及</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">等一切都准备的差不多了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">才发现</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">oh</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">你已经是一根老玉米了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">掐不出水来了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">再瞎折腾也没用的</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">！！</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">真的没用的</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">即便你捶胸顿足</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">哭天抢地</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">没人理你</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">没有的</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">我只得悻悻地</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">转身</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">然后走开</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">一个人</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">黯然伤神</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">默默流泪</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">&nbsp;&nbsp;&nbsp;&nbsp; 纵使如此</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">却庆幸自己艰难地走到了现在</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">明白了在适当的时间干适当的事</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">尽管代价很是惨不忍睹</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">..</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">鼠标向上滚动</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">才发现竟没有一个句号</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">不是我想</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">'一逗到底'</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">只是实在不忍</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">给青春就此画上一个看似圆满实则残忍的句号</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">我不喜欢句号</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">真的</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">甚或说讨厌</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">如果真要做个了结</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">我宁愿选择感叹号</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">那该有多轰轰烈烈</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">！！！！！</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">....</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center">&nbsp;</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">青春就像一串省略号</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">充斥着令人期待的神秘</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">勾起你的欲望</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">而我们很幸运</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">被其前后包围</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">身后的已然模糊不堪</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">却依稀可见那坚定的脚步闪烁其间</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline-block;color:#ffffff;padding-top:0px;" class="lightFont" glowcolor="#CC0000">oooO<br />
(....)... Oooo...&nbsp;<br />
.\..(.....(.....)...<br />
..\_)..... )../....<br />
.......... (_/...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">而前方的却未知其可</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">我还年轻</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">我渴望上路</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">喜欢在路上的感觉</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">....</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">真的很好</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">....</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">有时候在想</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">是我生不逢时还是怎么滴</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">被80后抛弃</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">为90后不齿</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">生活在这夹缝里</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">跟谁都没有交集</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 难道我真的很土？</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">......</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">也许是吧..</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center">&nbsp;</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">今天一整天心情都很复杂</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">时好时坏</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">好的时候是我人生中最最快乐的瞬间</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">坏的时候连死的心都有了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">早上被锁在了图书馆</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">一个人静静的待了几个小时</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">没有想很多</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">却看了半本书</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">虽然不知所云云</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">出来后手机震动了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">是个女的</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">由于信号不好</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">没听清</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">以为是老姐打过来</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">扯着嗓子吼了一通旬邑话</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">人家听不懂挂掉了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">oh</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">不是老姐</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">她也许把我的生日给忘了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">学校停电了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">但太阳很好</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">平常窝在宿舍玩电脑的都出来晒太阳了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">多么难得的机会</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">呵呵</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">大家一块懒懒的晒着太阳</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">斗斗地主</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">也想挖挖坑</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">可惜只有两个人会</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">没挖起来</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">....</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">要是天天都停电就好了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">只有停电的时候才可以坐一块谈谈天交流交流</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">真可笑</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">人咋都成这样了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">电一来</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">刷</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">一哄而散</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">就又钻进自己的虚拟世界里了</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">毅然的抛却了现实</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">我也收拾收拾</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">打开电脑</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">继续凌晨没有写完的日志</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">....</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">写完了然后继续那单调乏味的生活？！</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">....</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">真的不想...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center">&nbsp;</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center">&nbsp;</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center">&nbsp;</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center">&nbsp;</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;真不知道应该把手放哪儿...</span></p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;font-family:Arial;color:#808080;padding-top:0px;" align="center"><span style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;font-family:楷体_GB2312;color:#cc0000;padding-top:0px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　谁能告诉我放哪儿..o(︶︿︶)o</span></p>
</span>]]></content:encoded>
    </item>
    
    <item>
      <title>牵着蜗牛散步</title>
      <link>https://w.toomore.us/posts/youth/%E7%89%B5%E7%9D%80%E8%9C%97%E7%89%9B%E6%95%A3%E6%AD%A5/</link>
      <pubDate>Thu, 14 Oct 2010 23:33:24 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/%E7%89%B5%E7%9D%80%E8%9C%97%E7%89%9B%E6%95%A3%E6%AD%A5/</guid>
      <description>上帝给我一个任务
叫我牵一只蜗牛去散步。
我不能走太快，
蜗牛已经尽力爬，为何每次总是那么一点点?
我催它，我唬它，我责备它，
蜗牛用抱歉的眼光看着我，
彷佛说：「人家已经尽力了嘛!」
我拉它，我扯它，甚至想踢它，
蜗牛受了伤，它流着汗，喘着气，往前爬…
真奇怪，为什么上帝叫我牵一只蜗牛去散步?
「上帝啊!为什么?」
天上一片安静。
「唉!也许上帝抓蜗牛去了!」
好吧!松手了!
反正上帝不管了，我还管什么?
让蜗牛往前爬，我在后面生闷气。
咦?我闻到花香，原来这边还有个花园，
我感到微风，原来夜里的微风这么温柔。
慢着!我听到鸟叫，我听到虫鸣。
我看到满天的星斗多亮丽!
咦?我以前怎么没有这般细腻的体会?
我忽然想起来了，莫非我错了?
是上帝叫一只蜗牛牵我去散步。
感悟：
教育孩子就像牵着一只蜗牛在散步。
和孩子一起走过他孩提时代和青春岁月，
虽然也有被气疯和失去耐心的时候，
然而，
孩子却在不知不觉中向我们展示了生命中最初最美好的一面。
孩子的眼光是率真的，
孩子的视角是独特的，
家长又何妨放慢脚步，
把自己主观的想法放在一边，
陪着孩子静静体味生活的滋味，
倾听孩子内心声音在俗世的回响，
给自己留一点时间，
从没完没了的生活里探出头，
这其中成就的，何止是孩子。</description>
      <content:encoded><![CDATA[<p>上帝给我一个任务<br>
叫我牵一只蜗牛去散步。<br>
我不能走太快，<br>
蜗牛已经尽力爬，为何每次总是那么一点点?<br>
我催它，我唬它，我责备它，<br>
蜗牛用抱歉的眼光看着我，<br>
彷佛说：「人家已经尽力了嘛!」<br>
我拉它，我扯它，甚至想踢它，<br>
蜗牛受了伤，它流着汗，喘着气，往前爬…<br>
真奇怪，为什么上帝叫我牵一只蜗牛去散步?<br>
「上帝啊!为什么?」<br>
天上一片安静。<br>
「唉!也许上帝抓蜗牛去了!」<br>
好吧!松手了!<br>
反正上帝不管了，我还管什么?<br>
让蜗牛往前爬，我在后面生闷气。<br>
咦?我闻到花香，原来这边还有个花园，<br>
我感到微风，原来夜里的微风这么温柔。<br>
慢着!我听到鸟叫，我听到虫鸣。<br>
我看到满天的星斗多亮丽!<br>
咦?我以前怎么没有这般细腻的体会?<br>
我忽然想起来了，莫非我错了?<br>
是上帝叫一只蜗牛牵我去散步。<br>
感悟：<br>
教育孩子就像牵着一只蜗牛在散步。<br>
和孩子一起走过他孩提时代和青春岁月，<br>
虽然也有被气疯和失去耐心的时候，<br>
然而，<br>
孩子却在不知不觉中向我们展示了生命中最初最美好的一面。<br>
孩子的眼光是率真的，<br>
孩子的视角是独特的，<br>
家长又何妨放慢脚步，<br>
把自己主观的想法放在一边，<br>
陪着孩子静静体味生活的滋味，<br>
倾听孩子内心声音在俗世的回响，<br>
给自己留一点时间，<br>
从没完没了的生活里探出头，<br>
这其中成就的，何止是孩子。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>阳光有时候很灼眼</title>
      <link>https://w.toomore.us/posts/youth/the-sun-burns-your-eyes/</link>
      <pubDate>Sun, 02 May 2010 00:49:00 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/the-sun-burns-your-eyes/</guid>
      <description> 一个人的时候你会发现其实你真的只是一个人，永远都在踽踽独行，孑然一身的可怕... 感觉人群都在向这个独来独往的异类投来鄙视的目光！纵然有很多朋友，真正理解你的却屈指都不可数，因为根本就没有数的必要。人总喜欢口是心非，标榜自己有多洒脱，有多怎么样，其实内心深处还不是一缕可怜的晦涩阳光小心翼翼地收起自己本质的光芒，说出一些让人无法接受的言语来刺激别人的灵魂！。》 车水马龙人间尽繁华 我踌躇 黯酌今夜何方栖 孑然一身踽踽独行人生路 莫奈何 独饮自醉草席卧 颠倒神情于青涩的一厢情愿 纵使已逾越了纯真年代.... 奈若何 奈若何 醉生梦死 .... 今天花了五分之一厚度鞋底的代价懂得了一些东西，总之很是伤心... 你不能抚平我的伤口，但请不要往上边撒盐就行了... 思念你的时候我小心翼翼地戴起眼镜，洞察着这每一个可能有你身影出现的地方，有时候阳光确实很灼眼，我不得不忍痛摘掉它然后砸的粉碎，再也不愿看到这残酷的世界，闭着眼默默地吞掉苦涩的泪水.... </description>
      <content:encoded><![CDATA[<p>
	<span style="font-family:KaiTi_GB2312;font-size:large;">        一个人的时候你会发现其实你真的只是一个人，永远都在踽踽独行，孑然一身的可怕... 感觉人群都在向这个独来独往的异类投来鄙视的目光！纵然有很多朋友，真正理解你的却屈指都不可数，因为根本就没有数的必要。人总喜欢口是心非，标榜自己有多洒脱，有多怎么样，其实内心深处还不是一缕可怜的晦涩阳光小心翼翼地收起自己本质的光芒，说出一些让人无法接受的言语来刺激别人的灵魂！。》</span>
</p>
<p>
	<span style="font-family:KaiTi_GB2312;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="left">
	<span style="font-family:KaiTi_GB2312;font-size:large;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="left">
	<span style="font-family:KaiTi_GB2312;font-size:large;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;">      车水马龙人间尽繁华</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;">我踌躇</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;">  </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;"> 黯酌今夜何方栖</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;">孑然一身踽踽独行人生路</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;">莫奈何</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;">  独饮自醉草席卧</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-size:large;"><span style="font-family:KaiTi_GB2312;">颠倒神情于青涩的</span><span >一厢情愿</span></span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-size:large;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-size:large;"><span style="font-family:KaiTi_GB2312;">纵使已逾越了</span><span >纯真年代</span>....</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-size:large;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;">奈若何</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;"> 奈若何 </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;"> </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;">醉生梦死</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="center">
	<span style="font-family:KaiTi_GB2312;font-size:large;">....</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="left">
	<span style="font-family:KaiTi_GB2312;font-size:large;">      </span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="left">
	<span style="font-family:KaiTi_GB2312;font-size:large;">          今天花了五分之一厚度鞋底的代价懂得了一些东西，总之很是伤心...     你不能抚平我的伤口，但请不要往上边撒盐就行了...</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;" align="left">
	<span style="font-family:KaiTi_GB2312;font-size:large;">思念你的时候我小心翼翼地戴起眼镜，洞察着这每一个可能有你身影出现的地方，有时候阳光确实很灼眼，我不得不忍痛摘掉它然后砸的粉碎，再也不愿看到这残酷的世界，闭着眼默默地吞掉苦涩的泪水....</span>
</p>
</span>
]]></content:encoded>
    </item>
    
    <item>
      <title>Sunshine、单车</title>
      <link>https://w.toomore.us/posts/youth/sunshine-bike/</link>
      <pubDate>Sat, 27 Mar 2010 00:06:00 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/sunshine-bike/</guid>
      <description> 久违的阳光终于在今天揭开了面纱，结束了宅女生活，吝啬地赏了我们些许温暖。数量虽少的可怜，但狂喜的心情确是压抑不住的。 骑着借来的自行车，踏上了对这片还不熟悉的红土地的近距离解析。已有些许日子没有运动过了，走了一段距离小腿就有点发酸，一丝烦躁的感觉顿然袭来。将就着往前挪动，走一步算一步吧。无意中发现了两头水牛在油菜地里搞破坏，呵呵，这玩意还没见过，比我们那儿的老黄牛壮多了，也水灵不少&amp;hellip; 嗯 毕竟是水牛嘛！ 再往前渐渐闻到了水的气息，一条诺大的河横在面前（注：与我们的汃河相比），流水潺潺，河面相对平静，给人少有的静谧之感。烦躁的情绪早已被这淙淙流水给溶解的一丝不剩，终于有目标了。这个季节雨水还不是很充沛，我选择了河床这条凹凸不平的道路，那样更有节奏感，就像人生一样，平平凡凡不是我们的追求！裸露的河床上时不时有积了水的小坑拦住我的去路，开始有点犹豫过还是不过，思索片刻、大腿一拍、长驱直过，那场面家伙水花四溅的，那叫一个壮观呀！ 颠的久了感觉有点累，直接骑到水边两腿撑地瞭望一下河的对面，比这边漂亮多了，在这里驻足了足足半个小时，神往着对面的风景。 ——“你看那个人是不是想不通要跳河呀？” ——“切！要跳的话早就跳了，难不成还等着咱们美女救英雄呀！” 忽然听到河堤上有人说话，才回过神来，呵呵，真搞笑额，我要是想不开的话，那全世界的人早都跳河里头自我解决了！我还没亲眼去看一下对岸的风景呢，怎么会忍心就此“哦了”我的宝贵生命呀！ 看自己的风景，让别人为咱担心去吧！没有船只可以渡我抵至彼岸，只能自谋出路了！走走走！走啊走，走到河尽头哦喔&amp;hellip;. 只要你一直沿着河走就一定能找到通往彼岸的桥！这不在我的坚持之下，终于有一座迷人将我牵到了对岸。桥的那端有两条路，一条是笔直的柏油马路非常现代化，目标明晰，会让你不费脑筋舒舒服服的享受一路；另一条则曲曲折折，两旁是黑漆漆的树木，阴森森的，如果进去那结果谁也说不来。 不过柏油马路是远离河道的，而那条小道却一直依偎在小河的怀抱。必须坚持，如果有一天在这边呆腻了想回到河那边时，小河是我唯一能找到桥的希望，当然是一座崭新的桥！在走上柏油路的一瞬，我毅然调转了车头——必须坚持！ 结果证明我是对的，小道上的风景异常美丽，超乎我的想象，左边是油菜花的海洋，在金浪的尽头处（说一眼望不到边，那都是骗小孩子的）典型的江南水乡在竹林的掩映下炊烟袅袅，宛若仙境，让人迷醉！右边河水依旧缠绵，绝对看不到小鱼、小虾米在游动，嘿嘿！我近视500度，即使带了眼镜也看不清楚！河的对面是林立的现代化建筑，与这边静谧的小村庄形成了鲜明的对比。但是就在那现代化的对面，好多人却要把衣服拿到河边来洗，或许她们更喜欢这恬淡的情趣吧！那样的意境似乎更高一筹，又有点怀念对岸了！这就是人吧！ 吃着碗里的，还看着锅里的，咋这等不知满足呢？还是先静静享受这边的怡人美景吧！再往前我就不敢走了，一个七旬老翁、一个不惑中年，在前边钓鱼，身后是一块小菜地，尽管可能出于不同的原因，他们都 很投入。唯独我是一个入侵者，生怕自己的不期而至惊吓到就要上钩的鱼儿！没办法只能轻手轻脚地将车子停下来，看着他们的痴醉神情！ 大概有二十来分钟吧，两人的钩都没有动静。这时候中年人站了起来，鼓捣了一下鱼竿，开始站着钓了，不知道他能坚持多久。而老翁依旧纹丝不动，又过了一段时间，我都坚持不住了，那个中年人还是站着，老翁姿势也没变。算了走吧，我可没那境界！就在我跨上车要走的时候，老翁奇迹般的动了，他没有掉到鱼，却急急忙忙的收竿了，也不四周望一下有没有人就酣畅淋漓的解手了！ 嘿嘿！我当时差点忍不住笑出来，原来再有耐心的人也敌不过三急呀！看来什么时候都是紧急的事夺走了人的时间！ 为了不被人发现这个偷窥者，赶紧跨上车逃之夭夭了！ 今天过的很快乐，可惜没有人跟我分享，就剩我、自行车、懒懒的阳光&amp;hellip;&amp;hellip;&amp;hellip;. </description>
      <content:encoded><![CDATA[<p><span style="widows:2;text-transform:none;text-indent:0px;letter-spacing:normal;border-collapse:separate;font:medium Simsun;white-space:normal;orphans:2;color:#000000;word-spacing:0px;-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:0px;"
class="Apple-style-span">
<p>
<span>
<br type="_moz" />
</span>
</p>
<p>
<span>
     久违的阳光终于在今天揭开了面纱，结束了宅女生活，吝啬地赏了我们些许温暖。数量虽少的可怜，但狂喜的心情确是压抑不住的。
</span>
</p>
<p>
 
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
       骑着借来的自行车，踏上了对这片还不熟悉的红土地的近距离解析。已有些许日子没有运动过了，走了一段距离小腿就有点发酸，一丝烦躁的感觉顿然袭来。将就着往前挪动，走一步算一步吧。无意中发现了两头水牛在油菜地里搞破坏，呵呵，这玩意还没见过，比我们那儿的老黄牛壮多了，也水灵不少&hellip;    
嗯  毕竟是水牛嘛！
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
 
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
       再往前渐渐闻到了水的气息，一条诺大的河横在面前（注：与我们的汃河相比），流水潺潺，河面相对平静，给人少有的静谧之感。烦躁的情绪早已被这淙淙流水给溶解的一丝不剩，终于有目标了。这个季节雨水还不是很充沛，我选择了河床这条凹凸不平的道路，那样更有节奏感，就像人生一样，平平凡凡不是我们的追求！裸露的河床上时不时有积了水的小坑拦住我的去路，开始有点犹豫过还是不过，思索片刻、大腿一拍、长驱直过，那场面家伙水花四溅的，那叫一个壮观呀！
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
       颠的久了感觉有点累，直接骑到水边两腿撑地瞭望一下河的对面，比这边漂亮多了，在这里驻足了足足半个小时，神往着对面的风景。
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
——“你看那个人是不是想不通要跳河呀？”
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
——“切！要跳的话早就跳了，难不成还等着咱们美女救英雄呀！”
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
         忽然听到河堤上有人说话，才回过神来，呵呵，真搞笑额，我要是想不开的话，那全世界的人早都跳河里头自我解决了！我还没亲眼去看一下对岸的风景呢，怎么会忍心就此“哦了”我的宝贵生命呀！
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
       看自己的风景，让别人为咱担心去吧！没有船只可以渡我抵至彼岸，只能自谋出路了！走走走！走啊走，走到河尽头哦喔&hellip;.   
只要你一直沿着河走就一定能找到通往彼岸的桥！这不在我的坚持之下，终于有一座迷人将我牵到了对岸。桥的那端有两条路，一条是笔直的柏油马路非常现代化，目标明晰，会让你不费脑筋舒舒服服的享受一路；另一条则曲曲折折，两旁是黑漆漆的树木，阴森森的，如果进去那结果谁也说不来。
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
       不过柏油马路是远离河道的，而那条小道却一直依偎在小河的怀抱。必须坚持，如果有一天在这边呆腻了想回到河那边时，小河是我唯一能找到桥的希望，当然是一座崭新的桥！在走上柏油路的一瞬，我毅然调转了车头——必须坚持！
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
       结果证明我是对的，小道上的风景异常美丽，超乎我的想象，左边是油菜花的海洋，在金浪的尽头处（说一眼望不到边，那都是骗小孩子的）典型的江南水乡在竹林的掩映下炊烟袅袅，宛若仙境，让人迷醉！右边河水依旧缠绵，绝对看不到小鱼、小虾米在游动，嘿嘿！我近视500度，即使带了眼镜也看不清楚！河的对面是林立的现代化建筑，与这边静谧的小村庄形成了鲜明的对比。但是就在那现代化的对面，好多人却要把衣服拿到河边来洗，或许她们更喜欢这恬淡的情趣吧！那样的意境似乎更高一筹，又有点怀念对岸了！这就是人吧！
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
       吃着碗里的，还看着锅里的，咋这等不知满足呢？还是先静静享受这边的怡人美景吧！再往前我就不敢走了，一个七旬老翁、一个不惑中年，在前边钓鱼，身后是一块小菜地，尽管可能出于不同的原因，他们都
很投入。唯独我是一个入侵者，生怕自己的不期而至惊吓到就要上钩的鱼儿！没办法只能轻手轻脚地将车子停下来，看着他们的痴醉神情！
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
        大概有二十来分钟吧，两人的钩都没有动静。这时候中年人站了起来，鼓捣了一下鱼竿，开始站着钓了，不知道他能坚持多久。而老翁依旧纹丝不动，又过了一段时间，我都坚持不住了，那个中年人还是站着，老翁姿势也没变。算了走吧，我可没那境界！就在我跨上车要走的时候，老翁奇迹般的动了，他没有掉到鱼，却急急忙忙的收竿了，也不四周望一下有没有人就酣畅淋漓的解手了！ 
嘿嘿！我当时差点忍不住笑出来，原来再有耐心的人也敌不过三急呀！看来什么时候都是紧急的事夺走了人的时间！
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
        为了不被人发现这个偷窥者，赶紧跨上车逃之夭夭了！
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;">
<span>
        今天过的很快乐，可惜没有人跟我分享，就剩我、自行车、懒懒的阳光&hellip;&hellip;&hellip;.
</span>
</p>
</span></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>读不懂</title>
      <link>https://w.toomore.us/posts/youth/%E8%AF%BB%E4%B8%8D%E6%87%82/</link>
      <pubDate>Fri, 19 Feb 2010 14:24:05 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/%E8%AF%BB%E4%B8%8D%E6%87%82/</guid>
      <description>二倍距离 林亨泰
你的诞生已经
诞生的你的死
已经不死的你
的诞生已经诞
生的你的死已
经不死的你
一棵树与一棵
树间的一个早
晨与一个早晨
间的一棵树与
一棵树间的一
个早晨与一个
早晨间
那距离必有二倍距离
然而必有二倍距离的</description>
      <content:encoded><![CDATA[<h2 id="二倍距离">二倍距离</h2>
<blockquote>
<p>林亨泰</p>
</blockquote>
<p>你的诞生已经</p>
<p>诞生的你的死</p>
<p>已经不死的你</p>
<p>的诞生已经诞</p>
<p>生的你的死已</p>
<p>经不死的你</p>
<p>一棵树与一棵</p>
<p>树间的一个早</p>
<p>晨与一个早晨</p>
<p>间的一棵树与</p>
<p>一棵树间的一</p>
<p>个早晨与一个</p>
<p>早晨间</p>
<p>那距离必有二倍距离</p>
<p>然而必有二倍距离的</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>呵呵，纠结的心窝窝</title>
      <link>https://w.toomore.us/posts/youth/he-he-tangled-heart/</link>
      <pubDate>Wed, 10 Feb 2010 13:20:33 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/he-he-tangled-heart/</guid>
      <description> 天 阴霾 雾 洗劫了每个能呼吸到你的角落 你的身影 朦胧 却挣破了这浑沌 无处不在 捧一滴雾端详 是你的微笑 剔透无瑕 我不解 为何缔造这浑沌的是你无邪的面庞 只扔给我不可即的朦胧 …… </description>
      <content:encoded><![CDATA[<p><span style="widows:2;text-transform:none;text-indent:0px;letter-spacing:normal;border-collapse:separate;font:medium Simsun;white-space:normal;orphans:2;color:#000000;word-spacing:0px;-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:0px;"
class="Apple-style-span">
<p style="text-align:center;">
<span >
<span style="line-height:25px;border-collapse:collapse;font-family:Arial;font-size:16px;"
class="Apple-style-span">
天
</span>
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
阴霾
</p>
<span style="line-height:25px;border-collapse:collapse;font-family:Arial;font-size:16px;"
class="Apple-style-span">
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
 
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
雾
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
洗劫了每个能呼吸到你的角落
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
你的身影
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
朦胧
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
却挣破了这浑沌
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
无处不在
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
 捧一滴雾端详
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
是你的微笑
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
剔透无瑕
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
我不解
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
 为何缔造这浑沌的是你无邪的面庞
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
只扔给我不可即的朦胧
</span>
</p>
<p style="padding-bottom:0px;line-height:1.6;margin:0px 0px 0.7em;padding-left:0px;padding-right:0px;padding-top:0px;"
align="center">
<span >
……
</span>
</p>
</span>
</span></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>星空</title>
      <link>https://w.toomore.us/posts/youth/%E6%98%9F%E7%A9%BA/</link>
      <pubDate>Wed, 04 Nov 2009 21:22:00 +0800</pubDate>
      
      <guid>https://w.toomore.us/posts/youth/%E6%98%9F%E7%A9%BA/</guid>
      <description>渐渐有了一个人仰望星空的习惯，
不知道是不是好兆头，
或者有了在心中默默思念的人，
或者是一些谁也 说不清的原因。。
南昌的天气真鬼！！
昨天还穿短袖蹦跶，
今天你就恨不得钻回娘胎里去！！
初中时一个老师说过“怕冷就滚回娘胎里去”。
吹着可以称得上凛冽的风独自找一个角落
尽情地思念那个让你魂牵梦绕的
&amp;hellip;.！！
虽然有点悲哉 ！ 悲哉 ！
但谁让咱命苦呢&amp;hellip;
来到这个所谓的“大学”都两个多月了，日子过的还是没什么起色，
对一切的一切照旧是一头雾水&amp;hellip;
袭来的总是没有尽头的迷茫与恐慌，
骂狠一点就是连北都找不到了！！
夜深人静的时候，会静静地回想那些美好的事，难忘的人！！
不知道什么时候才能见到有些人&amp;hellip;</description>
      <content:encoded><![CDATA[<p>渐渐有了一个人仰望星空的习惯，</p>
<p>不知道是不是好兆头，</p>
<p>或者有了在心中默默思念的人，</p>
<p>或者是一些谁也 说不清的原因。。</p>
<p>南昌的天气真鬼！！</p>
<p>昨天还穿短袖蹦跶，</p>
<p>今天你就恨不得钻回娘胎里去！！</p>
<p>初中时一个老师说过“怕冷就滚回娘胎里去”。</p>
<p>吹着可以称得上凛冽的风独自找一个角落</p>
<p>尽情地思念那个让你魂牵梦绕的</p>
<p>&hellip;.！！</p>
<p>虽然有点悲哉 ！ 悲哉 ！</p>
<p>但谁让咱命苦呢&hellip;</p>
<p>来到这个所谓的“大学”都两个多月了，日子过的还是没什么起色，</p>
<p>对一切的一切照旧是一头雾水&hellip;</p>
<p>袭来的总是没有尽头的迷茫与恐慌，</p>
<p>骂狠一点就是连北都找不到了！！</p>
<p>夜深人静的时候，会静静地回想那些美好的事，难忘的人！！</p>
<p>不知道什么时候才能见到有些人&hellip;</p>
]]></content:encoded>
    </item>
    
    
    
  </channel>
</rss>
