<?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>Posts on DoDoRo的梦想空间-码农,数学,算法,哲学,园艺</title>
    <link>https://dodoro.chouxiangpai.com/posts/</link>
    <description>Recent content in Posts on DoDoRo的梦想空间-码农,数学,算法,哲学,园艺</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Wed, 08 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://dodoro.chouxiangpai.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>最近一些感悟和体会：移民的融入讨论</title>
      <link>https://dodoro.chouxiangpai.com/archives/2103/</link>
      <pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2103/</guid>
      <description>&lt;p&gt;我们来澳洲之前看到很多人讨论的一个问题：移民之后“如何融入”，总会担心“孩子能不能融入”、“自己能不能融入”。我先说自己的结论：这其实是个伪命题——至少在澳洲，根本不存在融入问题。&lt;/p&gt;
&lt;p&gt;澳洲是一个真正的移民国家，最大的优势就在于不同国家、不同文化背景的人能够和谐共处。你可以跟邻里热情互动，也可以独来独往，而且大家依然会互相帮助。只要遵守法律，你完全可以按照自己的方式生活，保持自己的语言和文化，没人会干涉你。澳洲政府甚至有意识地保护和鼓励这种文化多样性：比如一些原产国的传统在澳洲比在原地还能得到更好的保存和传承；很多移民餐馆不仅正宗，还充满创新，甚至比原产国更吸引人；广东话、普通话和各国语言一样都受到同等尊重，甚至学界已经发现，粤语在海外保留了更传统的形态。&lt;/p&gt;
&lt;p&gt;孩子们在这样的环境中成长，更是天然地融入了社会，我们完全不担心他们的英语能力或社交能力。姐弟俩几乎是用“吸收式学习”掌握英语，相较于担心孩子融入，我们更关注下一代能保留多少自己的文化和语言。我们在家里都是讲汉语，偶尔会教他们壮话和客家话；出门在外，家人内部也用汉语交流。我们并不奢望能完全改变他们的语言选择，只是希望这种文化根脉至少能有一些延续，我能预见后代们肯定会越来越澳洲，这是一个自然的趋势，也没必要强行改变。说句实话，长久的文化和语言传承，最终依赖庞大的社区，幸运的是：这里的华人文化因自由而蓬勃发展。&lt;/p&gt;
&lt;p&gt;当然了，移民就像一棵大树被移栽，而且澳洲一直就有强势的英语文化和习惯，个人难免会经历不适、焦虑与彷徨，甚至产生内在的冲突。关键在于保持包容与开放的心态，彼此尊重，愿意进行坦诚而开放的对话，愿意与这里产生真实的连接(任何形式都可以)，只要如此，问题终究是可以慢慢化解。&lt;/p&gt;
&lt;p&gt;总的来说，澳洲给移民提供了一个极其自由且包容的环境：你可以全身心地保留自己的文化，同时孩子们也可以顺利融入本地社会。这种自由和多样性，正是澳洲作为移民国家最令人欣赏的地方。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/WhatsApp-Image-2026-04-08-at-13.09.12.jpeg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/2103/images/WhatsApp-Image-2026-04-08-at-13.09.12.jpeg&#34;&gt;&lt;/a&gt; 图片拍摄于首都堪培拉：澳大利亚国家美术馆的镇馆雕塑《Ouroboros》，由著名澳大利亚华裔艺术家李琳迪(Lindy Lee)创作，用13吨青铜纯手工铸造，以“衔尾蛇”意象呼应佛学中的轮回观与哲学中的自我更新，它象征多元文化的循环与共生，提醒人在差异中保持包容，在变化中寻找统一。&lt;/p&gt;</description>
    </item>
    <item>
      <title>横跨大半个地球，从北京海运搬家到墨尔本</title>
      <link>https://dodoro.chouxiangpai.com/archives/2091/</link>
      <pubDate>Sun, 04 May 2025 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2091/</guid>
      <description>&lt;p&gt;长登墨尔本有一段时间，前阵子顺利收到了海运搬家的物品，所有的行李和钢琴都整整齐齐完好地送达，包括日常使用的瓷器，看到曾经的家具物品呈现在异国他乡，倍感亲切。我们是租到房子后才让海运公司发货，不过他们的速度也非常快，海上时间25天，抵达墨尔本一周内就送货上门了。&lt;/p&gt;
&lt;p&gt;这次横跨大半个地球的搬家，我们非常忐忑，也非常谨慎，搬家前做了很多调查，最终选择熙浦搬家，他们的售前服务非常好，每一个问题有问必答，耐心负责地解答。上门取货的师傅打包非常专业，特别是那位包装钢琴和家具的师傅，动作干脆麻利，包装细心。&lt;/p&gt;
&lt;p&gt;物品从国内发出之后可以线上追踪船舶的实时位置和路线，墨尔本这边的对接很很顺利，每个阶段都有邮件通知，清关也是邮件沟通，非常顺畅。送货前提示有必要的话要通知邻居会有货物达到，送货的本地师傅很友好，大件的包装协助拆除后清运垃圾。看得出来，他们在墨尔本这边合作的公司非常专业靠谱。&lt;/p&gt;
&lt;p&gt;可能对比别家费用略贵一点，但是我们觉得跟他们的服务匹配得上，而且取货算出立方数之后就定下价格，后面就不再有其他额外收费。本来以为墨尔本这边会抽查检疫费用和其他安检费用，可能是我们比较幸运，没有抽查到，所以没有新增费用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>回顾我和编程之缘</title>
      <link>https://dodoro.chouxiangpai.com/archives/2089/</link>
      <pubDate>Tue, 25 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2089/</guid>
      <description>&lt;p&gt;回顾自己十六年来的编程经历，我很乐意分享我和计算机编程结缘的过程。&lt;/p&gt;
&lt;p&gt;高中毕业的时候，我从邻居家借到一本Basic语言的书籍，我被它迷住了，那时候我没有计算机，只是在草稿纸上模仿书本上的例子进行四则运算和解方程运算。事实上我从小梦想是做一名数学家，所以我大学专业是数学与应用数学。那时候计算机在中国是热门专业，所以数学系也开了很多计算机的课程，我认真学了一个学期的C语言程序设计，我一直被计算机编程的能力震撼，那时候我知道Matlab和Mathematica可以调用C语言的类库进行非常复杂的数值运行，我在大学参加数学建模比赛就是用计算机算法去验证数学模型。&lt;/p&gt;
&lt;p&gt;大二的时候我第一次接触Delphi，第一次接触Pascal语言，被它的简洁语法吸引，不过Delphi那时候已经走下坡路，微软的MFC已经蚕食它的市场份额，而Delphi的创始人安德斯海尔斯伯格也被比尔盖茨挖到微软。大二结束的时候我参加学校编程社团，第一次学习C#并且使用ASP.NET WebForm开发网站，从同学那里，我也了解C#的创始人海尔斯伯格的传奇经历，我被两者深刻吸引。&lt;/p&gt;
&lt;p&gt;大学毕业的时候我很幸运加入一家有名的软件公司方正集团，我继续使用C#和.NET开发网站，那时候我独立开发了一个CMS系统，虽然很简单但是非常实用，后来我深入参与电子报纸和电子图书的算法设计和软件开发。移动互联网刚刚诞生的时候，我和另外一位工程师基于Mac版本的FBReader开发了ios版本的图书阅读器，那时候我第一次接触object-c。&lt;/p&gt;
&lt;p&gt;我也喜欢linux，自己会安装linux操作系统来学习，所以我在工作之余自学了php语言，但是我更喜欢C#这门语言，所以我一直没有转移到其他开发语言。微软和我Windows的闭源一直是我心疼之痛，后来我接触开源Mono，这是.NET在linux的一个实现，但是Mono的重点在桌面和游戏开发。&lt;/p&gt;
&lt;p&gt;我加入百度公司之后有机会在linux生态系统下进行软件开发，我们使用php语言和mysql，这段经历扩宽了我的技术视野，让我对编程语言有了更深刻的理解：语言大同小异，最核心的还是算法和数据结构，以为优秀的开发人员应该能同时使用多种编程语言。&lt;/p&gt;
&lt;p&gt;离开百度之后，我加入一家初创企业，我负责组建团队并开发互联网产品和软件，选择公司技术栈的时候我面临在php和c#之间二选一。那时候.NET已经开源，Mono的作者也创立了新公司Xamarin，专注于使用C#开发跨平台的移动应用。加上结合公司的情况，我继续选择使用C#作为主开发语言，但是我们也使用mysql、memcached和Redis等技术。我们的第一个移动应用也用C#来开发，那时候是属于很前卫的选择，还好我们坚持了下来，因为到了2016年微软换CTO了，开始拥抱开源，紧接着是收购Xamarin，还有筹划.NET Core的开发。我一直关注.NET Core的进展，后来看到StackOverflow使用.NET Core2.1，他们极大提升了性能，于是我开始在我们的新开发产品中使用.NET Core，到了.NET Core3.1的时候开始将legacy code迁移到.NET Core。&lt;/p&gt;
&lt;p&gt;这里不得不提一段我学习深度学习的插曲，2018年左右我认真学习了Michael A. Nielsen的《神经网络与深度学习》，并熟读第二章的多元微积分公式和证明，我甚至在纸上推导了全过程，这是我再次接触神经网络算法（大学数学建模的时候我学习过）。我似乎又回到了大学学习数学分析的时候，这本书写得非常好，作者从最根本最朴素的思想开始，结合实践进入深度神经网络，我认为这本书堪称神经网络的几何原本。我没有继续深入到深度学习中去，但是我认为它最根本的核心还在这本书里。也许哪一天，我还会重新捡回这段技术经历。&lt;/p&gt;</description>
    </item>
    <item>
      <title>委托和接口的选择</title>
      <link>https://dodoro.chouxiangpai.com/archives/2087/</link>
      <pubDate>Wed, 05 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2087/</guid>
      <description>&lt;p&gt;A delegate design might be a better choice than an interface design if one or more of these conditions are true: • The interface defines only a single method. • Multicast capability is needed. • The subscriber needs to implement the interface multiple times.&lt;/p&gt;
&lt;p&gt;如果满足以下一个或多个条件，委托设计可能比接口设计更好： • 接口仅定义一个方法。 • 需要多播功能。 • 订阅者需要多次实现该接口。&lt;/p&gt;</description>
    </item>
    <item>
      <title>部署NextJS到Azure WebApp Deployment Error报错: cannot find module ../server/require-hook</title>
      <link>https://dodoro.chouxiangpai.com/archives/2079/</link>
      <pubDate>Thu, 27 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2079/</guid>
      <description>&lt;p&gt;当我将nextjs应用程序部署到azure web应用程序的时候报错：cannot find module ../server/require-hook。&lt;/p&gt;
&lt;p&gt;我通过github-actions构建和部署成功完成，但是部署后，我在url 中收到错误，并且在azure日志流利发现这个错误。刚刚开始我不明白是什么原因造成的，因为“npm start”在我的本地机器上使用相同的 npm 版本构建和运行。&lt;/p&gt;
&lt;p&gt;通过网上查找，发现是因为githhb的action默认不会把.next文件夹打包加入zip并且发布到azure。所以需要在默认的工作流基础上修改：&lt;/p&gt;
&lt;p&gt;1、adding &amp;ldquo;startAzure&amp;rdquo;: &amp;ldquo;./node_modules/next/dist/bin/next start&amp;rdquo; in package.json; 还需要在azure应用程序网站的配置立加上 the startup command of the azure web app like &amp;ldquo;npm run startAzure&amp;rdquo;&lt;/p&gt;
&lt;p&gt;2、添加这个到azure的 pipeline (在创建 zip了之后)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- name: Zip artifact &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; deployment run: zip release.zip ./* -r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- name: Add .next folder to zip artifact &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; deployment run: zip -r release.zip &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.next&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>小提琴演奏主要基本功</title>
      <link>https://dodoro.chouxiangpai.com/archives/2075/</link>
      <pubDate>Sat, 28 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2075/</guid>
      <description>&lt;p&gt;小提琴的演奏技术来说，要练好以下几个主要基本功：&lt;/p&gt;
&lt;h2 id=&#34;一运弓&#34;&gt;一、运弓&lt;/h2&gt;
&lt;p&gt;优秀的演奏家能在小提琴上发出千变万化的声音，就运弓而言，取决于运弓的速度、弓在弦上的压力以及弓和弦的接触点这3种因素的不同结合。小提琴的弓法繁多，就其主要的有以下几种： ①分弓：一弓演奏一个音； ②连弓：一弓演奏许多音； ③顿弓：音与音之间断开； ④跳弓:弓毛离开琴弦。&lt;/p&gt;
&lt;p&gt;这4类弓法是最基本的，在20世纪中期，连顿弓，即在一弓中连续快速演奏许多音与音之间是断开的音，被人视为绝技，所以人们把小提琴演奏艺术称之为“运弓的艺术”。&lt;/p&gt;
&lt;h2 id=&#34;二揉弦&#34;&gt;二、揉弦&lt;/h2&gt;
&lt;p&gt;通过左手手指在弦上的颤动，使声音的音高产生有规律的波动，称之为揉弦。&lt;/p&gt;
&lt;p&gt;揉弦是小提琴演奏中极为重要的表现手段。揉弦分为手指的、手腕的和手臂的。优秀的演奏者不仅要掌握这3种揉弦方法,而且要学会使用不同速度和不同幅度的揉弦,在演奏不同作家,不同作品，不同乐句时，富于变化地运用揉弦。从揉弦的运用，可以使听众明显地辨认出不同演奏家的音乐个性。&lt;/p&gt;
&lt;h2 id=&#34;三把位&#34;&gt;三、把位&lt;/h2&gt;
&lt;p&gt;左手手指在指板上的位置，称之为把位。靠近琴头的把位为低把，靠近琴马的为高把。从一个把位换到另一个把位，称为换把。&lt;/p&gt;
&lt;p&gt;换把位的方法有多种，例如空弦换把，同指换把，不同指以及泛音换把等。换把时产生非音乐需要的滑音，是技巧训练不足的标志。滑音可以使音与音之间的连接富于变化，特别是结合换把使用滑音，是一种富于表现力的演奏手段。&lt;/p&gt;
&lt;h2 id=&#34;四双音与和弦&#34;&gt;四、双音与和弦&lt;/h2&gt;
&lt;p&gt;小提琴可以同时演奏两个音甚至是3个音，也可以分奏4个音的和弦,这不仅丰富了它的表现力，并可不依赖其他乐器的伴奏进行单独演奏。小提琴的三度、六度、八度以及十度双音音阶，是演奏双音的基础，也是小提琴家必须终身练习的一项基本功。小提琴演奏中的左手颤音、泛音、拨弦等，都是一些高深的技巧。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]React官网力荐Next.js：为何它取代了Create-React-App？</title>
      <link>https://dodoro.chouxiangpai.com/archives/2072/</link>
      <pubDate>Mon, 09 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2072/</guid>
      <description>&lt;p&gt;随着前端技术的快速发展，React作为一款领先的JavaScript库，不断推动着前端开发的变革。近期，React官网的一个显著变化引起了广大开发者的关注：它不再推荐使用Create-React-App作为构建React应用的默认工具，而是转向了Next.js。&lt;/p&gt;
&lt;p&gt;那么，Next.js究竟有何魔力，让React官网做出如此决策？本文将为你详细解析。&lt;/p&gt;
&lt;h2 id=&#34;一nextjsreact应用的升级版&#34;&gt;一、Next.js：React应用的“升级版”&lt;/h2&gt;
&lt;p&gt;Next.js并不是一个全新的框架，而是基于React的服务器端渲染框架。它提供了许多开箱即用的功能，使得开发者能够更高效地构建复杂、高性能的React应用。与Create-React-App相比，Next.js更像是一个“升级版”，它为React应用带来了以下显著的优势：&lt;/p&gt;
&lt;p&gt;性能优化：Next.js支持自动静态优化(Automatic Static Optimization)和服务器端渲染(Server-Side Rendering)，使得页面加载速度更快，用户体验更流畅。此外，Next.js还支持预渲染(Pre-rendering)和动态导入(Dynamic Imports)，进一步提升了应用的性能。 数据获取简化：Next.js内置了数据获取功能，使得开发者能够更方便地从API或其他数据源获取数据，并将其注入到组件中。这种无缝的数据获取流程大大简化了开发过程，提高了开发效率。 强大的路由功能：Next.js提供了基于文件系统的路由功能，使得页面之间的导航变得简单直观。开发者只需创建相应的页面文件，Next.js就能自动为其生成路由。这种方式不仅易于理解，还能减少错误和提高可维护性。 更好的SEO支持：由于Next.js支持服务器端渲染和预渲染，因此它能够更好地处理页面渲染和加载问题，从而提高网站的搜索引擎优化(SEO)效果。&lt;/p&gt;
&lt;h2 id=&#34;二create-react-app的局限性&#34;&gt;二、Create-React-App的局限性&lt;/h2&gt;
&lt;p&gt;虽然Create-React-App为React开发者提供了一个快速搭建项目的脚手架，但随着项目规模的扩大和复杂度的增加，其局限性也逐渐显现：&lt;/p&gt;
&lt;p&gt;配置不灵活：Create-React-App为开发者提供了一套固定的配置，虽然这降低了入门门槛，但对于有特定需求的开发者来说，这种固定配置可能会成为束缚。 性能优化有限：Create-React-App主要关注于项目的快速搭建和开发体验，对于性能优化方面的支持相对有限。对于需要高性能的应用来说，开发者可能需要花费更多的时间和精力进行手动优化。 扩展性不足：随着项目的发展，开发者可能需要集成更多的功能和工具。然而，Create-React-App的扩展性相对有限，可能无法满足一些高级需求。&lt;/p&gt;
&lt;h2 id=&#34;三react官网推荐的背后&#34;&gt;三、React官网推荐的背后&lt;/h2&gt;
&lt;p&gt;React官网之所以推荐Next.js而非Create-React-App，背后有多重原因。&lt;/p&gt;
&lt;p&gt;首先，Next.js作为React的“升级版”，在性能、数据获取、路由等方面提供了更强大的支持，能够更好地满足现代Web应用的需求。 其次，随着前端技术的不断发展，开发者对于高性能、易扩展的应用框架的需求也在不断增加。Next.js正好符合这一趋势，能够为开发者提供更高效、更灵活的开发体验。 最后，React官网的推荐也反映了社区对于Next.js的广泛认可和支持。越来越多的企业和项目采用Next.js构建应用，证明了其在实际应用中的价值和优势。&lt;/p&gt;
&lt;h2 id=&#34;四结语&#34;&gt;四、结语&lt;/h2&gt;
&lt;p&gt;React官网推荐使用Next.js而非Create-React-App，是基于对现代Web应用需求的深入理解和对前端技术发展趋势的敏锐洞察。对于广大React开发者来说，了解和掌握Next.js将是一个值得投入时间和精力的选择。它将帮助你更高效地构建高性能、易扩展的React应用，提升你的开发能力和竞争力。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://segmentfault.com/a/1190000044806695&#34;&gt;https://segmentfault.com/a/1190000044806695&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]React团队回应用Vite替换Create React App的建议</title>
      <link>https://dodoro.chouxiangpai.com/archives/2070/</link>
      <pubDate>Thu, 25 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2070/</guid>
      <description>&lt;h2 id=&#34;create-react-app-的演变&#34;&gt;Create React App 的演变&lt;/h2&gt;
&lt;p&gt;在 2016 年发布 Create React App 时，工具的环境是分散的。如果想要将 React 添加到现有应用，需要添加一个 script 标签或从 npm 中导入，然后调整现有的构建工具配置。但是，如果要从头开始创建一个仅使用 React 构建的新应用，则没有明确的方法可以做到这一点。 在 Create React App 之前，必须安装一堆工具并将它们连接在一起，提供正确的预设以使用 JSX，为开发和生产环境进行不同的配置，为资源缓存提供正确的设置，配置 linter 等，想要正确完成这一系列工作非常困难。人们通过创建和共享可以克隆的“样板”存储库来解决了这个问题。然而，这产生了另外一个问题：一旦在项目中调整了克隆的样板文件，就很难再拉取样板的更新。这样，项目的设置会变得旧，要么放弃更新，要么花费大量精力让所有工具再次协同工作。在快速发展的生态系统中，这非常困难。 Create React App 通过将多个工具组合在一个包中解决了这个问题。现在，如果想用 React 开始一个新项目，有一个明确的推荐方法（Create React App）可以做到这一点！ 然后，每隔一段时间，可以更新这个包，以获得所有底层工具的更新。这种模型变得很流行，以至于今天有很多工具都以这种方式工作。Vite 确实是拥有相似愿景的最佳工具之一，并且在在某些方面更进一步。 Create React App 的目标是为大多数 React 用户提供启动新 React Web 应用的最佳方式，它支持一组协同工作的精选功能。随着时间的推移，它提供的开箱即用的“baseline”会随着我们找到正确的权衡而扩大。 例如，为运行时错误添加了一个遮罩层，添加了对不同样式选项的支持，默认添加了快速刷新，它允许保存组件的代码并查看更改而不会丢失状态。对于默认的 React 开发体验来说，这是一个巨大的里程碑。总的来说，由于 Create React App 完全控制了编译管道，因此添加编译相关的功能是很容易的。 有这样一个精心策划的设置对生态系统仍然很有价值。当 React Hooks 出现时，React 团队将 React Hooks lint 规则添加到默认设置中。除此之外，Create React App 还允许 React 团队向尽可能广泛的受众部署重要的工具更改（快速刷新支持、React Hooks lint 规则）。 如果没有 React 团队策划的流行模板，将很难如此广泛地推出这些工具更改。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Create React App 入门及 webpack 配置</title>
      <link>https://dodoro.chouxiangpai.com/archives/2068/</link>
      <pubDate>Tue, 09 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2068/</guid>
      <description>&lt;p&gt;Create React App（以下简称 CRA）是一个官方支持的创建 React 单页应用的脚手架，它提供了一个零配置的现代构建设置，将一些复杂工具（比如 webpack， Babel）的配置封装了起来，让使用者不用关心这些工具的具体配置，从而降低了工具的使用难度。&lt;/p&gt;
&lt;h2 id=&#34;创建方法&#34;&gt;创建方法&lt;/h2&gt;
&lt;p&gt;npx: npx 来自 npm 5.2+ 或更高版本&lt;/p&gt;
&lt;p&gt;npx create-react-app my-app npm: npm init 在 npm 6+ 中可用&lt;/p&gt;
&lt;p&gt;npm init react-app my-app Yarn: yarn create 在 Yarn 0.25+ 中可用&lt;/p&gt;
&lt;p&gt;yarn create react-app my-app Scripts 在新创建的项目中，你可以运行一些内置命令：&lt;/p&gt;
&lt;p&gt;npm start 或 yarn start 在开发模式下运行应用程序, 默认在浏览器打开http://localhost:3000。如果更改代码，页面将自动重新加载。&lt;/p&gt;
&lt;p&gt;npm test 或 yarn test 以交互模式运行测试程序。 默认情况下，运行与上次提交后更改的文件相关的测试。&lt;/p&gt;
&lt;p&gt;npm run build 或 yarn build 将生产环境的应用程序构建到 build 目录。 它能将 React 正确地打包为生产模式中并优化构建以获得最佳性能。构建将被压缩，文件名中将包含哈希。&lt;/p&gt;
&lt;p&gt;npm run eject 注意：这是单向操作。一旦 eject ，就回不去了！ 执行完这个命令后会将封装在 CRA 中的配置全部反编译到当前项目，这样开发者完全取得 webpack 文件的控制权，可以自定义修改webpack打包配置。&lt;/p&gt;</description>
    </item>
    <item>
      <title>MiniProfiler工具介绍</title>
      <link>https://dodoro.chouxiangpai.com/archives/2051/</link>
      <pubDate>Wed, 26 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2051/</guid>
      <description>&lt;p&gt;在日常开发中，应用程序的性能是我们需要关注的一个重点问题。当然我们有很多工具来分析程序性能：如：Zipkin等；但这些过于复杂，需要单独搭建。&lt;/p&gt;
&lt;p&gt;MiniProfiler就是一款简单，但功能强大的应用新能分析工具；可以帮助我们定位：SQL性能问题、响应慢等问题。&lt;/p&gt;
&lt;p&gt;MiniProfiler是一款针对.NET, Ruby, Go and Node.js的性能分析的轻量级程序。可以对一个页面本身，及该页面通过直接引用、Ajax、Iframe形式访问的其它页面进行监控,监控内容包括数据库内容，并可以显示数据库访问的SQL（支持EF、EF CodeFirst等 ）。并且以很友好的方式展现在页面上。&lt;/p&gt;
&lt;p&gt;MiniProfiler官网：&lt;a href=&#34;http://miniprofiler.com/&#34;&gt;http://miniprofiler.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MiniProfiler的一个特别有用的功能是它与数据库框架的集成。除了.NET原生的 DbConnection类，MiniProfiler还内置了对实体框架（Entity Framework）以及LINQ to SQL、RavenDb和MongoDB的支持。任何执行的Step都会包括当时查询的次数和所花费的时间。为了检测常见的错误，如N+1反模式，profiler将检测仅有参数值存在差异的多个查询。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数据访问策略： Dapper和Entity Framework混合应用</title>
      <link>https://dodoro.chouxiangpai.com/archives/2049/</link>
      <pubDate>Tue, 25 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2049/</guid>
      <description>&lt;p&gt;作者 Julie Lerman&lt;/p&gt;
&lt;p&gt;你大概注意到了，自 2008 年以来，我写过许多关于 Entity Framework（即 Microsoft 对象关系映射器 (ORM)）的文章，ORM 一直是主要的 .NET 数据访问 API。市面上还有许多其他 .NET ORM，但是有一个特殊类别因其强大的性能得到的关注最高，那就是微型 ORM。我听人提到最多的微型 ORM 是 Dapper。据不同的开发者说，他们使用 EF 和 Dapper 制定了混合解决方案，让每个 ORM 能够在单个应用程序中做它最擅长的事，这最终激发了我的兴趣，促使我在最近抽出时间来一探究竟。&lt;/p&gt;
&lt;p&gt;在阅读大量文章和博客文章，与开发者聊过天并熟悉过 Dapper 后，我想与大家分享我的一些发现，尤其是和像我这样，可能听说过 Dapper 但并不知道它是什么或者并不知道它的工作原理的人分享，同时说说人们为什么这么喜欢它。需要提醒你的是，我根本不是什么专家。目前我只是为了满足我的好奇心而变得足够了解，并且希望激发你的兴趣，从而进一步探索。&lt;/p&gt;
&lt;p&gt;为什么是 Dapper？ Dapper 的历史十分有趣，它是从你可能再熟悉不过的资源中衍生的： Marc Gravell 和 Sam Saffron 在研究 Stack Overflow，解决此平台的性能问题时构建了 Dapper。考虑到 Stack Overflow 是一个流量极高的站点，那么必然存在性能上的问题。根据 Stack Exchange About 网页，在 2015 年，Stack Overflow 拥有 57 亿的网页浏览量。在 2011 年，Saffron 撰写过一篇关于他和 Gravell 所做的工作的博客文章，名为“我如何学会不再担忧和编写我自己的 ORM”(bit.ly/)，这篇文章介绍了 Stack 当时存在的性能问题，该问题源于 LINQ to SQL 的使用。他在文中详细介绍了为什么编写自定义 ORM，其中 Dapper 就是优化 Stack Overflow 上的数据访问的答案。五年后的今天，Dapper 已被广泛使用并已成为开源软件。Gravell 和 Stack 及团队成员 Nick Craver 继续在 github.com/StackExchange/dapper-dot-net 上积极地管理项目。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Entity Framework Core：一对多关系</title>
      <link>https://dodoro.chouxiangpai.com/archives/2047/</link>
      <pubDate>Sun, 23 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2047/</guid>
      <description>&lt;p&gt;当一个实体类型的任意数量的实体与相同或另一个实体类型的任意数量的实体相关联时，将使用多对多关系。 例如，Post 可以有多个关联的 Tags，并且每个 Tag 可以与任意数量的 Posts 关联。&lt;/p&gt;
&lt;p&gt;了解多对多关系 多对多关系不同于一对多和一对一关系，因为它们不能仅使用外键以简单方式表示。 相反，需要其他实体类型来“联接”关系的两端。 这称为“联接实体类型”，并映射到关系数据库中的“联接表”。 此联接实体类型的实体包含外键值对，其中一对指向关系一端的实体，另一对指向关系另一端的实体。 因此，每个联接实体以及联接表中的每一行都表示关系中实体类型之间的一个关联。&lt;/p&gt;
&lt;p&gt;EF Core 可以隐藏联接实体类型并在后台对其进行管理。 这允许以自然方式使用多对多关系的导航，从而根据需要在每一端添加或删除实体。 但是，了解后台发生的情况非常有用，以便其整体行为（尤其是映射关系数据库）有意义。 让我们从关系数据库架构设置开始，以表示帖子和标记之间的多对多关系：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CREATE TABLE &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Posts&amp;#34;&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Id&amp;#34;&lt;/span&gt; INTEGER NOT NULL CONSTRAINT &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PK_Posts&amp;#34;&lt;/span&gt; PRIMARY KEY AUTOINCREMENT);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CREATE TABLE &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Tags&amp;#34;&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Id&amp;#34;&lt;/span&gt; INTEGER NOT NULL CONSTRAINT &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PK_Tags&amp;#34;&lt;/span&gt; PRIMARY KEY AUTOINCREMENT);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CREATE TABLE &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PostTag&amp;#34;&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PostsId&amp;#34;&lt;/span&gt; INTEGER NOT NULL,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TagsId&amp;#34;&lt;/span&gt; INTEGER NOT NULL,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    CONSTRAINT &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PK_PostTag&amp;#34;&lt;/span&gt; PRIMARY KEY (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PostsId&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TagsId&amp;#34;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    CONSTRAINT &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FK_PostTag_Posts_PostsId&amp;#34;&lt;/span&gt; FOREIGN KEY (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PostsId&amp;#34;&lt;/span&gt;) REFERENCES &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Posts&amp;#34;&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Id&amp;#34;&lt;/span&gt;) ON DELETE CASCADE,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    CONSTRAINT &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FK_PostTag_Tags_TagsId&amp;#34;&lt;/span&gt; FOREIGN KEY (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TagsId&amp;#34;&lt;/span&gt;) REFERENCES &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Tags&amp;#34;&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Id&amp;#34;&lt;/span&gt;) ON DELETE CASCADE);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在此架构中，PostTag 是联接表。 它包含两列：PostsId（指向 Posts 表的主键的外键）和 TagsId（指向 Tags 表的主键的外键）。 因此，此表中的每一行都表示一个 Post 和一个 Tag 之间的关联。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Entity Framework Core：一对多关系</title>
      <link>https://dodoro.chouxiangpai.com/archives/2042/</link>
      <pubDate>Fri, 21 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2042/</guid>
      <description>&lt;p&gt;当单个实体与任意数量的其他实体关联时，将使用一对多关系。 例如，Blog 可以有多个关联的 Posts，但每个 Post 都只与一个 Blog 相关联。&lt;/p&gt;
&lt;p&gt;本文档采用围绕大量示例展开的结构。 这些示例从常见情况着手，还引入了一些概念。 后面的示例介绍了不太常见的配置类型。 此处介绍了一个不错的方法，即了解前几个示例和概念，再根据特定需求转到后面的示例。 基于此方法，我们将从简单的“必需”和“可选”的一对多关系开始。&lt;/p&gt;
&lt;p&gt;提示&lt;/p&gt;
&lt;p&gt;可在 OneToMany.cs 中找到以下所有示例的代码。&lt;/p&gt;
&lt;p&gt;必需的一对多&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Principal (parent)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Blog&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; Id { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; ICollection&amp;lt;Post&amp;gt; Posts { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; } = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; List&amp;lt;Post&amp;gt;(); &lt;span style=&#34;color:#75715e&#34;&gt;// Collection navigation containing dependents&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Dependent (child)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Post&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; Id { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; BlogId { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;; } &lt;span style=&#34;color:#75715e&#34;&gt;// Required foreign key property&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; Blog Blog { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;; } = &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;!; &lt;span style=&#34;color:#75715e&#34;&gt;// Required reference navigation to principal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一对多关系由以下部分组成：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Entity Framework Core：一对一关系</title>
      <link>https://dodoro.chouxiangpai.com/archives/2040/</link>
      <pubDate>Thu, 20 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2040/</guid>
      <description>&lt;p&gt;当一个实体与最多一个其他实体关联时，将使用一对一关系。 例如，Blog 有一个 BlogHeader，并且 BlogHeader 属于单个 Blog。&lt;/p&gt;
&lt;p&gt;本文档采用围绕大量示例展开的结构。 这些示例从常见情况着手，还引入了一些概念。 后面的示例介绍了不太常见的配置类型。 此处介绍了一个不错的方法，即了解前几个示例和概念，再根据特定需求转到后面的示例。 基于此方法，我们将从简单的“必需”和“可选”的一对一关系开始。&lt;/p&gt;
&lt;p&gt;可在 OneToOne.cs 中找到以下所有示例的代码。&lt;/p&gt;
&lt;p&gt;必需的一对一&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Principal (parent)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Blog&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; Id { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; BlogHeader? Header { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;; } &lt;span style=&#34;color:#75715e&#34;&gt;// Reference navigation to dependent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Dependent (child)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BlogHeader&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; Id { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; BlogId { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;; } &lt;span style=&#34;color:#75715e&#34;&gt;// Required foreign key property&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; Blog Blog { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;; } = &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;!; &lt;span style=&#34;color:#75715e&#34;&gt;// Required reference navigation to principal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一对一关系由以下部分组成：&lt;/p&gt;
&lt;p&gt;主体实体上的一个或多个主键或备用键属性。 例如 Blog.Id。 依赖实体上的一个或多个外键属性。 例如 BlogHeader.BlogId。 （可选）引用依赖实体的主体实体上的引用导航。 例如 Blog.Header。 （可选）引用主体实体的依赖实体上的引用导航。 例如，BlogHeader.Blog。 提示&lt;/p&gt;</description>
    </item>
    <item>
      <title>写在第八个父亲节：反思自我少发火</title>
      <link>https://dodoro.chouxiangpai.com/archives/2012/</link>
      <pubDate>Sun, 16 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2012/</guid>
      <description>&lt;p&gt;父亲节，女儿很乖，儿子大闹，我又发了一轮火-_-&lt;/p&gt;
&lt;p&gt;我们不算是鸡娃的家长，但是对子女有最基本的要求，为了引导和教育子女，我这段时间发现自己对小孩们发脾气的次数变多了。每次发完火之后，我知道这很不好，但是总是不能克制住自己，其实对小孩或者家人发火，只是情绪的宣泄，对谁都不好。我总结自己发火的点：&lt;/p&gt;
&lt;p&gt;1、子女们的行为习惯。主要是生活习惯和本来应该养成的好习惯，有时候他们屡教不改，这方面是应该严厉、严格，但是不要动火，否则无济于事。&lt;/p&gt;
&lt;p&gt;2、对于子女们的兴趣培养，比如小提琴，总是会有“恨铁不成刚”的想法。如果静下来想想，他们的水平已经远远在我之上，所以很多时候更多是自己的期望值太高。如果能认识到兴趣要坚持和长期培养，那么我确实应该要更有耐心，毕竟核心是要让他们感兴趣地坚持下去。&lt;/p&gt;
&lt;p&gt;3、辅导子女们的学业过程。其实想想小孩子需要时间去成长，有时候我是以大人的要求去教育小孩，我应该给他们更多的时间来消化及成长。&lt;/p&gt;
&lt;p&gt;我今天反思自己，就是希望自己能控制情绪，作为一个男人，应该能担当、沉住气，这样才能真的起到教育的作用。&lt;/p&gt;
&lt;p&gt;“父母所遭受的文化和心理压力或伤害可能会传递到孩子身上。我绝不是危言耸听，我想提醒父母们，我们赋予孩子的一切中，有一半来自我们自己，因此，我们首先需要让自己变成身心健康的人。”&lt;/p&gt;
&lt;p&gt;立帖为证，做好自己。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blazor server VS Blazor WebAssembly</title>
      <link>https://dodoro.chouxiangpai.com/archives/2029/</link>
      <pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2029/</guid>
      <description>&lt;p&gt;Blazor WebAssembly 主要的 Blazor 托管模型在 WebAssembly 上的浏览器中运行客户端。 将 Blazor 应用、其依赖项以及 .NET 运行时下载到浏览器。 应用将在浏览器线程中直接执行。 UI 更新和事件处理在同一进程中进行。 应用资产作为静态文件部署到可为客户端提供静态内容的 Web 服务器或服务中。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/2029/images/image-1718171979210.png&#34;&gt; Blazor WebAssembly:Blazor 应用在浏览器内部的 UI 线程上运行。&lt;/p&gt;
&lt;p&gt;如果创建了 Blazor WebAssembly 应用进行部署，但没有后端 ASP.NET Core 应用来为其文件提供服务，那么该应用被称为独立 Blazor WebAssembly 应用。 如果创建了应用进行部署，但没有后端应用来为其文件提供服务，那么该应用被称为托管的 Blazor WebAssembly 应用。 托管的 Blazor WebAssembly Client 应用通常使用 Web API 调用或 SignalR（结合使用 ASP.NET Core SignalR 和 Blazor）通过网络与后端 Server 应用交互。&lt;/p&gt;
&lt;p&gt;blazor.webassembly.js 脚本由框架和句柄提供：&lt;/p&gt;
&lt;p&gt;下载 .NET 运行时、应用和应用依赖项。 初始化运行应用的运行时。 Blazor WebAssembly 托管模型具有以下优点：&lt;/p&gt;
&lt;p&gt;没有 .NET 服务器端依赖项。 应用下载到客户端后即可正常运行。 可充分利用客户端资源和功能。 工作可从服务器转移到客户端。 无需 ASP.NET Core Web 服务器即可托管应用。 无服务器部署方案可行，例如通过内容分发网络 (CDN) 为应用提供服务的方案。 Blazor WebAssembly 托管模型具有以下局限性：&lt;/p&gt;</description>
    </item>
    <item>
      <title>结合使用 ASP.NET Core SignalR 和 Blazor</title>
      <link>https://dodoro.chouxiangpai.com/archives/2033/</link>
      <pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2033/</guid>
      <description>&lt;p&gt;本教程提供了使用 SignalR 和 Blazor 生成实时应用的基本工作经验。 本文适用于已经熟悉 SignalR 并正在寻求了解如何在 SignalR 应用中使用 Blazor 的开发人员。 有关 SignalR 和 Blazor 框架的详细指南，请参阅以下参考文档集和 API 文档：&lt;/p&gt;
&lt;p&gt;ASP.NET Core SignalR 概述 ASP.NET Core Blazor .NET API 浏览器 了解如何：&lt;/p&gt;
&lt;p&gt;创建 Blazor 应用 添加 SignalR 客户端库 添加 SignalR 集线器 添加 SignalR 服务和 SignalR 中心的终结点 添加用于聊天的 Razor 组件代码 在本教程结束时，你将拥有一个正常运行的聊天应用。&lt;/p&gt;
&lt;p&gt;先决条件 Visual Studio Visual Studio Code .NET CLI 具有“ASP.NET 和 Web 开发”工作负载的 Visual Studio 2022 或更高版本&lt;/p&gt;
&lt;p&gt;示例应用 本教程不需要下载教程的示例聊天应用。 示例应用是按照本教程的步骤生成的最终工作应用。&lt;/p&gt;
&lt;p&gt;查看或下载示例代码（如何下载）&lt;/p&gt;
&lt;p&gt;创建 Blazor Web 应用 按照所选工具的指南进行操作：&lt;/p&gt;</description>
    </item>
    <item>
      <title>git提交或克隆报错fatal: unable to access ‘https://github.com/tata20191003/autowrite.git/‘: Failed to connec</title>
      <link>https://dodoro.chouxiangpai.com/archives/2022/</link>
      <pubDate>Mon, 10 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2022/</guid>
      <description>&lt;p&gt;1.问题原因 报错信息：&lt;/p&gt;
&lt;p&gt;fatal: unable to access &amp;lsquo;&lt;a href=&#34;https://github.com/xxx/autowrite.git/&#34;&gt;https://github.com/xxx/autowrite.git/&lt;/a&gt;&amp;rsquo;: OpenSSL SSL_read: Connection was reset, errno 10054 1 2 又或者&lt;/p&gt;
&lt;p&gt;fatal: unable to access &amp;lsquo;&lt;a href=&#34;https://github.com/xxx/autowrite.git/&#34;&gt;https://github.com/xxx/autowrite.git/&lt;/a&gt;&amp;rsquo;: Failed to connect to github.com port 443: Timed out 1 2 因为git在拉取或者提交项目时，中间会有git的http和https代理，但是我们本地环境本身就有SSL协议了，所以取消git的https代理即可，不行再取消http的代理。&lt;/p&gt;
&lt;p&gt;后续 原因还有一个，当前代理网速过慢，所以偶尔会成功，偶尔失败。&lt;/p&gt;
&lt;p&gt;2.解决方案 1.在项目文件夹的命令行窗口执行下面代码，然后再git commit 或git clone 取消git本身的https代理，使用自己本机的代理，如果没有的话，其实默认还是用git的&lt;/p&gt;
&lt;p&gt;//取消http代理 git config &amp;ndash;global &amp;ndash;unset http.proxy //取消https代理 git config &amp;ndash;global &amp;ndash;unset https.proxy 1 2 3 4 2.科学上网（vpn） 这样就能提高服务器连接速度，能从根本解决 time out 443问题&lt;/p&gt;
&lt;p&gt;原文链接：&lt;a href=&#34;https://blog.csdn.net/good_good_xiu/article/details/118567249&#34;&gt;https://blog.csdn.net/good_good_xiu/article/details/118567249&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>EF Add-Migration总结</title>
      <link>https://dodoro.chouxiangpai.com/archives/2016/</link>
      <pubDate>Sat, 08 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2016/</guid>
      <description>&lt;p&gt;EF CodeFirst对数据库任何的操作，千万不要手工去修改。&lt;/p&gt;
&lt;p&gt;解释：add-migration命令是code first migration中的关键命令之一。当您对领域域模型进行更改并需要将它们时添加到数据库中，您将创建一个新的迁移。这是通过Add-Migration命令完成的。用最简单的形式，你只需要提供迁移名称&lt;/p&gt;
&lt;p&gt;展现形式：命令将您的更改构建到一个cs文件中。这个cs文件与配置文件放在同一个文件夹中，服务于您要瞄准的DbContext&lt;/p&gt;
&lt;p&gt;1.常用的命令：&lt;/p&gt;
&lt;p&gt;Add-Migration 、 Update-DataBase 、 Script-Migration&lt;/p&gt;
&lt;p&gt;(1)vs的程序包管理控制台输入 get-help Add-Migration -detailed以查看详细信息&lt;/p&gt;
&lt;p&gt;Add-Migration [-Name] ：指定自定义脚本 的名字 [-Force] [-ProjectName ] ：如果要重新构建现有迁移，必须使用-Force参数。然而，只有在迁移尚未应用到数据库时，才能重新构建框架。否则你 需要回复到要重新构建的迁移之前的迁移 [-StartUpProjectName ] ：是从 解决方案资源管理器中选择一个项目 作为启动项目。如果我们忽略的话，就会默认为解决方案资源管理器中的启动项目。 [-ConfigurationTypeName ] ：项目中有多个DbContext，那么您需要指出哪个数据库会更新。这可以用-ConfigurationTypeName做。ConfigurationTypeName方法是迁移文件夹中配置类的名称。 [-ConnectionStringName ] ：从应用程序的配置文件中指定要使用的连接字符串的名字。我们用两个参数-ConnectionString -ConnectionProviderName ，或者用这样一个参数代替 [-IgnoreChanges] ：假设目标数据库模式与当前的模型是一致的。构建一个空迁移和对应的空的迁移文件，忽略在当前模型中检测到的任何挂起的更改。可用于创建初始的空迁移，以支持对现有数据库的迁移。 [-AppDomainBaseDirectory ]：指定用于运行数据迁移代码的app-domain的路径，从而app-domain 可以找到所有需要的程序集。这是一个高级选项，只有当解决方案包含多个项目时才会需要。这样的话，context和configuration所需要的程序集就不仅仅从那些包含context和包含migrations的项目中获取 CommonParameters&lt;/p&gt;
&lt;p&gt;Add-Migration （你的迁移文件名称）&lt;/p&gt;
&lt;p&gt;若在一个项目里，操作多个DbConext的方法则需要指定context名称&lt;/p&gt;
&lt;p&gt;add-migration 迁移名称 -c ConfigurationDbContext&lt;/p&gt;
&lt;p&gt;update-database -c ConfigurationDbContext&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]MediatR知多少</title>
      <link>https://dodoro.chouxiangpai.com/archives/1999/</link>
      <pubDate>Wed, 05 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1999/</guid>
      <description>&lt;p&gt;原文：&lt;a href=&#34;https://www.cnblogs.com/sheng-jie/p/10280336.html&#34;&gt;https://www.cnblogs.com/sheng-jie/p/10280336.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;引言 首先不用查字典了，词典查无此词。猜测是作者笔误将Mediator写成MediatR了。废话少说，转入正题。&lt;/p&gt;
&lt;p&gt;先来简单了解下这个开源项目MediatR（作者Jimmy Bogard，也是开源项目AutoMapper的创建者，在此表示膜拜）：&lt;/p&gt;
&lt;p&gt;Simple mediator implementation in .NET. In-process messaging with no dependencies. Supports request/response, commands, queries, notifications and events, synchronous and async with intelligent dispatching via C# generic variance. .NET中的简单中介者模式实现，一种进程内消息传递机制（无其他外部依赖）。 支持以同步或异步的形式进行请求/响应，命令，查询，通知和事件的消息传递，并通过C#泛型支持消息的智能调度。&lt;/p&gt;
&lt;p&gt;如上所述，其核心是一个中介者模式的.NET实现，其目的是消息发送和消息处理的解耦。它支持以单播和多播形式使用同步或异步的模式来发布消息，创建和侦听事件。&lt;/p&gt;
&lt;p&gt;中介者模式既然是对中介者模式的一种实现，那么我们就有必要简要介绍下中介者这个设计模式，以便后续展开。 &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1999/images/image-1717599447834.png&#34;&gt; 中介者模式类图 中介者模式：用一个中介对象封装一系列的对象交互，中介者使各对象不需要显示地相互作用，从而使耦合松散，而且可以独立地改变它们之间的交互。&lt;/p&gt;
&lt;p&gt;看上面的官方定义可能还是有点绕，那么下面这张图应该能帮助你对中介者模式有个直观了解。 &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1999/images/image-1717599471125.png&#34;&gt; 使用中介模式，对象之间的交互将封装在中介对象中。对象不再直接相互交互（解耦），而是通过中介进行交互。这减少了对象之间的依赖性，从而减少了耦合。&lt;/p&gt;
&lt;p&gt;那其优缺点也在图中很容易看出：&lt;/p&gt;
&lt;p&gt;优点：中介者模式的优点就是减少类间的依赖，把原有的一对多的依赖变成了一对一的依赖，同事类只依赖中介者，减少了依赖，当然同时也降低了类间的耦合 缺点：中介者模式的缺点就是中介者会膨胀得很大，而且逻辑复杂，原本N个对象直接的相互依赖关系转换为中介者和同事类的依赖关系，同事类越多，中介者的逻辑就越复杂。&lt;/p&gt;
&lt;p&gt;Hello MeidatR 在开始之前，我们先来了解下其基本用法。&lt;/p&gt;
&lt;p&gt;单播消息传输 单播消息传输，也就是一对一的消息传递，一个消息对应一个消息处理。其通过IRequest来抽象单播消息，用IRequestHandler进行消息处理。&lt;/p&gt;
&lt;p&gt;//构建 消息请求 public class Ping : IRequest { } //构建 消息处理 public class PingHandler : IRequestHandler&amp;lt;Ping, string&amp;gt; { public Task Handle(Ping request, CancellationToken cancellationToken) { return Task.FromResult(&amp;ldquo;Pong&amp;rdquo;); } } //发送 请求 var response = await mediator.Send(new Ping()); Debug.WriteLine(response); // &amp;ldquo;Pong&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>MediatR Official Document</title>
      <link>https://dodoro.chouxiangpai.com/archives/2010/</link>
      <pubDate>Wed, 05 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2010/</guid>
      <description>&lt;p&gt;&lt;strong&gt;MediatR&lt;/strong&gt; is a low-ambition library trying to solve a simple problem — decoupling the in-process sending of messages from handling messages. Cross-platform, supporting &lt;code&gt;netstandard2.0&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;setup&#34;&gt;Setup&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;#setup&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install the package via NuGet first: &lt;code&gt;Install-Package MediatR&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;MediatR directly references &lt;code&gt;Microsoft.Extensions.DependencyInjection.Abstractions&lt;/code&gt; leveraging &lt;code&gt;IServiceProvider&lt;/code&gt;. Typical usage is to use &lt;code&gt;IServiceCollection&lt;/code&gt; directly:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;services.AddMediatR(cfg =&amp;gt; {
    cfg.RegisterServicesFromAssembly(typeof(Program).Assembly);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This method registers the known MediatR types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;IMediator&lt;/code&gt; as transient&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ISender&lt;/code&gt; as transient&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IPublisher&lt;/code&gt; as transient&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For each assembly registered, the &lt;code&gt;AddMediatR&lt;/code&gt; method will scan those assemblies for MediatR types (excluding behaviors):&lt;/p&gt;</description>
    </item>
    <item>
      <title>MSBuild介绍</title>
      <link>https://dodoro.chouxiangpai.com/archives/1983/</link>
      <pubDate>Tue, 04 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1983/</guid>
      <description>&lt;p&gt;Microsoft 生成引擎是一个用于生成应用程序的平台。 此引擎（也称为 MSBuild）为项目文件提供了一个 XML 架构，用于控制生成平台处理和生成软件的方式。 Visual Studio 会使用 MSBuild，但 MSBuild 不依赖于 Visual Studio。 通过在项目或解决方案文件中调用 msbuild.exe 或 dotnet build，可以在未安装 Visual Studio 的环境中安排和生成产品。&lt;/p&gt;
&lt;p&gt;Visual Studio 使用 MSBuild 来加载和生成托管项目。 Visual Studio 中的项目文件（.csproj、.vbproj、vcxproj 等）包含 MSBuild XML 代码，当你使用 IDE 来生成项目时，此代码就会运行。 Visual Studio 项目会导入所有必要的设置和生成过程来执行典型的开发工作，但你可以从 Visual Studio 内或通过使用 XML 编辑器对其进行扩展或修改。&lt;/p&gt;
&lt;p&gt;若要在没有 Visual Studio 的 Windows 系统上安装 MSBuild，请转到下载页面上的 Visual Studio 生成工具。 通过此方法安装 MSBuild 可获得 MSBuild.exe。&lt;/p&gt;
&lt;p&gt;对于 .NET Core 和 .NET 5 或更高版本，获取 MSBuild 等效项的另一种方法是安装 .NET SDK。 .NET 生成命令 dotnet build 可与 macOS、Windows 或 Linux 上的 .NET SDK 一起使用。 .NET 生成命令 dotnet build 是 .NET Core 版本 MSBuild.exe 的精简包装器。 可以使用 .NET Core 命令行接口 (CLI)（使用 MSBuild）来生成面向 .NET Core 和 .NET 5 及更高版本的项目。&lt;/p&gt;</description>
    </item>
    <item>
      <title>NSwag 和 ASP.NET Core 入门</title>
      <link>https://dodoro.chouxiangpai.com/archives/1981/</link>
      <pubDate>Tue, 04 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1981/</guid>
      <description>&lt;p&gt;NSwag 提供了下列功能：&lt;/p&gt;
&lt;p&gt;能够使用 Swagger UI 和 Swagger 生成器。 灵活的代码生成功能。 借助 NSwag，无需使用现有 API。也就是说，可使用包含 Swagger 的第三方 API，并生成客户端实现。 使用 NSwag，可以加快开发周期，并轻松适应 API 更改。&lt;/p&gt;
&lt;p&gt;包安装 将 NSwag 安装到：&lt;/p&gt;
&lt;p&gt;生成已实现的 Web API 的 Swagger 规范。 为 Swagger UI 提供服务以浏览和测试 Web API。 为 Redoc 提供服务，以为 Web API 添加 API 文档。 若要使用 NSwag ASP.NET Core 中间件，请安装 NSwag.AspNetCore NuGet 包。 此包内的中间件可用于生成并提供Swagger 规范、Swagger UI（v2 和 v3）和 ReDoc UI。 NSwag 14 仅支持 v3 版的 Swagger UI 规范。&lt;/p&gt;
&lt;p&gt;若要安装 NSwag NuGet 包，请使用以下方法之一：&lt;/p&gt;</description>
    </item>
    <item>
      <title>NSwag.MSBuild使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/1985/</link>
      <pubDate>Tue, 04 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1985/</guid>
      <description>&lt;p&gt;Package: NSwag.MSBuild&lt;/p&gt;
&lt;p&gt;Important for .NET Core: Assembly loading#net-core&lt;/p&gt;
&lt;p&gt;After installing the NSwag.MSBuild NuGet package in your project, you can use the variable $(NSwagExe) in your .csproj file to run the NSwag command line tool in an MSBuild target. This way the tools can easily be updated via NuGet. The /controller parameter can be omitted to generate a Swagger specification for all controllers.&lt;/p&gt;
&lt;p&gt;For better testability and stable output (defaults may change), it is recommended to create an NSwag Configuration Document (e.g. with NSwagStudio) and use:&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于MSBuild和NSwag的深入学习</title>
      <link>https://dodoro.chouxiangpai.com/archives/1990/</link>
      <pubDate>Tue, 04 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1990/</guid>
      <description>&lt;p&gt;这段时间学习一个整洁架构的开源项目，这是一名澳大利亚的软件架构师在github上面分享的项目：&lt;a href=&#34;https://github.com/jasontaylordev/CleanArchitecture&#34;&gt;https://github.com/jasontaylordev/CleanArchitecture&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;作者的架构根底扎实，而且能灵活运用各种最新最简洁的技术知识，这个项目就用到非常多，我把代码pull下来之后发现直接编译过程中出了不少错误，花了两天时间都解决了。其中很大一部分是关于前端项目的内容，作者直接使用MSBuild来完成打包和创建，这只是我第一次看到。&lt;/p&gt;
&lt;p&gt;另外还通过NSwag.MSBuild完成Open API代码的生成和typescript代码生成（运用于Angular），其中一个让我很惊讶的是：他居然在项目编译的时候初始化了数据库，弄得我云里雾里。我修改连接字符串，从报错信息才知道是执行这部分脚本的时候，MSWage的内核里初始化了Core的项目，调用到了初始化数据库代码：&lt;/p&gt;
&lt;p&gt;Executing file &amp;lsquo;config.nswag&amp;rsquo; with variables &amp;lsquo;Configuration=Debug&amp;rsquo;&amp;hellip; C:\Users\csuma.nuget\packages\nswag.msbuild\14.0.7\tools\Net80&lt;/p&gt;
&lt;p&gt;下面是报错信息：&lt;/p&gt;
&lt;p&gt;Error NSwag command line tool for .NET Core Net80, toolchain v14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0));Visit &lt;a href=&#34;http://NSwag.org&#34;&gt;http://NSwag.org&lt;/a&gt; for more information.;NSwag bin directory: C:\Users\csuma.nuget\packages\nswag.msbuild\14.0.7\tools\Net80;Executing file &amp;lsquo;config.nswag&amp;rsquo; with variables &amp;lsquo;Configuration=Debug&amp;rsquo;&amp;hellip;;Launcher directory: C:\Users\csuma.nuget\packages\nswag.msbuild\14.0.7\tools\Net80;fail: CleanArchitecture.Infrastructure.Data.ApplicationDbContextInitialiser[0];An error occurred while initialising the database.;Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.&amp;lt;&amp;gt;c&lt;strong&gt;DisplayClass20_0.&amp;lt;b&lt;/strong&gt;0&amp;gt;d.MoveNext();&amp;mdash; End of stack trace from previous location &amp;mdash;;at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.&amp;lt;&amp;gt;c&lt;strong&gt;DisplayClass20_0.&amp;lt;b&lt;/strong&gt;0&amp;gt;d.MoveNext();&amp;mdash; End of stack trace from previous location &amp;mdash;;at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func&lt;code&gt;4 operation, Func&lt;/code&gt;4 verifySucceeded, CancellationToken cancellationToken);at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.ExistsAsync(CancellationToken cancellationToken);at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.MigrateAsync(String targetMigration, CancellationToken cancellationToken);at CleanArchitecture.Infrastructure.Data.ApplicationDbContextInitialiser.InitialiseAsync() in D:\project\CleanArchitecture\CleanArchitecture-main\CleanArchitecture-main\src\Infrastructure\Data\ApplicationDbContextInitialiser.cs:line 46;at CleanArchitecture.Infrastructure.Data.InitialiserExtensions.InitialiseDatabaseAsync(WebApplication app) in D:\project\CleanArchitecture\CleanArchitecture-main\CleanArchitecture-main\src\Infrastructure\Data\ApplicationDbContextInitialiser.cs:line 21;at Program.&lt;/p&gt;</description>
    </item>
    <item>
      <title>命令行执行NSwag</title>
      <link>https://dodoro.chouxiangpai.com/archives/1987/</link>
      <pubDate>Tue, 04 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1987/</guid>
      <description>&lt;p&gt;Important for .NET Core: Assembly loading#net-core&lt;/p&gt;
&lt;p&gt;To use the command line tool nswag.exe (.NET 4.6+) / dotnet-nswag.dll (.NET Core), choose one of the following methods:&lt;/p&gt;
&lt;p&gt;NSwag NPM Module: Bindings for the .NET 4.6+ and .NET Core command line tools (depending on installed framework/OS platform) Download latest NSwagStudio MSI installer or install package NSwagStudio via Chocolatey: After installing the application, the path to the nswag.exe binary is registered in the PATH variable so that the tool can be used in the Windows command line. Download the latest command line tools: Extract the ZIP archive and use the nswag.exe binary in the Windows command line. NSwag.MSBuild NuGet package To see all available commands and parameters, run the command line application &amp;ldquo;nswag.exe&amp;rdquo; without parameters and enter &amp;ldquo;help&amp;rdquo; as command. All &amp;ldquo;input&amp;rdquo; parameters accept file paths, URLs and JSON data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决ng : 无法将“ng”项识别为 cmdlet、函数、脚本文件或可运行程序的名称及ng : 无法加载文件npm
g.ps1问题</title>
      <link>https://dodoro.chouxiangpai.com/archives/1975/</link>
      <pubDate>Mon, 03 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1975/</guid>
      <description>&lt;p&gt;解决ng : 无法将“ng”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 及 ng : 无法加载文件 C:\Users\15762\AppData\Roaming\npm\ng.ps1问题 ng : 无法将“ng”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决 在命令行执行npm install -g @angular/cli ng : 无法加载文件 C:\Users\15762\AppData\Roaming\npm\ng.ps1 解决 以管理员身份运行Windows PowerShell，输入set-ExecutionPolicy RemoteSigned 选择是选择 A&lt;/p&gt;
&lt;p&gt;ng : 无法将“ng”项识别为 cmdlet、函数、脚本文件或可运行程序的名称&lt;/p&gt;
&lt;p&gt;解决 在命令行执行npm install -g @angular/cli&lt;/p&gt;
&lt;p&gt;ng : 无法加载文件 C:\Users\15762\AppData\Roaming\npm\ng.ps1&lt;/p&gt;
&lt;p&gt;解决 以管理员身份运行Windows PowerShell，输入set-ExecutionPolicy RemoteSigned 选择是选择 A&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用Visual Studio 2022 中的 .http 文件， ASP.NET Core API快速测试</title>
      <link>https://dodoro.chouxiangpai.com/archives/1977/</link>
      <pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1977/</guid>
      <description>&lt;p&gt;Visual Studio 2022.http 文件编辑器提供了一种便捷的方式来测试 ASP.NET Core项目，尤其是 API 应用。 编辑器提供一个 UI，用于：&lt;/p&gt;
&lt;p&gt;创建和更新 .http 文件。 发送 .http 文件中指定的 HTTP 请求。 显示响应。 本文包含以下文档：&lt;/p&gt;
&lt;p&gt;.http 文件语法。 如何创建 .http 文件。 如何从 .http 文件发送请求。 在何处查找可配置的 .http 文件选项。 如何使用 Visual Studio 2022 终结点资源管理器在 .http 文件中创建请求。 .http 文件格式和编辑器受 Visual Studio Code REST 客户端扩展的启发。 Visual Studio 2022 .http 编辑器将 .rest 识别为相同文件格式的替代文件扩展名。&lt;/p&gt;
&lt;p&gt;先决条件 安装了“ASP.NET 和 Web 部署”工作负载的 Visual Studio 2022 版本 17.8 或更高版本。 .http 文件语法 以下部分介绍 .http 文件语法。&lt;/p&gt;
&lt;p&gt;请求 HTTP 请求的格式为 HTTPMethod URL HTTPVersion，全部在一行上，其中：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Orchard Core 中文文档</title>
      <link>https://dodoro.chouxiangpai.com/archives/1945/</link>
      <pubDate>Fri, 10 May 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1945/</guid>
      <description>&lt;p&gt;Orchard Core 是基于 Orchard CMS 使用 ASP.NET Core 重新构建的。&lt;/p&gt;
&lt;p&gt;Orchard Core 由两个不同的目标组成:&lt;/p&gt;
&lt;p&gt;Orchard Core Framework: 一个应用程序框架，用于构建模块化、多租户 的ASP.NET Core应用程序。 Orchard Core CMS: 一个建立在Orchard Core Framework之上的网络内容管理系统（CMS)。&lt;/p&gt;
&lt;p&gt;需要注意框架和 CMS 之间的差异非常重要。一些想要开发 SaaS 应用程序的开发人员只会对模块化框架感兴趣。其他想要构建可管理网站的用户将专注于 CMS 并构建模块来增强其网站或整个生态系统。&lt;/p&gt;
&lt;p&gt;Building Software as a Service (SaaS) solutions with the Orchard Core Framework&lt;/p&gt;
&lt;p&gt;了解Orchard Core Framework是独立于nuget.org上的CMS分发的，这一点非常重要。我们在 &lt;a href=&#34;https://github.com/OrchardCMS/OrchardCore.Samples&#34;&gt;https://github.com/OrchardCMS/OrchardCore.Samples&lt;/a&gt; 提供了一些示例程序，它将指导您如何仅使用Orchard Core Framework来构建模块化 和 多租户 的应用程序，而无需任何 CMS 特定功能。&lt;/p&gt;
&lt;p&gt;我们的目标之一是启用托管应用程序的基于社区的生态系统，这些生态系统可以通过模块（如电子商务系统、博客引擎等）进行扩展。Orchard Core Framework支持模块化环境，允许不同的团队处理应用程序的不同部分，并使组件跨项目可重用。&lt;/p&gt;
&lt;p&gt;B站演示视频：&lt;a href=&#34;https://www.bilibili.com/video/BV17T4y177fW/&#34;&gt;https://www.bilibili.com/video/BV17T4y177fW/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;使用Orchard Core CMS 构建网站&lt;/p&gt;
&lt;p&gt;Orchard Core CMS 是基于Orchard CMS 使用ASP.NET Core 重写的。它不仅仅是一个端口，因为我们希望大幅提高性能，并尽可能与的ASP.NET Core 的开发模型一致。&lt;/p&gt;</description>
    </item>
    <item>
      <title>苍鹭与少年，宫崎骏的坚持</title>
      <link>https://dodoro.chouxiangpai.com/archives/1935/</link>
      <pubDate>Thu, 18 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1935/</guid>
      <description>&lt;p&gt;看完了《你想活出怎样的人生》，从内容上来看，这部电影的核心仍然是人文主义关怀、关于战后创伤与现代新国家的重建，当然也带有上世纪知识分子对过去挥之不去的烙印。吉卜力的动画片其实更多是拍给大人们看的，宫崎骏一直没有放弃自己坚持的理念：和平主义（反思战争和反对一切战争）、女性主义（主角大都是独立勇敢自由的女孩）和人与自然平等共存。&lt;/p&gt;
&lt;p&gt;这次宫崎骏老爷爷因为身体原因不能去奥斯卡领奖，看来这部动画大概率真的会是他的封笔之作。老爷爷从始至终都坚持完全手绘制作动画的模式，这种方式成本极高，但是制作出来的动画相当逼真。这种创作动画的手法，民国时期的万氏兄弟曾经引领亚洲，其实日本的动画最开始是受中国影响，日本动画大师手冢治虫曾说他正是看了万氏兄弟的《铁扇公主》动画片后放弃学医，决定从事动画创作，手冢治虫算是宫崎骏的上一辈。只是后来中国突降人祸，形成了几十年的文化断层，日本一直沿着这条路坚持走到了今天，获得了巨大成功和全世界的尊重。&lt;/p&gt;
&lt;p&gt;大约在二十年前，我们一起第一次看吉卜力的动画片《千与千寻》，这是他们工作室第一部获得奥斯卡最佳动画的作品，后来我们看完了吉卜力出品的大部分动画，并收藏了喜欢的蓝光，家里还有一本收集每部动画手绘底稿复印件的大部头书。前段时间我们两次东渡扶桑，特地去了一趟他们的美术馆，除了沉浸于吉卜力的梦幻世界，还看到了龙猫巴士爬行的电线杆原型、千寻神隐的神社痕迹和动画片背景里的各种现实场景。&lt;/p&gt;
&lt;p&gt;日本是一个传统又时尚，保守又先进的多元化现代文明国家，只有你亲自去一趟才能深刻体会这种感觉，我在那里看到了本地朴质的文化与奢华的现代物质文化并肩存在，也看到了基督教、佛教和神道教各自蓬勃发展，更看到了古代中国的文化与现代文明交织成一个五彩斑斓的世界，太多的不想说，我真的认为：现在的日本（也许还有印度）是真正的神奇的东方文明古国。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Chap11. DIP: THE DEPENDENCY INVERSION PRINCIPLE DIP：依赖反转原则</title>
      <link>https://dodoro.chouxiangpai.com/archives/2065/</link>
      <pubDate>Thu, 14 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2065/</guid>
      <description>&lt;p&gt;The Dependency Inversion Principle (DIP) tells us that the most flexible systems are those in which source code dependencies refer only to abstractions, not to concretions.&lt;/p&gt;
&lt;p&gt;依赖反转原则（DIP）主要想告诉我们的是，如果想要设计一个灵活的系统，在源代码层次的依赖关系中就应该多引用抽象类型，而用具体实现。&lt;/p&gt;
&lt;p&gt;In a statically typed language, like Java, this means that the use, import, and include statements should refer only to source modules containing interfaces, abstract classes, or some other kind of abstract declaration. Nothing concrete should be depended on.&lt;/p&gt;
&lt;p&gt;也就是说，在 Java 这类静态类型的编程语言中，在使用 use、import、include 这些语句时应该只引用那些包含接口、抽象类或者其他抽象类型声明的源文件，不应该引用任何具体实现。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Chap10. ISP: THE INTERFACE SEGREGATION PRINCIPLE ISP：接口隔离原则</title>
      <link>https://dodoro.chouxiangpai.com/archives/2063/</link>
      <pubDate>Wed, 13 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2063/</guid>
      <description>&lt;p&gt;The Interface Segregation Principle (ISP) derives its name from the diagram shown in Figure 10.1.&lt;/p&gt;
&lt;p&gt;“接口隔离原则（ISP）”这个名字来自图 10.1 所示的这种软件结构。&lt;/p&gt;
&lt;p&gt;The Interface Segregation Principle&lt;/p&gt;
&lt;p&gt;In the situation illustrated in Figure 10.1, there are several users who use the operations of the OPS class. Let’s assume that User1 uses only op1, User2 uses only op2, and User3 uses only op3.&lt;/p&gt;
&lt;p&gt;在图 10.1 所描绘的应用中，有多个用户需要操作 OPS 类。现在，我们假设这里的 User1 只需要使用 op1，User2 只需要使用 op2，User3 只需要使用 op3。&lt;/p&gt;
&lt;p&gt;Now imagine that OPS is a class written in a language like Java. Clearly, in that case, the source code of User1 will inadvertently depend on op2 and op3, even though it doesn’t call them. This dependence means that a change to the source code of op2 in OPS will force User1 to be recompiled and redeployed, even though nothing that it cared about has actually changed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Chap9. LSP: THE LISKOV SUBSTITUTION PRINCIPLE LSP：里氏替换原则</title>
      <link>https://dodoro.chouxiangpai.com/archives/2061/</link>
      <pubDate>Tue, 12 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2061/</guid>
      <description>&lt;p&gt;In 1988, Barbara Liskov wrote the following as a way of defining subtypes.&lt;/p&gt;
&lt;p&gt;1988 年，Barbara Liskov 在描述如何定义子类型时写下了这样一段话：&lt;/p&gt;
&lt;p&gt;What is wanted here is something like the following substitution property: If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.1&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Chap8. OCP: THE OPEN-CLOSED PRINCIPLE OCP：开闭原则</title>
      <link>https://dodoro.chouxiangpai.com/archives/2059/</link>
      <pubDate>Mon, 11 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2059/</guid>
      <description>&lt;p&gt;The Open-Closed Principle (OCP) was coined in 1988 by Bertrand Meyer.1 It says:&lt;/p&gt;
&lt;p&gt;开闭原则（OCP）是 Bertrand Meyer 在 1988 年提出的，该设计原则认为：&lt;/p&gt;
&lt;p&gt;A software artifact should be open for extension but closed for modification.&lt;/p&gt;
&lt;p&gt;设计良好的计算机软件应该易于扩展，同时抗拒修改。&lt;/p&gt;
&lt;p&gt;In other words, the behavior of a software artifact ought to be extendible, without having to modify that artifact.&lt;/p&gt;
&lt;p&gt;换句话说，一个设计良好的计算机系统应该在不需要修改的前提下就可以轻易被扩展。&lt;/p&gt;
&lt;p&gt;This, of course, is the most fundamental reason that we study software architecture. Clearly, if simple extensions to the requirements force massive changes to the software, then the architects of that software system have engaged in a spectacular failure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Chap7. SRP: THE SINGLE RESPONSIBILITY PRINCIPLE SRP：单一职责原则</title>
      <link>https://dodoro.chouxiangpai.com/archives/2057/</link>
      <pubDate>Sun, 10 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2057/</guid>
      <description>&lt;p&gt;Of all the SOLID principles, the Single Responsibility Principle (SRP) might be the least well understood. That’s likely because it has a particularly inappropriate name. It is too easy for programmers to hear the name and then assume that it means that every module should do just one thing.&lt;/p&gt;
&lt;p&gt;SRP 是 SOLID 五大设计原则中最容易被误解的一个。也许是名字的原因，很多程序员根据 SRP 这个名字想当然地认为这个原则就是指：每个模块都应该只做一件事。&lt;/p&gt;
&lt;p&gt;Make no mistake, there is a principle like that. A function should do one, and only one, thing. We use that principle when we are refactoring large functions into smaller functions; we use it at the lowest levels. But it is not one of the SOLID principles—it is not the SRP.&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Part3. DESIGN PRINCIPLES 设计原则</title>
      <link>https://dodoro.chouxiangpai.com/archives/2054/</link>
      <pubDate>Sat, 09 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2054/</guid>
      <description>&lt;p&gt;Good software systems begin with clean code. On the one hand, if the bricks aren’t well made, the architecture of the building doesn’t matter much. On the other hand, you can make a substantial mess with well-made bricks. This is where the SOLID principles come in.&lt;/p&gt;
&lt;p&gt;通常来说，要想构建一个好的软件系统，应该从写整洁的代码开始做起。毕竟，如果建筑所使用的砖头质量不佳，那么架构所能起到的作用也会很有限。反之亦然，如果建筑的架构设计不佳，那么其所用的砖头质量再好也没有用。这就是 SOLID 设计原则所要解决的问题。&lt;/p&gt;
&lt;p&gt;The SOLID principles tell us how to arrange our functions and data structures into classes, and how those classes should be interconnected. The use of the word “class” does not imply that these principles are applicable only to object-oriented software. A class is simply a coupled grouping of functions and data. Every software system has such groupings, whether they are called classes or not. The SOLID principles apply to those groupings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Chap6. FUNCTIONAL PROGRAMMING 函数式编程</title>
      <link>https://dodoro.chouxiangpai.com/archives/2026/</link>
      <pubDate>Fri, 08 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/2026/</guid>
      <description>&lt;p&gt;In many ways, the concepts of functional programming predate programming itself. This paradigm is strongly based on the l-calculus invented by Alonzo Church in the 1930s.&lt;/p&gt;
&lt;p&gt;函数式编程所依赖的原理，在很多方而其实是早于编程本身出现的。因为函数式编程这种范式强烈依赖于 Alonzo Church 在 20 世纪 30 年代发明的 λ 演算。&lt;/p&gt;
&lt;p&gt;SQUARES OF INTEGERS 整数平方 To explain what functional programming is, it’s best to examine some examples. Let’s investigate a simple problem: printing the squares of the first 25 integers.&lt;/p&gt;
&lt;p&gt;我们最好还是用一个例子来解释什么是函数式编程。请看下面的这个例子：这段代码想要输出前 25 个整数的平方值。&lt;/p&gt;
&lt;p&gt;In a language like Java, we might write the following:&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Chap5. OBJECT-ORIENTED PROGRAMMING 面向对象编程</title>
      <link>https://dodoro.chouxiangpai.com/archives/1972/</link>
      <pubDate>Thu, 07 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1972/</guid>
      <description>&lt;p&gt;As we will see, the basis of a good architecture is the understanding and application of the principles of object-oriented design (OO). But just what is OO?&lt;/p&gt;
&lt;p&gt;稍后我们会讲到，设计一个优秀的软件架构要基于对面向对象设计（Object-Oriented Design）的深入理解及应用。但我们首先得弄明白一个问题：究竟什么是面向对象？&lt;/p&gt;
&lt;p&gt;One answer to this question is “The combination of data and function.” Although often cited, this is a very unsatisfying answer because it implies that o.f() is somehow different from f(o). This is absurd. Programmers were passing data structures into functions long before 1966, when Dahl and Nygaard moved the function call stack frame to the heap and invented OO.&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Chap4. STRUCTURED PROGRAMMING 结构化编程</title>
      <link>https://dodoro.chouxiangpai.com/archives/1969/</link>
      <pubDate>Wed, 06 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1969/</guid>
      <description>&lt;p&gt;Edsger Wybe Dijkstra was born in Rotterdam in 1930. He survived the bombing of Rotterdam during World War II, along with the German occupation of the Netherlands, and in 1948 graduated from high school with the highest possible marks in math, physics, chemistry, and biology. In March 1952, at the age of 21 (and just 9 months before I was born), Dijkstra took a job with the Mathematical Center of Amsterdam as the Netherlands’ very first programmer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Chap3. PARADIGM OVERVIEW 编程范式总览</title>
      <link>https://dodoro.chouxiangpai.com/archives/1967/</link>
      <pubDate>Tue, 05 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1967/</guid>
      <description>&lt;p&gt;The three paradigms included in this overview chapter are structured programming, object-orient programming, and functional programming.&lt;/p&gt;
&lt;p&gt;本章将讲述三个编程范式，它们分别是结构化编程（structured programming）、 面向对象编程（object-oriented programming）以及函数式编程（functional programming）。&lt;/p&gt;
&lt;p&gt;STRUCTURED PROGRAMMING 结构化编程 The first paradigm to be adopted (but not the first to be invented) was structured programming, which was discovered by Edsger Wybe Dijkstra in 1968. Dijkstra showed that the use of unrestrained jumps (goto statements) is harmful to program structure. As we’ll see in the chapters that follow, he replaced those jumps with the more familiar if/then/else and do/while/until constructs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Part2. STARTING WITH THE BRICKS: PROGRAMMING PARADIGMS 从基础构件开始：编程范式</title>
      <link>https://dodoro.chouxiangpai.com/archives/1965/</link>
      <pubDate>Mon, 04 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1965/</guid>
      <description>&lt;p&gt;Software architecture begins with the code—and so we will begin our discussion of architecture by looking at what we’ve learned about code since code was first written.&lt;/p&gt;
&lt;p&gt;任何软件架构的实现都离不开具体的代码，所以我们对软件架构的讨论应该从第一行被写下的代码开始。&lt;/p&gt;
&lt;p&gt;In 1938, Alan Turing laid the foundations of what was to become computer programming. He was not the first to conceive of a programmable machine, but he was the first to understand that programs were simply data. By 1945, Turing was writing real programs on real computers in code that we would recognize (if we squinted enough). Those programs used loops, branches, assignment, subroutines, stacks, and other familiar structures. Turing’s language was binary.&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Chap2. A TALE OF TWO VALUES 两个价值维度</title>
      <link>https://dodoro.chouxiangpai.com/archives/1963/</link>
      <pubDate>Sun, 03 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1963/</guid>
      <description>&lt;p&gt;Every software system provides two different values to the stakeholders: behavior and structure. Software developers are responsible for ensuring that both those values remain high. Unfortunately, they often focus on one to the exclusion of the other. Even more unfortunately, they often focus on the lesser of the two values, leaving the software system eventually valueless.&lt;/p&gt;
&lt;p&gt;对于每个软件系统，我们都对以通过行为和架构两个维度来休现它的实际价值。软件研发人员应该确保自己的系统在这两个维度上的实际价值都能长时间维持在很高的状态。不幸的是，他们往往只关注一个维度，而忽视了另外一个维度。更不幸的是，他们常常关注的还是错误的维度，这导致了系统的价值最终趋降为零。&lt;/p&gt;
&lt;p&gt;BEHAVIOR 行为价值 The first value of software is its behavior. Programmers are hired to make machines behave in a way that makes or saves money for the stakeholders. We do this by helping the stakeholders develop a functional specification, or requirements document. Then we write the code that causes the stakeholder’s machines to satisfy those requirements.&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：Chap1. WHAT IS DESIGN AND ARCHITECTURE? 设计与架构到底是什么</title>
      <link>https://dodoro.chouxiangpai.com/archives/1961/</link>
      <pubDate>Sat, 02 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1961/</guid>
      <description>&lt;p&gt;There has been a lot of confusion about design and architecture over the years. What is design? What is architecture? What are the differences between the two?&lt;/p&gt;
&lt;p&gt;一直以来，设计（Design）与架构（Architecture）这两个概念让大多数人十分迷惑——什么是设计？什么是架构？二者究竟有什么区别？&lt;/p&gt;
&lt;p&gt;One of the goals of this book is to cut through all that confusion and to define, once and for all, what design and architecture are. For starters, I’ll assert that there is no difference between them. None at all.&lt;/p&gt;
&lt;p&gt;本书的一个重要的目标就是要清晰、明确地对二者进行定义。首先我要明确地说，二者没有任何区别。一丁点区别都没有！&lt;/p&gt;
&lt;p&gt;The word “architecture” is often used in the context of something at a high level that is divorced from the lower-level details, whereas “design” more often seems to imply structures and decisions at a lower level. But this usage is nonsensical when you look at what a real architect does.&lt;/p&gt;</description>
    </item>
    <item>
      <title>《架构整洁之道》：AFTERWORD 后序</title>
      <link>https://dodoro.chouxiangpai.com/archives/1959/</link>
      <pubDate>Fri, 01 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1959/</guid>
      <description>&lt;p&gt;My professional career as a software developer began in the 1990s, at a time when the dinosaurs of Big Architecture ruled the world. To get ahead, you had to learn about objects and components, about design patterns, and about the Unified Modeling Language (and its precursors).&lt;/p&gt;
&lt;p&gt;我的软件工程师生涯开始于 20 世纪 90 年代，那是一个恐龙级大型架构统治世界的时代。要想在那样的时代获得一席之地，我们必须学会对象及其组件、设计模式、统一建模语言（包括其前身）的相关知识。&lt;/p&gt;
&lt;p&gt;Projects—and boy, should we rue the day when we decided to call them that?—started with long design phases, where detailed blueprints for our systems were laid out by “senior” programmers for more “junior” programmers to follow. Which, of course, they didn’t. Ever.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OrchardCore实现模块化核心原理分析</title>
      <link>https://dodoro.chouxiangpai.com/archives/1947/</link>
      <pubDate>Wed, 10 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1947/</guid>
      <description>&lt;p&gt;若改造项目，也因历史遗留问题，数据库表设计也可能存在不合理，此时从头开始再搭建如此庞大的架子，感觉会有点虚空，同时也要考虑团队内部情况，不是那么容易上手，反而可能会违背初心，花更多时间和精力在各种模型理解上&lt;/p&gt;
&lt;p&gt;我们完全可以为后续做铺垫，先搭建出底层基本设施，再基于此做灵活扩展即可，每个公司项目具体情况都不一样，比如仓储模式可能需要结合项目进行对应 改造，仓储只是提供了一种基本思想，若真将网上普遍流传的模式照搬可能并不是那么好用，可能会认为仓储莫不是一种反模式&lt;/p&gt;
&lt;p&gt;.NET Core模块化插件&lt;/p&gt;
&lt;p&gt;.NET Core内置提供了AssemblyLoadContext加载dll插件方式实现模块化，然后将其进行注册&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;        var mvcBuilder = services.AddMvc();
        foreach (var module in modules)
        {
            // Register controller from modules
            mvcBuilder.AddApplicationPart(module.Assembly);
        }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这种方式虽可行，在我看来只能作为一种临时解决方案并不利于长期，因为需额外创建一个新的项目，然后加载所生成dll，由于没有底层设施做支撑，所以极易引起版本不一致问题，而且手动被迫性质太强，实现模块化方案最终的目标则只需关注业务逻辑实现，我们来看看OrchardCore如何实现模块化。&lt;/p&gt;
&lt;p&gt;OrchardCore模块化思想&lt;/p&gt;
&lt;p&gt;这里我们并不讨论和ABP vNext二者谁更强大，没有任何意义，比如需结合现有项目情况、项目大小、是否为多租户、实施难度等等多方面考虑才能得出基本结论，而不是一味追求当前主流&lt;/p&gt;
&lt;p&gt;比如我们只是想实现模块化方案，建议选择OrchardCore来实施，因为很简单，我们可将其剥离为我所用，而后结合项目情况是否考虑利用ABP vNext来进行分层处理。借鉴核心思想、才能保证一切可在控制范围内&lt;/p&gt;
&lt;p&gt;首先我们先从整体上对OrchardCore做个认识，细枝末节暂不考虑：基于ASP.NET Core多租户模块化应用框架。&lt;/p&gt;
&lt;p&gt;版本管理：无论是底层设施、基本框架、模块都通过包管理，同时框架和包版本基本（包管理走框架包版本）可以统一管理（对于版本升级很重要）&lt;/p&gt;
&lt;p&gt;核心思想：模块实现模块特性，通过MSBuild构建主程序所添加实现模块特性的模块包，底层设施扫描模块特性将其注册到容器中，当然模块和模块特性都可进行基本信息描述&lt;/p&gt;
&lt;p&gt;OrchardCore模块化原理&lt;/p&gt;
&lt;p&gt;整个项目架构如下图所示&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1947/images/image-1717047673501.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;OrchardCore：底层设施以及可能需要添加的组件（比如本地化、日志、文件存储、缓存、Lucene等）&lt;/p&gt;
&lt;p&gt;OrchardCore.Frameworks：MVC框架&lt;/p&gt;
&lt;p&gt;OrchardCore.Modules：模块化包（比如邮件服务、后台作业服务、第三方集成等等）&lt;/p&gt;
&lt;p&gt;OrchardCore.Modules.Cms：Cms模块包&lt;/p&gt;
&lt;p&gt;OrchardCore.Themes：主题管理&lt;/p&gt;
&lt;p&gt;OrchardCore.Cms.Web：主程序&lt;/p&gt;
&lt;p&gt;我以内置所提供示例程序给大家讲解整个详细流程，而后有需要更细致了解的童鞋就可以很快上手了，如下示例主程序加载示例模块，主程序直接采用引用该示例模块（实际则是通过nuget下载该模块）&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1947/images/image-1717047710410.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;正常情况下我们通过nuget直接下载的是程序包，而OrchardCore对于入口则是利用MSBuild加载targets文件（其他组件则直接下载对应包），而targets引用对应包，通过这种中转方式根据我的理解主要解决了两个问题，其一则是可以屏蔽底层设施包（一次性下载），最重要的是通过targets文件可自动添加主程序程序集所加载模块包特性&lt;/p&gt;
&lt;p&gt;是不是感觉有点懵，那到底是如何加载模块包特性的呢？来，请看如下图，我们以实际操作从头再来做一个完整梳理（注意：为排版美观，如下都将省略OrchardCore前缀）&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1947/images/image-1717047738808.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;【1】创建Mvc.Web程序，在nuget上下载Application.Mvc.Targets包&lt;/p&gt;
&lt;p&gt;【2】创建Mvc.HelloWorld模块，在nuget上下载引用Module.Targets包&lt;/p&gt;
&lt;p&gt;【3】Mvc.Web主程序引用我们所使用的Mvc.HelloWorld模块&lt;/p&gt;
&lt;p&gt;【4】Application.Mvc.Targets包引用Application.Targets（引入底层设施）和MVC.Core（引入MVC框架）&lt;/p&gt;
&lt;p&gt;【5】示例模块引入模块包，该包中存在模块特性（Module类）&lt;/p&gt;
&lt;p&gt;【6】Application.Targets包下存在Application.Targets.targets文件，由于主程序引用了该包，添加所引用实现模块特性的包程序集信息到主程序集&lt;/p&gt;
&lt;p&gt;到这里我们已经研究完主程序如何识别模块包，接下来则是如何加载模块包以及对应注册服务信息&lt;/p&gt;
&lt;p&gt;OrcharCore核心在于OrchardCore和OrchardCore.Abstractions这两个底层设施包&lt;/p&gt;
&lt;p&gt;归根到底，其底层设施源码一部分可能从官方源码拷贝过来（自我猜测），为实现多租户模式，势必要构建租户的容器和路由中间件，这中间就涉及在容器中需要维护每一个租户上下文（ShellContext），并且也要跟踪每个租户的状态。&lt;/p&gt;
&lt;p&gt;ModularTenantContainerMiddleware作为创建租户容器中间件&lt;/p&gt;
&lt;p&gt;ModularTenantRouterMiddleware作为租户路由中间件&lt;/p&gt;</description>
    </item>
    <item>
      <title>OrchardCore入门指南：创建Orchard Core CMS网站</title>
      <link>https://dodoro.chouxiangpai.com/archives/1956/</link>
      <pubDate>Fri, 30 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1956/</guid>
      <description>&lt;p&gt;在本指南中，您将使用项目模板将Orchard Core设置为内容管理系统。&lt;/p&gt;
&lt;p&gt;您需要什么&lt;/p&gt;
&lt;p&gt;.NET SDK的当前版本。您可以从以下网址下载它：&lt;a href=&#34;https://dotnet.microsoft.com/download&#34;&gt;https://dotnet.microsoft.com/download&lt;/a&gt;. 文本编辑器和终端，您可以在其中键入 dotnet 命令。&lt;/p&gt;
&lt;p&gt;创建项目&lt;/p&gt;
&lt;p&gt;有多种创建Orchard Core网站和模块的方法。您可以在这里了解更多信息。&lt;/p&gt;
&lt;p&gt;在本指南中，我们将使用“代码生成模板”。您可以使用此命令安装最新稳定版本的模板：&lt;/p&gt;
&lt;p&gt;dotnet new install OrchardCore.ProjectTemplates::1.5.0-*&lt;/p&gt;
&lt;p&gt;注意&lt;/p&gt;
&lt;p&gt;要使用模板的开发分支，请添加 &amp;ndash;nuget-source &lt;a href=&#34;https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json&#34;&gt;https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;创建一个空文件夹来存放你的网站。打开终端，进入该文件夹并运行以下命令：&lt;/p&gt;
&lt;p&gt;dotnet new occms -n MySite&lt;/p&gt;
&lt;p&gt;这样就在一个名为 MySite 的文件夹中创建了一个新的Orchard Core CMS项目。&lt;/p&gt;
&lt;p&gt;设置站点&lt;/p&gt;
&lt;p&gt;应用程序已经由模板创建，但尚未设置。&lt;/p&gt;
&lt;p&gt;通过执行以下命令启动应用程序：&lt;/p&gt;
&lt;p&gt;dotnet run &amp;ndash;project .\MySite\MySite.csproj&lt;/p&gt;
&lt;p&gt;Note&lt;/p&gt;
&lt;p&gt;如果你正在使用模板的开发分支，请在运行应用程序之前运行dotnet restore .\MySite\MySite.csproj &amp;ndash;source &lt;a href=&#34;https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json&#34;&gt;https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;现在您的应用程序应该正在运行，并监听以下端口： 现在监听 on: &lt;a href=&#34;https://localhost:5001&#34;&gt;https://localhost:5001&lt;/a&gt; 和 on: &lt;a href=&#34;http://localhost:5000%E3%80%82%E5%BA%94%E7%94%A8%E5%B7%B2%E7%BB%8F%E5%90%AF%E5%8A%A8%EF%BC%8C%E6%8C%89&#34;&gt;http://localhost:5000。应用已经启动，按&lt;/a&gt; Ctrl+C 可以关闭应用。&lt;/p&gt;
&lt;p&gt;在浏览器中打开 &lt;a href=&#34;https://localhost:5001&#34;&gt;https://localhost:5001&lt;/a&gt; 可以显示设置屏幕。&lt;/p&gt;
&lt;p&gt;为了演示的目的，我们将使用 Blog 配方创建网站。Blog 配方是 Orchard Core 的 入门配方之一，其中包含一系列功能和配置 Orchard Core 网站的步骤。&lt;/p&gt;
&lt;p&gt;完成设置表单，选择 Blog 配方和 SQLite 数据库。&lt;/p&gt;
&lt;p&gt;提交表单后，几秒钟后您将可以看到一个博客站点。&lt;/p&gt;
&lt;p&gt;为了配置并开始编写内容，您可以转到 &lt;a href=&#34;https://localhost:5001/admin&#34;&gt;https://localhost:5001/admin&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;概要&lt;/p&gt;</description>
    </item>
    <item>
      <title>OrchardCore入门指南：创建一个模块化的 ASP.NET Core 应用程序</title>
      <link>https://dodoro.chouxiangpai.com/archives/1954/</link>
      <pubDate>Fri, 30 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1954/</guid>
      <description>&lt;p&gt;你将要构建什么&lt;/p&gt;
&lt;p&gt;您将创建一个模块化的 ASP.NET Core MVC 网络应用程序，类似于包含在 Orchard Core 中的 &amp;ldquo;Hello World&amp;rdquo; 应用程序示例。它包括一个网络应用程序和一个模块。网络应用程序提供了布局，而模块注册了路由并响应首页请求。您可以参考 Orchard Core 中的以下项目以获取更多信息。&lt;/p&gt;
&lt;p&gt;src/OrchardCore.Mvc.Web src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld 所需材料 当前版本的 .NET SDK。您可以从此处下载: &lt;a href=&#34;https://dotnet.microsoft.com/download&#34;&gt;https://dotnet.microsoft.com/download&lt;/a&gt;. 一个文本编辑器和一个终端，您可以在其中运行 dotnet CLI 命令。 创建 Orchard Core 网站和模块 有不同的方法可以为 Orchard Core 创建网站和模块。您可以在 此处 了解更多信息。&lt;/p&gt;
&lt;p&gt;在本指南中，我们将使用我们的代码生成模板。您可以使用以下命令安装模板的最新稳定版本： dotnet new install OrchardCore.ProjectTemplates::1.5.0-*&lt;/p&gt;
&lt;p&gt;Note&lt;/p&gt;
&lt;p&gt;如果想使用模板的开发分支，请添加 &amp;ndash;nuget-source &lt;a href=&#34;https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json&#34;&gt;https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;创建一个名为OrchardCore.Mvc的空文件夹，它将包含我们的项目。打开一个终端，进入该文件夹并运行以下命令来创建Web应用程序：&lt;/p&gt;
&lt;p&gt;dotnet new ocmvc -n OrchardCore.Mvc.Web&lt;/p&gt;
&lt;p&gt;接下来，创建“ Hello World”模块。&lt;/p&gt;
&lt;p&gt;dotnet new ocmodulemvc -n OrchardCore.Mvc.HelloWorld&lt;/p&gt;
&lt;p&gt;将Web应用程序中指向该模块的项目引用添加到其中。&lt;/p&gt;
&lt;p&gt;dotnet add OrchardCore.Mvc.Web reference OrchardCore.Mvc.HelloWorld&lt;/p&gt;
&lt;p&gt;可选地，您可以添加一个解决方案文件，该文件引用了Web应用程序和模块，以便在Visual Studio中打开解决方案。&lt;/p&gt;
&lt;p&gt;dotnet new sln -n OrchardCore.Mvc dotnet sln add OrchardCore.Mvc.Web\OrchardCore.Mvc.Web.csproj dotnet sln add OrchardCore.Mvc.HelloWorld\OrchardCore.Mvc.HelloWorld.csproj 测试生成的应用程序 从包含两个项目的OrchardCore.Mvc根文件夹中运行以下命令启动Web应用程序：&lt;/p&gt;</description>
    </item>
    <item>
      <title>OrchardCore入门指南</title>
      <link>https://dodoro.chouxiangpai.com/archives/1952/</link>
      <pubDate>Tue, 20 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1952/</guid>
      <description>&lt;p&gt;指南 无论你在构建什么，这些指南旨在让你尽快使用最新的Orchard Core项目版本和Orchard团队推荐的技术，进入工作状态。&lt;/p&gt;
&lt;p&gt;入门指南 这些指南旨在在15-30分钟内完成，提供快速的、实践操作的指令，用于使用Orchard Core构建任何开发任务的“Hello World”。在大多数情况下，唯一的先决条件是一个.NET SDK和一个文本编辑器。&lt;/p&gt;
&lt;p&gt;创建一个模块化的ASP.NET Core应用程序 在启动时运行代码 自定义编码设置 Orchard Core CMS指南 这些指南专门针对Orchard Core CMS：&lt;/p&gt;
&lt;p&gt;创建Orchard Core CMS网站 向管理导航添加菜单项 安装本地化文件 如何使用资产转码器/绑定器/缩小器管道- 集成 Facebook 插件 实现全文检索 将 AzureAD 集成为外部提供程序 教程 这些教程旨在在2-3小时内完成，提供更深入、上下文探讨企业应用程序开发主题，并让您准备实现现实世界的解决方案。&lt;/p&gt;
&lt;p&gt;使用 Razor Pages 构建解耦的网站 构建一个来自 Web 模板的网站（待定） 实施自助式 SaaS 解决方案（待定）&lt;/p&gt;</description>
    </item>
    <item>
      <title>基于ASP.NET Core的整洁架构</title>
      <link>https://dodoro.chouxiangpai.com/archives/1912/</link>
      <pubDate>Wed, 07 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1912/</guid>
      <description>&lt;p&gt;干净体系结构将业务逻辑和应用程序模型置于应用程序的中心。 而不是让业务逻辑依赖于数据访问或其他基础设施，此依赖关系被倒置：基础结构和实现细节依赖于应用程序内核。 此功能是通过在应用程序核心中定义抽象或接口来实现的，然后通过基础设施层中定义的类型实现。 将此体系结构可视化的常用方法是使用一系列同心圆，类似于洋葱。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20230607112509.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1912/images/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20230607112509.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;遵循依赖倒置原则以及域驱动设计原则 (DDD) 的应用程序倾向于达到类似的体系结构。 多年来，这种体系结构有多种名称。 最初的名称之一是六边形体系结构，然后是端口 - 适配器。 最近，它被称为洋葱体系结构或干净体系结构。 此电子书中将后一种名称“干净体系结构”用作此体系结构的名称。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20230607112522.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1912/images/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20230607112522.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在此关系图中，依赖关系流向最里面的圆。 “应用程序内核”因其位于此关系图的核心位置而得名。 从关系图上可见，该应用程序内核在其他应用程序层上没有任何依赖项。 应用程序的实体和接口位于正中心。 在外圈但仍在应用程序核心中的是域服务，它通常实现内圈中定义的接口。 在应用程序内核外面，UI 和基础结构层均依赖于应用程序内核，但不一定彼此依赖。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20230607112541.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1912/images/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20230607112541.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Entity Framework Core 创建DbContext的两种方法</title>
      <link>https://dodoro.chouxiangpai.com/archives/1940/</link>
      <pubDate>Mon, 08 May 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1940/</guid>
      <description>&lt;p&gt;最近创建基于firstcode的开发模式，整理了一下如何使用Entity Framework Core 创建DbContext。&lt;/p&gt;
&lt;p&gt;1、第一种重写DbContext的OnConfiguring方法，每次生成一个DbContext的方法的时候就会重新来这个方法这里读一下配置。&lt;/p&gt;
&lt;p&gt;这种情况下，首先尝试通过调用 Program.CreateHostBuilder()、调用 Build()，然后访问 Services 属性来获取服务提供程序。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Program&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Main(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;[] args)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        =&amp;gt; CreateHostBuilder(args).Build().Run();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// EF Core uses this method at design time to access the DbContext&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; IHostBuilder CreateHostBuilder(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;[] args)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        =&amp;gt; Host.CreateDefaultBuilder(args)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            .ConfigureWebHostDefaults(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                webBuilder =&amp;gt; webBuilder.UseStartup&amp;lt;Startup&amp;gt;());
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Startup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; ConfigureServices(IServiceCollection services)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        =&amp;gt; services.AddDbContext&amp;lt;ApplicationDbContext&amp;gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Configure(IApplicationBuilder app, IWebHostEnvironment env)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ApplicationDbContext&lt;/span&gt; : DbContext
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; ApplicationDbContext(DbContextOptions&amp;lt;ApplicationDbContext&amp;gt; options)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        : &lt;span style=&#34;color:#66d9ef&#34;&gt;base&lt;/span&gt;(options)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2、使用不带参数的构造函数&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Importance of SOLID Design Principles</title>
      <link>https://dodoro.chouxiangpai.com/archives/1900/</link>
      <pubDate>Wed, 19 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1900/</guid>
      <description>&lt;p&gt;Author: Stephen Watts&lt;/p&gt;
&lt;p&gt;SOLID is a popular set of design principles that are used in object-oriented software development. SOLID is an acronym that stands for five key design principles: &lt;strong&gt;single responsibility principle, open-closed principle, Liskov substitution principle, interface segregation principle, and dependency inversion principle.&lt;/strong&gt; All five are commonly used by software engineers and provide some important benefits for developers.&lt;/p&gt;
&lt;p&gt;The SOLID principles were developed by Robert C. Martin in a 2000 essay, “Design Principles and Design Patterns,” although the acronym was coined later by Michael Feathers. In his essay, Martin acknowledged that successful software will change and develop. As it changes, it becomes increasingly complex. Without good design principles, Martin warns that software becomes rigid, fragile, immobile, and viscous. &lt;strong&gt;The SOLID principles were developed to combat these problematic design patterns&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>里氏替换原则Liskov substitation principle</title>
      <link>https://dodoro.chouxiangpai.com/archives/1902/</link>
      <pubDate>Wed, 19 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1902/</guid>
      <description>&lt;h2 id=&#34;为什么叫里氏替换原则&#34;&gt;为什么叫里氏替换原则？&lt;/h2&gt;
&lt;p&gt;里氏替换原则在SOLID这五个设计原则中是比较特殊的存在：如果违反了里氏替换原则，不只是降低软件设计的优雅性，很可能会导致Bug。&lt;/p&gt;
&lt;p&gt;里氏替换原则译自Liskov substitution principle。Liskov是一位计算机科学家，也就是Barbara Liskov，麻省理工学院教授，也是美国第一个计算机科学女博士，师从图灵奖得主John McCarthy教授，人工智能概念的提出者。&lt;/p&gt;
&lt;p&gt;Robert Martin在《敏捷软件开发：原则、模式与实践》一书中对原论文的解读：子类型（subtype）必须能够替换掉他们的基类型（base type）。这个是更简明的一种表述。&lt;/p&gt;
&lt;h2 id=&#34;违背-lsp-原则的一个简单示例&#34;&gt;违背 LSP 原则的一个简单示例&lt;/h2&gt;
&lt;p&gt;一个非常明显地违背 LSP原则的示例就是使用 RTTI（Run Time Type Identification）来根据对象类型选择函数执行。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; DrawShape(&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; Shape&amp;amp; s)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (typeid(s) == typeid(Square))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        DrawSquare(static_cast&amp;lt;Square&amp;amp;&amp;gt;(s));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (typeid(s) == typeid(Circle))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        DrawCircle(static_cast&amp;lt;Circle&amp;amp;&amp;gt;(s));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;正方形和长方形违背原则的微妙之处&#34;&gt;正方形和长方形，违背原则的微妙之处&lt;/h2&gt;
&lt;p&gt;很多情况下对 LSP 原则的违背方式都十分微妙。设想在一个应用程序中使用了 Rectangle 类，描述如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Rectangle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;double&lt;/span&gt; _width;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;double&lt;/span&gt; _height;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; SetWidth(&lt;span style=&#34;color:#66d9ef&#34;&gt;double&lt;/span&gt; w) { _width = w; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; SetHeight(&lt;span style=&#34;color:#66d9ef&#34;&gt;double&lt;/span&gt; w) { _height = w; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;double&lt;/span&gt; GetWidth() { &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; _width; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;double&lt;/span&gt; GetHeight() { &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; _height; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;违反里氏替换原则的危害&#34;&gt;违反里氏替换原则的危害&lt;/h2&gt;
&lt;p&gt;当我们违反了这一原则会带来有一些危害：反直觉。期望所有子类行为是一致的，但如果不一致可能需要文档记录，或者在代码跑失败后涨此知识；不可读。如果子类行为不一致，可能需要不同的逻辑分支来适配不同的行为，徒增代码复杂度；不可用。可能出错的地方终将会出错。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C#中引用类型的赋值、浅拷贝和深拷贝</title>
      <link>https://dodoro.chouxiangpai.com/archives/1895/</link>
      <pubDate>Fri, 07 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1895/</guid>
      <description>&lt;p&gt;赋值和深复制、浅复制并不是一样的，含义是不一样的。赋值。指的是 “ 等号= ”。它相当于是给引用对象起一个别名。浅度复制和深度复制。指的是类实现 ICloneable接口，重写该接口的唯一方法。注意：不管是深度复制还是浅度复制，都是通过ICloneable接口去实现的。&lt;/p&gt;
&lt;p&gt;值类型变量存储的是变量的值，直接储存在栈内存中。引用类型变量存储的是变量所在的内存地址，引用类型变量的实际数据存储于托管堆，变量本身仅仅是一个指向堆中实际数据的地址，存储于栈内存中，通常是四个字节。&lt;/p&gt;
&lt;p&gt;值类型Value存储在线程堆栈中。引用类型Reference存储在托管堆上。&lt;/p&gt;
&lt;p&gt;全局数据区：存放全局变量，静态数据，常量。代码区：存放所有的程序代码。栈区：存放为运行而分配的局部变量，参数，返回数据，返回地址等。堆区：即自由存储区&lt;/p&gt;
&lt;p&gt;为了理解值类型变量和引用类型变量的内存分配模型，我们应先区分两种不同的内存区域——线程堆栈Thread Stack和托管堆Managed Heap。每一个正在运行的程序都对应着一个进程Process，在一个进程内部，可以有一个或多个线程Thread，每个线程都拥有一块“自留地”，成为线程堆栈,大小为1M，用于保存自身的一些数据，如函数中定义的局部变量、函数调用时传送的参数值等。现在我们可以解释第一句话——值类型存储在线程堆栈中，也就是说所有值类型的变量都是在线程堆栈中分配的。另一块内存区域称为堆Heap,在.NET这种托管环境下，堆由CLR（Common Language Runtime）管理，所以又称托管堆Managed Heap。例如使用new关键字创建类的对象实例时，分配给对象的内存单元就位于托管堆中。&lt;/p&gt;
&lt;p&gt;1、赋值。赋值和深度复制，浅度复制完全是不同的概念，并没有什么关系，很多文章说赋值对于值类型是深度复制，对于引用类型是浅度复制，这种说法是不正确的，它的本质是在线程栈上产生一样的副本。&lt;/p&gt;
&lt;p&gt;2、浅度复制。值类型成员独立，但是引用类型成员共享。&lt;/p&gt;
&lt;p&gt;3、深度复制。值类型成员和引用类型成员都是独立的，即完完全全的一个全新的副本，称之为深度复制。&lt;/p&gt;
&lt;p&gt;（1）String字符串对象是引用对象，但是很特殊，它表现的如值对象一样，即对它进行赋值，分割，合并，并不是对原有的字符串进行操作，而是返回一个新的字符串对象。但这其实是运算符重载的结果，将string实现为语义遵循一般的、直观的字符串规则。 String对象被分配在堆上,而不是栈上。&lt;/p&gt;
&lt;p&gt;（2）Array数组对象是引用对象，在进行赋值的时候，实际上返回的是源对象的另一份引用而已；因此如果要对数组对象进行真正的复制（深拷贝），那么需要新建一份数组对象，然后将源数组的值逐一拷贝到目的对象中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C#实现两个顺序链表的合并</title>
      <link>https://dodoro.chouxiangpai.com/archives/1897/</link>
      <pubDate>Fri, 07 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1897/</guid>
      <description>&lt;p&gt;最近开始刷leetcode，刷了一周时间，确实会上瘾，不过能巩固很多基础知识，包括算法和语言。我现在是架构与编码并行。今天遇到的是两个列表的合并，刚开始我自己写了一个笨方法来合并，虽然通过了测试，但是代码质量不高，于是研究了其他人写的代码。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//传入的两个链表本身是从小到大排序好&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; ListNode MergeTwoLists(ListNode list1, ListNode list2)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ListNode head = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; ListNode(); &lt;span style=&#34;color:#75715e&#34;&gt;//定义新的链表头&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ListNode current = head;&lt;span style=&#34;color:#75715e&#34;&gt;//定义链表最新的next地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//遍历两个链表，任何一个完毕后就终止循环&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (list1 != &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; &amp;amp;&amp;amp; list2 != &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (list1.val &amp;lt; list2.val)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;//如果list1的元素值小，则把当前list1赋予current.next，注意这里相当于head.next&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            current.next = list1;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            list1 = list1.next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            current.next = list2;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            list2 = list2.next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//将current变量指向current.next，相当于head.next,当进入下一次循环给current.next赋值的时候，相当于是给head.next.next赋值了，一直这么循环到最后&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        current = current.next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//head链表的next指向未循环完成的部分&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    current.next = list1 == &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; ? list2 : list1;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//返回合并后的链表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; head.next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我刚开始发懵了，居然没理解这部分代码，因为忽略了“每次循环之后current的引用指向已经发生变化”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>整理和总结我自己的软件架构知识体系</title>
      <link>https://dodoro.chouxiangpai.com/archives/1890/</link>
      <pubDate>Mon, 03 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1890/</guid>
      <description>&lt;p&gt;最近开始整理自己实际项目中用到的和可能用到的软件架构体系，我打算每种架构都好好写文章，并且根据自己的实际情况定制出相应的架构，我还希望把他编写成一个codesmith模板，可以实现自动化代码。前面7种是具体落地的软件架构，最后1种是架构设计思想。&lt;/p&gt;
&lt;p&gt;1、极简数据库访问架构，这种架构非常适合编写一些小软件，里面只有一个SQLHelper文件，并且模仿三层架构，拥有DAL类和BLL类，最后加上一个程序入口Program。&lt;/p&gt;
&lt;p&gt;2、简单三层架构，这种架构非常适合开发小型项目，web层就是MVC或者API，并且拥有BLL层和DAL层。&lt;/p&gt;
&lt;p&gt;3、N层架构，这是一种适合大型项目的开发架构，但是更多是基于数据库构建的系统，没有基于DDD或者其他好的软件设计模式。&lt;/p&gt;
&lt;p&gt;4、基于AutoFac、依赖注入和模板模式的多层架构。&lt;/p&gt;
&lt;p&gt;5、基于ABP框架的架构，完全按照DDD设计模式开发，可能有些臃肿，但是非常适合大型软件和系统。&lt;/p&gt;
&lt;p&gt;6、基于整洁架构的框架，完全按照DDD并且结合各种软件技术。&lt;/p&gt;
&lt;p&gt;7、垂直切片架构，这是一种和传统分成架构完全不一样的架构，适合已经熟悉DDD和各种架构模式的成熟团队使用，并且适合开发微服务架构下的子系统。&lt;/p&gt;
&lt;p&gt;8、基于清晰架构的微服务软件架构设计思想，这不是具体的实现，而只是一种架构大局观，用于指导大型的软件架构设计。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]垂直切片架构 - Jimmy Bogard</title>
      <link>https://dodoro.chouxiangpai.com/archives/1875/</link>
      <pubDate>Fri, 24 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1875/</guid>
      <description>&lt;p&gt;许多年前，我们开始了一个新的长期项目，首先，我们基于洋葱架构构建了它的架构。在几个月内，这种风格开始显示出裂缝，我们从这种架构转向CQRS。随着转向CQRS，我们开始围绕垂直切片而不是层（无论是平面还是同心，它仍然是层）构建我们的架构。从那以后，在过去7到8年左右的时间里，围绕垂直切片架构构建应用程序和系统的所有方式一直是我们独有的方法，我无法想象回到分层架构方法的限制。&lt;/p&gt;
&lt;p&gt;传统的分层/洋葱/清洁架构在其目标是单体的：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/cleanarchitecture.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1875/images/cleanarchitecture.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这种架构方式问题是实际上只适用于系统中的少数典型请求。此外，我倾向于看到这些架构严重拟合，严格遵守依赖关系管理规则。在实践中，我发现这些规则很少有用，并且你开始得到很多关于真正不应该被抽象的抽象（控制器必须与必须使用存储库的服务进行对话）。&lt;/p&gt;
&lt;p&gt;相反，我想对我的系统采用量身定制的方法，我将每个请求视为如何处理其代码的独特用例。因为我的系统整齐地分解为“命令”请求和“查询”请求（HTTP-land中的GET与POST / PUT / DELETE），所以向垂直切片架构的移动使我使用了CQRS。&lt;/p&gt;
&lt;p&gt;什么是“垂直切片架构”？在这种风格中，我的架构是围绕不同的具体请求功能而构建的，通过这种方法，我们的每个垂直切片都可以自行决定如何最好地满足请求：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/Picture0031.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1875/images/Picture0031.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(对于获取订单，直接使用ORM转换为DTO，对于订单细节使用原生SQL转换为DTO，对于发票，使用基于聚合根的事件溯源，取消订单使用存储过程，这是一种微服务风格)&lt;/p&gt;
&lt;p&gt;在所谓正常的“n层”或六边形或任何架构中，通过垂直切片移除这些层障碍，并沿着变化轴聚合在一起：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/Picture0030.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1875/images/Picture0030.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在应用程序中添加或更改功能时，通常会在应用程序中涉及到许多不同的“层”。现在改为沿着切片垂直将这些功能聚合在一起。&lt;/p&gt;
&lt;p&gt;最小化切片之间的耦合，并最大化切片内的聚合。&lt;/p&gt;
&lt;p&gt;通过这种方法，大多数抽象都消失了，我们不需要任何类型的“共享”层抽象，如存储库，服务，控制器。有时我们仍需要这些工具，但我们将交叉切片逻辑共享保持在最低限度。&lt;/p&gt;
&lt;p&gt;通过这种方法，我们的每个垂直切片都可以自行决定如何最好地满足请求。&lt;/p&gt;
&lt;p&gt;“企业架构模式”一书中的旧域逻辑模式不再需要成为应用程序范围内的选择。相反，我们可以从简单的（事务脚本）开始，并简单地重构从我们在业务逻辑中看到的代码气味中出现的模式。新功能只添加代码，您不会更改共享代码并担心副作用。非常自由！&lt;/p&gt;
&lt;p&gt;但是，这种方法有一些缺点，因为它确实假设您的团队了解代码气味和重构。如果您的团队不理解“服务”在将逻辑推送到领域时自己却做得太多相关业务逻辑事情，那么这种模式可能不适合您。（服务类似餐厅服务员，服务员不应该做决定，只是协调者，当然如果你想退菜，服务员会决定说：不能退，菜已经烧了。）&lt;/p&gt;
&lt;p&gt;如果您的团队确实理解了重构，并且能够识别何时将复杂的逻辑推入域，进入DDD服务应该是什么，并且熟悉其他Fowler/Kerievsky重构技术，那么您会发现这种架构风格能够远远超过传统的分层/同心架构。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&#34;https://www.jdon.com/53095.html&#34;&gt;https://www.jdon.com/53095.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于软件的架构：微服务架构、清晰架构、整洁架构、洋葱架构、六边形架构、垂直切片架构、基于DDD分层架构、三层架构</title>
      <link>https://dodoro.chouxiangpai.com/archives/1864/</link>
      <pubDate>Fri, 24 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1864/</guid>
      <description>&lt;p&gt;这段时间一直在重构公司的项目代码，所以非常关注软件架构的设计，回顾我的架构接触史：第一次接触C#和.NET的时候就知道了三层架构和多层架构，当时被DAL和BLL等分层震惊了，原来软件设计还有那么多门道；毕业之后工作一直在使用多层架构，接着是MVC架构的出现，这种快速开发web站点的架构横扫整个行业；后来进入大厂工作，接触到了DDD；最近几年微服务架构又风声水起。&lt;/p&gt;
&lt;p&gt;整体下来我最开始用了三层架构、然后是多层架构，接着是MVC架构配合多层架构，最后到了微服务架构，现在深刻理解那句话：没有最好的架构，只有最合适的架构。&lt;/p&gt;
&lt;p&gt;网上看到有个人总结传统的架构演变之路：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/584866-20221111185736123-254492615.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1864/images/584866-20221111185736123-254492615.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三层架构&lt;/strong&gt;：这是最简单、同时也是最成熟的软件应用程序架构，它将应用程序组织到三个逻辑和物理计算层中，包括表示层或用户界面、用于处理数据的应用(业务逻辑)程序层和用于存储和管理应用程序关联数据的数据层。大型项目中很少用，但是我还是会在一些小工具和小应用里运用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;多层架构&lt;/strong&gt;：这种架构是三层架构的升级版，就是增加更多层对系统进行隔离，提高可扩展性和复用性，当然也增加了系统的复杂度。这是我刚毕业那家年用得最多的架构。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基于DDD的分层架构&lt;/strong&gt;：采用领域驱动设计的思想设计的多层架构，以领域模型为核心、使用依赖注入和控制反转等技术来实现软件，对系统进行解耦，获得最大限度地可维护性和可扩展性。这是我现在在项目中用得最多的架构。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/584866-20221109112414965-235625557-1.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1864/images/584866-20221109112414965-235625557-1.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;领域模型准确反映了业务语言，而传统数据对象除了简单setter/getter方法外，没有任何业务方法，即失血模型，那么DDD领域模型就是充血模型（业务方法定义在实体对象中）。首次清晰描述了领域驱动的分层实现并统一了业务语言。单一职责、低耦合、高内聚、业务内核沉淀。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;六边形架构&lt;/strong&gt;：让用户、程序、自动化测试和批处理脚本可以平等地驱动应用，让应用的开发和测试可以独立于其最终运行的设备和数据库。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/584866-20221107162312997-555411461.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1864/images/584866-20221107162312997-555411461.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;左侧: 代表 UI 的适配器被称为主适配器，它们发起了对应用的一些操作，端口（应用层API）和它的具体实现(controller实现)都在应用内部。右侧: 表示和后端工具链接的适配器，被称为从适配器，它们只会对主适配器的操作作出响应，端口在应用内部(业务接口)，具体实现（impl）在应用之外。&lt;/p&gt;
&lt;p&gt;**洋葱架构：**在端口和适配器架构的基础上贯彻了将领域放在应用中心，将传达机制(UI)和系统使用的基础设施(ORM、搜索引擎、第三方 API&amp;hellip;)放在外围的思路。洋葱架构在业务逻辑中加入了一些在“领域驱动设计”中被识别出来的层次。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/584866-20221107202003888-2066385310.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1864/images/584866-20221107202003888-2066385310.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;围绕独立的对象模型构建应用。内层定义接口，外层实现接口。依赖的方向指向圆心。所有的应用代码可以独立于基础设施编译和运行。职责分离更彻底，高内聚低耦合。更好的可测试性和可维护性。&lt;/p&gt;
&lt;p&gt;**整洁架构：**这套架构是站在巨人的肩膀上，把MVC、EBI、端口适配器、洋葱架构、DDD融会贯通，形成了一套落地实践方案。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/584866-20221108113426021-86566397.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1864/images/584866-20221108113426021-86566397.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;清晰架构&lt;/strong&gt;：融合 DDD、洋葱架构、整洁架构、CQRS等一系列架构的信息，这种架构很复杂，你可以根据实际情况来选择。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230324160106.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1864/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230324160106.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;微服务架构&lt;/strong&gt;：微服务架构的诞生是因为docker的兴起，因为可以更好地管理各种部署，所以可以将一个大型系统拆分部署到docker之中，每个小服务都能实现集群部署。我个人认为并非一开始就要上微服务架构，架构是不断演化的过程，哪怕是一开始就定位很大系统，可以先划分出基本的服务就行（比如登录系统、支付中心、内容服务、接口开放平台和后台系统），更细的划分可以随着业务的发展不断演化——当然前提是要一直保证代码的整洁和简洁、遵循基本的面向对象代码原则。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;垂直切片架构&lt;/strong&gt;：我是最近才接触到了这种架构，我们的项目最近用到了MediatR和AutoMapper，这两个开源项目的作者Bogard JIMMY BOGARD在自己的项目中实现了这种架构，通过反思洋葱架构和整洁架构等各种分层和抽象得出来的一种架构，作者不建议做太多的分层，因为各种以来会导致大量的问题，作者认为在微服务架构里面特别实用，当然代码也会准从DDD的设计原则。作者认为在所谓传统正常的“N层”或六边形或任何架构中，通过垂直切片移除这些层障碍，并沿着变化轴聚合在一起：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/Picture0030.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1864/images/Picture0030.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于android手机刷机的各类问题总结</title>
      <link>https://dodoro.chouxiangpai.com/archives/1856/</link>
      <pubDate>Wed, 15 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1856/</guid>
      <description>&lt;p&gt;这两周来频繁刷机，更新系统又还原系统，弄懂了很多事情，写一篇日志总结，以便以后查询使用，也希望能够看到的人能避免踩坑，也许第三部分更有价值，可以直接跳过去看。&lt;/p&gt;
&lt;h2 id=&#34;一关于刷机&#34;&gt;一、关于刷机&lt;/h2&gt;
&lt;p&gt;刷机有风险，可能会变砖。不过因为很多手机都留了最后一手：&lt;strong&gt;FASTBOOT，所以总能把手机就回来&lt;/strong&gt;。 刷机的有不少的方法：卡刷、线刷、OTA。卡刷：一般来说卡刷简单的能够理解为在内存卡中刷机，就是进入Recovery中刷入系统；线刷：线刷事实上能够简单的理解为用USB线刷机；OTA：仅仅要在系统中在线升级就能够成功刷机。&lt;/p&gt;
&lt;p&gt;刷机之前需要解锁，一般开放点的厂商都会给相应的解锁工具和权限，只要愿意折腾都可以完成解锁。其实解锁和刷机就是为了获得root权限，这样可以对系统做更大的定制，当然也降低手机的安全性。&lt;/p&gt;
&lt;p&gt;刷机要根据自己的手机型号找到相应的刷机包（也就是ROM），要注意是卡刷还是线刷，卡刷就是拷贝到手机卡里刷机，线刷就是用电脑的工具通过手机数据线刷机。&lt;/p&gt;
&lt;p&gt;小米的MIUI系统有大量的刷机包，我一直都喜欢用欧版，地址是：&lt;a href=&#34;https://xiaomi.eu&#34;&gt;https://xiaomi.eu&lt;/a&gt; 内网地址是：&lt;a href=&#34;https://sourceforge.net/projects/xiaomi-eu-multilang-miui-roms/&#34;&gt;https://sourceforge.net/projects/xiaomi-eu-multilang-miui-roms/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;二获得root权限&#34;&gt;二、获得root权限&lt;/h2&gt;
&lt;p&gt;我用的是小米手机，有两种方法，这里从别的地方搬过来，我只把重要的步骤留下，并且指出可能的坑点。&lt;/p&gt;
&lt;h4 id=&#34;1通过替换bootimg方式安装magisk获取root权限指南&#34;&gt;1、通过替换boot.img方式安装Magisk获取Root权限指南&lt;/h4&gt;
&lt;p&gt;来源原文：&lt;a href=&#34;https://miuiver.com/install-magisk-for-xiaomi/&#34;&gt;https://miuiver.com/install-magisk-for-xiaomi/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;现在获取手机 Root 主要通过安装 Magisk 实现，这篇文章将以新手视角介绍如何安装使用 Magisk。&lt;/p&gt;
&lt;p&gt;准备工作：安装 Magisk 过程中需要用到 fastboot 命令，需要刷写手机 boot 或 Recovery 分区，&lt;strong&gt;请确保手机已完成 BL 解锁，不然无法进行&lt;/strong&gt;。正常情况下不会丢数据，但是建议都先外置备份手机数据再操作。&lt;/p&gt;
&lt;p&gt;下载Magisk 地址 &lt;a href=&#34;https://github.com/topjohnwu/Magisk/releases&#34;&gt;https://github.com/topjohnwu/Magisk/releases&lt;/a&gt; （选择下载最新版，然后安装到手机）。&lt;/p&gt;
&lt;p&gt;提取相应文件：查看手机上运行的系统版本是多少，下载对应系统版本刷机包，从里面提取相应文件（请见下面说明）。如果之前 Ramdisk 查询结果为“是”，请提取 boot.img 文件如果之前 Ramdisk 查询结果为“否”，请提取 recovery.img 文件。&lt;/p&gt;
&lt;p&gt;文件提取方法：如果系统版本有线刷包，可以直接解压提取；如果系统版本只有卡刷包，需要从解压的 &lt;a href=&#34;https://miuiver.com/extracting-boot-img/&#34; title=&#34; payload.bin 文件里提取&#34;&gt;payload.bin 文件里提取&lt;/a&gt;（老机型卡刷包可以直接提取），将提取到的文件复制到手机上。&lt;/p&gt;
&lt;p&gt;生成修补文件：手机打开 Magisk 软件，点击 Magisk 卡片中的“安装”按钮。点击“选择并修补一个文件”，选择之前提取到的 boot.img 或 recovery.img 文件，点击“开始”，然后等待生成修补文件。据 Magisk 文档指出，小米有个别机型 Ramdisk 结果可能不能准确检测。如果修补 recovery.img 文件失败，可以尝试用 boot.img 修补，后面安装也遵循 Ramdisk 结果为“是”的做法。将生成的修补文件复制到电脑上（修补文件默认保存在手机内部存储 Download 目录）。&lt;/p&gt;
&lt;p&gt;刷写修补文件：将手机关机，长按音量下键+电源键进入 FASTBOOT 模式，用数据线连接到电脑。电脑打开存放修补文件的文件夹，按住键盘 Shift 键，同时鼠标右键点击文件夹空白处，在右键菜单点击“在此处打开 Powershell 窗口”，然后运行下面刷写命令（命令中的文件名请先自行修改）。如果之前修补 boot.img 文件请用这个命令：.\fastboot flash boot magisk_patched-25200_pU6ZV.img；如果之前修补 recovery.img。文件请用这个命令：.\fastboot flash recovery magisk_patched-25200_pU6ZV.img。刷写完成后用下面命令重启手机：.\fastboot reboot&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET7下string的改进</title>
      <link>https://dodoro.chouxiangpai.com/archives/1830/</link>
      <pubDate>Thu, 12 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1830/</guid>
      <description>&lt;p&gt;string是开发过程中，使用频度最高的类型之一，所以在构建类型时作了很多处理，如“不可变性”，“保留性”等特点。string的常量是在&amp;quot;&amp;ldquo;引号中进行赋值的。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; str1 = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;这是一段文字&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(str1);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;为了字符串的格式化，引入了$&amp;ldquo;&amp;ldquo;定义方式，这样就可以在字符串中用{}来标注格式化的内容了。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; str2 = &lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;时间：{DateTime.Now}&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(str2);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//输出结果是：时间：1/6/2023 15:37:13&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; str2_1 = &lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;时间：{DateTime.Now:yyyy-MM-dd}&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(str2_1);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//输出结果是：时间：2023-01-06&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;为了解决字符串内容的换行，引定入@&amp;quot;&amp;quot;，来定义有换行的字符串，比如下面的一条SQL查询，可以按格式化后的样式来定义。$和@可以混用，不分先后。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; str3 = &lt;span style=&#34;color:#e6db74&#34;&gt;@&amp;#34;SELECT ID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    ,Question
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    ,Score
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    ,QuestionTypeID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    ,SubjectTypeID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    FROM Questions&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(str3);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; str3_1 = &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;SELECT ID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    ,Question
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    ,Score
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    ,QuestionTypeID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    ,SubjectTypeID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    FROM Questions WHERE Score&amp;gt;{10}&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(str3_1);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其实原始字符串还解决了一个问题，就是字符串中有&amp;quot;的问题，以前需要有转义字符来实现，现在原始字符串都搞定了。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\&amp;#34;a\&amp;#34; 是小写的&amp;#34;&lt;/span&gt;);&lt;span style=&#34;color:#75715e&#34;&gt;//通过\来转义&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(&lt;span style=&#34;color:#e6db74&#34;&gt;@&amp;#34;&amp;#34;&amp;#34;a&amp;#34;&amp;#34; 是小写的&amp;#34;&lt;/span&gt;);&lt;span style=&#34;color:#75715e&#34;&gt;//前缀是@时，通过&amp;#34;转义&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最佳demo是json字符串的定义，用原始字符串的方式定义json字符串，最合适不过了。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; jsonString = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;irstName&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;John&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;astName&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Smith&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ex&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;male&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ge&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;25&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ddress&amp;#34;&lt;/span&gt;: 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                         &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;treetAddress&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;21 2nd Street&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                         &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ity&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;New York&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                         &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tate&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NY&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                         &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ostalCode&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10021&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(jsonString)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过下图，看到的json原始字符串，一目了然：&lt;/p&gt;</description>
    </item>
    <item>
      <title>武鸣要通高铁了：南宁北站封顶</title>
      <link>https://dodoro.chouxiangpai.com/archives/1823/</link>
      <pubDate>Thu, 12 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1823/</guid>
      <description>&lt;p&gt;这两天桂南高铁终点站南宁北站封顶，大概率武鸣今年要通高铁了，很难想象这是县城通的第一条铁路，之前一直没有任何列车通过武鸣。看新闻说以后从南宁北站始发的有：南宁北到广州、南宁北到深圳，南宁北到福州、厦门，南宁北到凭祥，那么无论以后我们在北边还是去了南边，回家都会方便很多。&lt;/p&gt;
&lt;p&gt;[caption id=&amp;ldquo;attachment_1824&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;1417&amp;rdquo;]&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230112093237.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1823/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230112093237.png&#34;&gt;&lt;/a&gt; 南宁北站：汉语标题的左边是壮语发音，右边是英语。[/caption]&lt;/p&gt;
&lt;p&gt;这条贵阳到南宁的高铁是广西第一条时速350公里的高铁，广西的交通从来都不是优先出海，而是往山区延伸。想起小时候经常听说轰轰烈烈的南昆铁路，长大了才知道这是为他人做嫁衣，这次也差不多。&lt;/p&gt;
&lt;p&gt;改开几十年，西南几个“难兄难弟”，一直都只能给珠三角和东部输送廉价劳力，现在经济下行后才开始说要共同富裕，但是只有把社会资源扩容，把饼做得更大，才有可能解决发展不均衡。&lt;/p&gt;</description>
    </item>
    <item>
      <title>当你在浏览器地址栏输入一个网址的时候，会发生什么?</title>
      <link>https://dodoro.chouxiangpai.com/archives/1801/</link>
      <pubDate>Tue, 10 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1801/</guid>
      <description>&lt;p&gt;作为一个软件开发者，你一定会对网络应用如何工作有一个完整的层次化的认知，同样这里也包括这些应用所用到的技术：像浏览器，HTTP，HTML，网络服务器，需求处理等等。&lt;/p&gt;
&lt;p&gt;本文将更深入的研究当你输入一个网址的时候，后台到底发生了一件件什么样的事&lt;/p&gt;
&lt;h2 id=&#34;1-首先你得在浏览器里输入要网址&#34;&gt;1 首先，你得在浏览器里输入要网址:&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;images/1.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1801/images/1.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-浏览器查找域名的ip地址&#34;&gt;2 浏览器查找域名的IP地址&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;images/image13.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1801/images/image13.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下：&lt;/p&gt;
&lt;p&gt;浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是，操作系统没有告诉浏览器储存DNS记录的时间，这样不同浏览器会储存个自固定的一个时间（2分钟到30分钟不等）。&lt;/p&gt;
&lt;p&gt;系统缓存 – 如果在浏览器缓存里没有找到需要的记录，浏览器会做一个系统调用（windows里是gethostbyname）。这样便可获得系统缓存中的记录。&lt;/p&gt;
&lt;p&gt;路由器缓存 – 接着，前面的查询请求发向路由器，它一般会有自己的DNS缓存。 ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。&lt;/p&gt;
&lt;p&gt;递归搜索 – 你的ISP的DNS服务器从跟域名服务器开始进行递归搜索，从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名，所以到顶级服务器的匹配过程不是那么必要了。DNS递归查找如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/500pxAn_example_of_theoretical_DNS_recursion_svg.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1801/images/500pxAn_example_of_theoretical_DNS_recursion_svg.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;DNS有一点令人担忧，这就是像wikipedia.org 或者 facebook.com这样的整个域名看上去只是对应一个单独的IP地址。还好，有几种方法可以消除这个瓶颈：&lt;/p&gt;
&lt;p&gt;循环 DNS 是DNS查找时返回多个IP时的解决方案。举例来说，Facebook.com实际上就对应了四个IP地址。&lt;/p&gt;
&lt;p&gt;负载平衡器 是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。&lt;/p&gt;
&lt;p&gt;地理 DNS 根据用户所处的地理位置，通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态，但映射静态内容的话非常好。&lt;/p&gt;
&lt;p&gt;Anycast 是一个IP地址映射多个物理主机的路由技术。 美中不足，Anycast与TCP协议适应的不是很好，所以很少应用在那些方案中。大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。&lt;/p&gt;
&lt;h2 id=&#34;3-浏览器给web服务器发送一个http请求&#34;&gt;3 浏览器给web服务器发送一个HTTP请求&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;images/image22.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1801/images/image22.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;因为像Facebook主页这样的动态页面，打开后在浏览器缓存中很快甚至马上就会过期，毫无疑问他们不能从中读取。&lt;/p&gt;
&lt;p&gt;所以，浏览器将把一下请求发送到Facebook所在的服务器：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GET http:&lt;span style=&#34;color:#75715e&#34;&gt;//facebook.com/ HTTP/1.1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; User-Agent: Mozilla/&lt;span style=&#34;color:#ae81ff&#34;&gt;4.0&lt;/span&gt; (compatible; MSIE &lt;span style=&#34;color:#ae81ff&#34;&gt;8.0&lt;/span&gt;; Windows NT &lt;span style=&#34;color:#ae81ff&#34;&gt;6.1&lt;/span&gt;; WOW64; [...]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Accept-Encoding: gzip, deflate
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Connection: Keep-Alive
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Host: facebook.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Cookie: datr=&lt;span style=&#34;color:#ae81ff&#34;&gt;1265876274&lt;/span&gt;-[...]; locale=en_US; lsd=WW[...]; c_user=&lt;span style=&#34;color:#ae81ff&#34;&gt;2101&lt;/span&gt;[...]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;GET 这个请求定义了要读取的URL： “&lt;a href=&#34;http://facebook.com/&#34;&gt;http://facebook.com/&lt;/a&gt;”。 浏览器自身定义 (User-Agent 头)， 和它希望接受什么类型的相应 (Accept and Accept-Encoding 头). Connection头要求服务器为了后边的请求不要关闭TCP连接。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]NPM和webpack的关系</title>
      <link>https://dodoro.chouxiangpai.com/archives/1798/</link>
      <pubDate>Mon, 02 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1798/</guid>
      <description>&lt;p&gt;入门前端的坑也很久了，以前很多大小项目，前端都是传统式开发，一直在重复造轮子；接触VUE后，对vue-cli有了解后，仅仅知道vue-cli是一个vue项目的脚手架，可以快速的构建一个vue的基于npm的模块化项目，vue内部的打包机制其实还是借助webpack；但是对webpack\npm\node\nodejs这几个在前端模块化中的高频词总是傻傻分不清，不知道他们之间的具体关系，今天花了些功夫查阅了网上大神的回答和官方教程给出的解释写一篇小白文，总结一下这几个概念或者说高频词汇之间的关系&lt;/p&gt;
&lt;h2 id=&#34;what-is-webpack&#34;&gt;what is webpack?&lt;/h2&gt;
&lt;p&gt;Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析，然后将这些模块按照指定的规则生成对应的静态资源。即WebPack可以看做是模块打包机：它做的事情是，分析你的项目结构，找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言（Scss，TypeScript等），并将其转换和打包为合适的格式供浏览器使用。&lt;/p&gt;
&lt;h2 id=&#34;webpack的核心作用&#34;&gt;webpack的核心作用&lt;/h2&gt;
&lt;p&gt;模块化开发中，我们会编写大量模块，如果不打包就上线，那么页面加载或交互时，将会发起大量请求。为了性能优化，需要使用webpack这样的打包器对模块进行打包整合，以减少请求数。就像简单的vue项目，所有组件最终都将被打包到一个app.js中。 相较于无差别打包依赖模块的传统打包器，webpack的核心优势在于它从入口文件出发，递归构建依赖关系图。通过这样的依赖梳理，webpack打包出的bundle不会包含重复或未使用的模块，实现了按需打包，极大的减少了冗余。&lt;/p&gt;
&lt;p&gt;webpack是一个工具，这个工具可以帮你处理好各个包/模块之间的依赖关系（modules with dependencies），并将这些复杂依赖关系的静态文件打包成一个或很少的静态文件，提供给浏览器访问使用；除此之外，webpack因为可以提高兼容性，可以将一些浏览器尚不支持的新特性转换为可以支持格式，进而减少由新特性带来的浏览器的兼容性问题。&lt;/p&gt;
&lt;p&gt;好，我们通过介绍，我们有个概念，webpack是一个打包工具，可以帮你把你的项目这里的项目其实就是指通过模块化开发的项目 打包为简洁版的浏览器可识别的静态资源。&lt;/p&gt;
&lt;h2 id=&#34;what-is-npm&#34;&gt;what is npm?&lt;/h2&gt;
&lt;p&gt;介绍了webpack，我们可能会疑问，我的JS，CSS，HTML文件分开写，挺好的呀，为什么要使用webpack工具，进行复杂的各项配置。在传统前端开发模式下，我们确实是按照JS/CSS/HTML文件分开写的模式就可以，但是随着前端的发展，社区的壮大，各种前端的库和框架层出不穷，我们项目中可能会使用很多额外的库，如何有效管理这些引入的库文件是一个大问题，而且我们知道基于在HTML中使用script引入的方式，有两个弊端，一个是会重复引入，二是当库文件数量很多时管理成为一个大难题。面对这样的局面，为了简化开发的复杂度，前端社区涌现了很多实践方法。模块化就是其中一项成功实践，而npm就是这样在社区 其实就是node社区中产生的。&lt;/p&gt;
&lt;p&gt;npm 由三个独立的部分组成：网站、注册表（registry）、命令行工具 (CLI)。&lt;/p&gt;
&lt;p&gt;网站 是开发者查找包（package）、设置参数以及管理 npm 使用体验的主要途径。 注册表 是一个巨大的数据库，保存了每个包（package）的信息。CLI 通过命令行或终端运行。开发者通过 CLI 与 npm 打交道。&lt;/p&gt;
&lt;p&gt;一般来说提起npm有两个含义，一个是说npm官方网站，一个就是说npm包管理工具。npm社区或官网是一个巨大的Node生态系统，社区成员可以随意发布和安装npm生态中的包，也就是不用在重复造轮子了，别人造好了，你直接安装到你的项目中就可以使用，但是因为前面说了，当包引入数量很多时管理就成为了一个问题，这个就是npm为开发者行了方便之处，npm已经为你做好了依赖和版本的控制，也就是说使用npm可以让你从繁杂的依赖安装和版本冲突中解脱出来，进而关注你的业务而不是库的管理。&lt;/p&gt;
&lt;p&gt;webpack就是将你从npm中安装的包打包成更小的浏览器可读的静态资源，这里需要注意的是，webpack只是一个前端的打包工具，打包的是静态资源，和后台没有关系，虽然webpack依赖于node环境。&lt;/p&gt;
&lt;h2 id=&#34;what-is-node-or-nodejs&#34;&gt;what is node or nodejs？&lt;/h2&gt;
&lt;p&gt;其实node和nodejs两个概念没有太大差别，我个人认为唯一的区别就是，人们说起node的时候语境更多的是再说node环境，而说nodejs时更多的是在说node是一门可以提供后端能力的技术。本质上来说，node就是nodejs，nodejs就是node&lt;/p&gt;
&lt;p&gt;简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。Node.js是一个事件驱动I/O服务端JavaScript环境，基于Google的V8引擎，V8引擎执行Javascript的速度非常快，性能非常好。&lt;/p&gt;
&lt;p&gt;node环境基于V8引擎提供了一种可以让JS代码跑在后端的能力，这就是node。其实这里的node本身和我们这篇讲的前端模块化没啥关系。但是因为npm是产生与node社区，node中也是通过npm来加载模块的，所以有必要说一下他们之间的关系。&lt;/p&gt;
&lt;p&gt;npm 是 Node.js 官方提供的包管理工具，他已经成了 Node.js 包的标准发布平台，用于 Node.js 包的发布、传播、依赖控制。&lt;/p&gt;
&lt;h2 id=&#34;webpack-npm-node之间关系&#34;&gt;webpack npm node之间关系？&lt;/h2&gt;
&lt;p&gt;webpack是npm生态中的一个模块，我们可以通过全局安装webpack来使用webpack对项目进行打包；&lt;/p&gt;
&lt;p&gt;webpack的运行依赖于node的环境，没有node是不能打包的，但是webpack打包后的项目本身只是前端静态资源和后台没有关系，也就是说不依赖与node，只要有后台能力的都可以部署项目。&lt;/p&gt;
&lt;p&gt;npm是于Node社区中产生的，是nodejs的官方包管理工具，当你下载安装好node的时候，npm cli 就自动安装好了。&lt;/p&gt;
&lt;p&gt;正是因为npm的包管理，使得项目可以模块化的开发，而模块化的开发带来的这些改进确实大大的提高了我们的开发效率，但是利用它们开发的文件往往需要进行额外的处理才能让浏览器识别，而手动处理又是非常繁琐的，这就是webpack工具存在的意义&lt;/p&gt;
&lt;p&gt;原文地址：&lt;a href=&#34;https://blog.csdn.net/AngelLover2017/article/details/84801673&#34;&gt;https://blog.csdn.net/AngelLover2017/article/details/84801673&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>告别2022：被尘埃痛击，被时光血洗</title>
      <link>https://dodoro.chouxiangpai.com/archives/1992/</link>
      <pubDate>Sun, 01 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1992/</guid>
      <description>&lt;p&gt;原作者：刘原 2023-01-01 10:02&lt;/p&gt;
&lt;p&gt;这是2022年的最后一缕斜阳，它穿越云翳和树梢，穿越山梁和旷野，呼啸而来，打在你的脸上，也打在我的屁股上。&lt;/p&gt;
&lt;p&gt;都不许喊疼。&lt;/p&gt;
&lt;p&gt;每到岁末，我都会在这一天和读者们共同回望即将远逝的这一年。谈不上新年献词，因为我的底色总是苍凉，从无昂扬喜庆，倘在先前的报馆，那都是要被毙的稿，除非那天恰好是我自己值班签版可以徇私。我把它归类为：民间记忆。&lt;/p&gt;
&lt;p&gt;站在这个时间门槛上，我只望见了两个字：永逝。所有的故事都已终结，所有的脸孔都已凝固，悉数留在了2022，万物在这一年展露过它们应有的容颜，然后，被历史的书页重重覆盖。&lt;/p&gt;
&lt;p&gt;那么，2022的记忆该从哪一截起始呢？我已记不清晰，可能是从丰县的一段锁链，也可能是从唐山的一家烧烤店。大家都记得那会满世界刷屏的场景。&lt;/p&gt;
&lt;p&gt;我从未见过亿万网民如此齐心。&lt;/p&gt;
&lt;p&gt;事后我思忖过，拐卖人口、伤害女性，固然是极其恶劣的，但它是多年来的沉疴，类似案例屡见不鲜，那么，为何这两桩恶行突然点爆了全民的怒火？&lt;/p&gt;
&lt;p&gt;一是以短视频为主力的网络传播，与以往的文字图片传统形式相比，在视觉和情感上的爆破力是无与伦比的，再高超的文字记者，描述出的场景都远不如那几十秒视频有冲击力。&lt;/p&gt;
&lt;p&gt;二是人民心中有块垒。经过几年疫情的折磨，大家对苦难有了更多的共情，谁无母亲姐妹妻女？这样的惨案已经不仅仅是女性群体的悲剧，它更是属于全体国民的悲剧。&lt;/p&gt;
&lt;p&gt;三是每个人都会思索：我们生而为人，有哪些与生俱来的权利？如果被拘禁、被伤害、被殴打可以被漠视，被掩盖，谁敢保证下一个受害者不会是自己和家人？&lt;/p&gt;
&lt;p&gt;在这两次刷屏之下，冬奥会并没有收到预期中的热度。当然也正常，中国的冰雪运动普及还很有限，即便我这样曾经狂热的体育爱好者，几十年看的惟一冰雪项目也只有短道速滑。我甚至不记得谷爱凌在哪些项目上拿了金牌，只知道她多年来一到暑假就飞回北京参加海淀区的奥数班。&lt;/p&gt;
&lt;p&gt;冬奥会刚结束，俄乌战争开始了。&lt;/p&gt;
&lt;p&gt;这是2022年里，全世界最刻骨铭心的一件事。&lt;/p&gt;
&lt;p&gt;当我在2月24日中午醒来时，手机里有无数条朋友们发的信息。我一睁眼就吓得激灵一下，大意是说俄军几十万大军分几路攻入乌克兰，基辅陷落，乌三军已经悉数被摧毁……&lt;/p&gt;
&lt;p&gt;这样的消息，我只信了半天，是的，就开战之初兵荒马乱的那半天。然后，我再没信过那些打鸡血的简中自媒体，连看都不去看。&lt;/p&gt;
&lt;p&gt;这是一场局部战争，但也是一场剧烈改变世界格局的战争。它的烈度和席卷范围，远不如20世纪的一战和二战，但它事实上起到了三战的效能，对1945之后、冷战落幕之后的国际秩序进行了重构。&lt;/p&gt;
&lt;p&gt;一切都因为一个叫泽连斯基的人。&lt;/p&gt;
&lt;p&gt;没有人在今年的早春二月看好他，包括他的国民，包括欧美国家。作为“95街区”（大概类似于乌克兰版的开心麻花）的创始人，《人民公仆》的主演，泽连斯基能唱会跳，演技出色，若说他是各国元首中表演造诣最深的人，恐不为过。即使考虑到罗纳德里根的存在，他至少也是TOP2。&lt;/p&gt;
&lt;p&gt;但在大兵压境时，没人指望一个喜剧演员出身的总统能力挽狂澜，美国甚至为他设计了流亡路线，欧洲各国也打算旁观乌克兰亡国，然后象征性发个谴责声明算球。&lt;/p&gt;
&lt;p&gt;但是，这个小个子演员爆发了。他告诉国民和世界：他就在基辅，哪里都不去，他的家人也同在基辅，他随时准备死在那里。&lt;/p&gt;
&lt;p&gt;从国家被入侵的那一天起，这个男人就没刮干净过胡子，没穿过西装。他永远胡子拉碴，穿着浅绿的军用T恤，在烛光里的防空洞，在残垣断壁的街道，在被血洗过的村庄，不停地穿行，不停地拍着视频，告诉他的人民——他从未离开，他始终在抵抗。&lt;/p&gt;
&lt;p&gt;这不是演技。出入于血与火之间，一秒就可能被炮弹炸死。没人会拿自己的性命去演。他就是无畏，他就是骨头硬。&lt;/p&gt;
&lt;p&gt;说来也是滑稽，世上多少所谓强人，平素大喇喇上山打虎下海捉鳖，装旷世伟人，真碰上事了就大小便失禁。真正泰山崩于前而色不变的，却往往是人们嘴里嘲讽的所谓戏子。&lt;/p&gt;
&lt;p&gt;80年代，刚遇刺不久的里根，在西柏林的一次公开集会上演讲，现场的一个氢气球爆炸，声音像极了枪响。正在演讲的他头都不抬，只说了一句：Miss me（没打中）。连缩起头的条件反射都没有，这才叫无畏。&lt;/p&gt;
&lt;p&gt;里根以其机敏、睿智、勇气，以一己之力拖垮了苏联帝国。撒切尔夫人曾评价他：一枪不开就赢了冷战。&lt;/p&gt;
&lt;p&gt;而泽连斯基以视死如归的气概，正在让俄罗斯帝国失血。俄罗斯这个国家，大概是命犯演艺圈，注定要被两个演员终结国运。&lt;/p&gt;
&lt;p&gt;起初欧洲是混沌而绥靖的，除了鲜明而锋利的金毛，以及迟缓但坚定的老拜，并没有太多国家伸出援手，天知道你是不是亡国之君。但当乌克兰挺过最艰难的前几天，当泽连斯基一次次向世界发布他和他的人民誓死抵抗的宣言之后，情势逆转了。人类的勇气、良知和同情被瞬间唤醒，冬夜里微弱的摇曳之烛迅速变成巨大火把，几乎所有民选国家的民众都在督促本国政要支援乌克兰，这成了最大的政治正确。&lt;/p&gt;
&lt;p&gt;为了挺乌克兰，波兰德国等接纳了大批乌克兰难民，东欧尤其波罗的海一众小国毫无畏惧地拿出了压箱底的军火，从北美到亚洲甚至非洲，无数国家从军援到经援，都在慷慨支援乌克兰。整个欧洲甚至愿意忍受缺气的寒冬，也要制裁发动战争的国家。&lt;/p&gt;
&lt;p&gt;不要污蔑乌克兰在打什么代理人战争。联大每次投票，大部分国家都支持他们，他们又是哪一国的代理人？自己的家园被夷为废墟，自己的亲人死于非命流离失所，而自己拿起枪加入卫国战争，这是最堂堂正正、最天经地义的抵抗。你若连这都能抹杀，那你一定也会抹杀我们祖辈浴血奋战的伟大的抗日战争，那叫汉奸。&lt;/p&gt;
&lt;p&gt;在冬残奥会上，特别感人的一幕是：许多国家的运动员在临冲线时，默契地放缓了脚步，让乌克兰运动员夺金。那几天，乌克兰国旗一次次在冬残奥会赛场升起，甚至一次升起三面。人们想让战火中的乌克兰人民知道，世界的道义和慈悲站在他们这边，他们不是孤独的。&lt;/p&gt;
&lt;p&gt;在这场战争中，除了泽连斯基，我还记住了三张脸：&lt;/p&gt;
&lt;p&gt;一个11岁的男孩哈桑，十年前，在俄军的空袭下，寡母抱着襁褓中的他逃离了叙利亚回到乌克兰，十年后，俄军炮击扎波罗热核电站，住在这个城市的母亲要照顾年迈的外婆，他自己背着一个包，拿着一个塑料袋和一本护照，独自坐了近千公里的火车，去斯洛伐克投奔哥哥姐姐。他的手臂上写着电话号码。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1992/images/image-1717485524035.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;这孩子和我家流氓兔一样大。他羞怯，胆小，很快就吃完了身上带的一点食物，平素连夏令营都不敢去的他，不安地趴在车窗边，向着未知的异国孤身逃难。乌克兰的知名女狙击手埃梅拉尔德，在深秋的哈尔科夫前线阵地，与同为军人的新郎举行了婚礼。乌军的一名将军是他们的证婚人。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1992/images/image-1717485538229.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;当这场战争结束时，或许他们已经殉国，或许已经伤残。但他们只想告诉这个世界：他们来过，爱过，对得起这片向日葵盛开的大地，对得起2022年的秋天。&lt;/p&gt;
&lt;p&gt;而最令我动容的，是下面这张照片，我特地选它作为本文的题图。 马里乌波尔钢铁厂的一名守军，在日复一日绞肉机式的战斗间隙，贪婪地沐浴着珍贵的阳光。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1992/images/image-1717485549664.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;这是一群绝望的孤军，每天都在倚靠钢铁建筑进行巷战，缺乏补给，没有援军。像四行仓库的谢晋元，像衡阳保卫战的方先觉，一无所有，除了必死之心。&lt;/p&gt;
&lt;p&gt;生活在黑暗里的人们，心里一定要有光。我们来到这世界，不是为了当一只鼹鼠。阳光与朝露，是造物主赐予我们的，我们配得上每一束光。&lt;/p&gt;
&lt;p&gt;不是每个人都能望见2023年的霞光。英国女王、戈尔巴乔夫，这些曾在收音机里陪伴过我们童年的名字都远逝了，他们曾经参与的历史，也变成了书籍中的铅字。而未来的史，由现在活着的人继续书写。&lt;/p&gt;
&lt;p&gt;9月8日深夜，我用手机看BBC的女王病危现场画面，镜头在伦敦白金汉宫和苏格兰巴尔莫勒尔城堡之间切换，像是一场死亡直播。我突然看到两辆轿车和一辆军用吉普驶出城堡大门，扬长而去，当时就发了个朋友圈说：女王似已殁，那几辆车应该是去操办后事了。&lt;/p&gt;
&lt;p&gt;随后的讣告验证了我的直觉，女王正是那个时间点去世的。这几年，见的缟素太多，我对死亡的嗅觉也变得敏锐多了。&lt;/p&gt;
&lt;p&gt;但11月26日，新疆阿勒泰的7名福建籍工人没能嗅到死亡的气息。那天傍晚，他们乘车去4公里外的小镇准备转车返乡，没想到车刚开出500米就陷入暴雪中，于是，他们决定下车，徒步走回工地。没想到，在能见度仅3米的暴风雪中，他们竟然迷路了，连500米外的工地都没能找到，活活冻死。 他们倒下的地方距工地300米，这是阳世与阴间的距离。&lt;/p&gt;
&lt;p&gt;而今年三月，一架东航737客机在我曾经的故乡梧州上空一头栽下。8000米，这也是从阳世到阴间的距离。而我们，至今不知事故原因。&lt;/p&gt;
&lt;p&gt;破碎的脸太多，我们无法记全。&lt;/p&gt;
&lt;p&gt;当一个三岁的小男孩在某场悲剧中罹难后，我看到一句令人心碎的评论：他生于疫情，死于疫情，就这样过了一生，他很乖，只是从未被这人间爱过。 不说了，说多了难过。&lt;/p&gt;
&lt;p&gt;在这个寒冬，世界杯，或许是2022年惟一能慰藉我们的幸福。&lt;/p&gt;
&lt;p&gt;这届世界杯的精彩度，是几十年来罕见的。不仅仅因为这是梅西C罗莫德里奇内马尔莱万一众诸神的黄昏，也因为大疫三年，人类受够了，人类太需要一场血脉贲张的赛事来涤荡几年的悲伤和郁结。&lt;/p&gt;
&lt;p&gt;结局亦完美。&lt;/p&gt;
&lt;p&gt;曾经的侏儒症患者梅西，在经历了无数人生悲喜之后，登顶王座。命运终于给了那个最努力最有天赋的孩子最好的馈赠，这是生命的大和谐，哦不，大圆满。&lt;/p&gt;
&lt;p&gt;他终于成了贝利、马拉多纳之后的第三位球王。&lt;/p&gt;
&lt;p&gt;有人觉得梅西缺乏马拉多纳的霸气，配不上球王称号。在他们眼中，在那不勒斯带着全队去嫖娼、跟女理发师造个私生子、用气枪射击记者、服用麻黄素的迭戈才叫王者气概，而梅西太乖，不像定海神针的样子。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1992/images/image-1717485579225.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;但我喜欢梅西。他刻苦、干净、忠诚、慈悲，从未忘记含辛茹苦培养他的天堂里的外婆，会给遥远中国一个热爱足球的穷孩子寄来礼物，这是典型的在欧洲长大并接受欧洲文明的孩子。而马拉多纳，虽然天赋异禀，但至死都是南美街头烂仔底色，跟不止一个独裁者勾肩搭背。&lt;/p&gt;
&lt;p&gt;我当然更喜欢梅西。他走在人间正道上，代无数平凡人实现了一个卑微而伟大的梦想。&lt;/p&gt;
&lt;p&gt;如今谈及梦想，近乎奢侈。活着就是最大的梦想。&lt;/p&gt;
&lt;p&gt;一位老友的女儿，从海外留学归来，在早春的沪上，曾经匮乏得桌上只剩一根胡萝卜。解禁之后，她直接买了一张机票，再次留洋。&lt;/p&gt;
&lt;p&gt;在2022的最后一个月，我应约给媒体写一篇盘点稿。我忽然好奇，在同样的这一年，不同国度的人们是如何度过的？于是，我和亚洲、欧洲、北美洲的朋友们，在冬夜里，漫无边际地聊天。&lt;/p&gt;
&lt;p&gt;我刨根问底地询问他们，印象最深刻、灵魂最颤栗的事情有哪些。&lt;/p&gt;
&lt;p&gt;身在清迈的朋友边跟我聊，边收拾行李准备翌日去柬埔寨旅游。他告诉我，泰国有几个地方让他最是感慨：国民极注重卫生，即便是贫困乡村的农户，厕所里都没有苍蝇和臭味；当地人从不吵架，更不会拳脚相见，世道恬静，人民温和；他丢了几次钱包手机，每次都能找回来，别的朋友亦如此，此地不偷不抢不骗，甚至不捡，真正的路不拾遗。&lt;/p&gt;
&lt;p&gt;初到多伦多的朋友遇到大雪封门，坐在壁炉边和我聊枫叶国的教育。老师永远不会因成绩优劣歧视任何孩子，智障学生有专人辅导，残疾学生有专车接送。移民局官员主动帮她联系了女儿就读的学校，说有困难告诉我们，许多问题可以由政府出钱解决，因为有你们这些市民，才令我们政府的存在有意义；校长对她说，不要焦虑地去报课外培训班，所有学业上的事都归学校负责，你不用操心；老师给家长发调查问卷，标题特别温暖：“每一个孩子都重要”。朋友的女儿上小学六年级，稚嫩的她冒出的一句话，让我惊愕而震撼——&lt;/p&gt;
&lt;p&gt;“在加拿大，孩子们才是这个国家最大的软肋。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们的第四个五年计划</title>
      <link>https://dodoro.chouxiangpai.com/archives/1794/</link>
      <pubDate>Sun, 01 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1794/</guid>
      <description>&lt;p&gt;今天是元旦，过去的一年经历了过山车式的体验，国内的疫情管制终于放开，虽然未来还有很多不确定，但是大方向完全正确。&lt;/p&gt;
&lt;p&gt;我们全家去年也收获了很多，展望未来，小熊说要让我想想未来五年的计划，我总结了一下，所有的计划可以归为在AU：事业有成、学业有成、买房定居。&lt;/p&gt;
&lt;p&gt;这也是我们对新年的愿望，我们必将实现，我们必须实现。&lt;/p&gt;</description>
    </item>
    <item>
      <title>终于下签了！！！</title>
      <link>https://dodoro.chouxiangpai.com/archives/1789/</link>
      <pubDate>Tue, 20 Dec 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1789/</guid>
      <description>&lt;p&gt;经过三年的漫长等待，澳洲移民局终于给我们发签了！！！&lt;/p&gt;
&lt;p&gt;我们于2019年11月提交PR签证申请，年底新冠疫情笼罩国内，接着扩散到全世界，各国关闭边境，澳洲也经历了封锁和开放，今年年初工党上台，承诺加快签证审批，我们终于迎来曙光。&lt;/p&gt;
&lt;p&gt;两个月前收到co的邮件，要求补充体检和无犯罪证明，现在终于正式获得了PR，想起第一次有migration的念头已经是五年前，小熊说我们的五年计划似乎都实现了。&lt;/p&gt;
&lt;p&gt;世界杯揭幕战的时候，我脑子里闪过南非世界杯和巴西世界杯等等时刻，那时候我们全国、全球随便跑，当时突然觉得有一种想哭的感觉，这个世界原本不应该如此封闭，人不应该被困起来，那一晚我对完全的自由有了极大的渴望。&lt;/p&gt;
&lt;p&gt;两周之后，国内居然突然以惊人的速度彻底放开，方向我支持，但速度太快了，但是箭已发出不可能回头，我们只能多做防护。&lt;/p&gt;
&lt;p&gt;昨天世界杯决赛，梅西拿到了大力神杯，承载着80后青春记忆的一代球王终于圆梦。随着世界杯落下帷幕，也许真的可以看到世界慢慢恢复正常的曙光了，我对未来许下了美好的愿望，我们一定要实现，我们一定会实现。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C#泛型接口的协变和逆变</title>
      <link>https://dodoro.chouxiangpai.com/archives/1781/</link>
      <pubDate>Fri, 21 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1781/</guid>
      <description>&lt;h2 id=&#34;一协变和逆变是什么&#34;&gt;一、协变和逆变是什么？&lt;/h2&gt;
&lt;p&gt;先从字面上理解 协变(Covariance)、逆变(Contravariance)。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;co- &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;是英文中表示“协同”、“合作”的前缀。协变&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;的字面意思就是&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;“与变化的方向相同”。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;contra- &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;是英文中表示“相反”的前缀，逆变&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;的字面意思就是是&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;“与变化方向相反”。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;官方：协变和逆变都是术语，前者指能够使用比原始指定的派生类型的派生程度更大（更具体的）的类型，后者指能够使用比原始指定的派生类型的派生程度更小（不太具体的）的类型。&lt;/p&gt;
&lt;p&gt;那么问题来了，这里的“变化方向”指的是什么？&lt;/p&gt;
&lt;p&gt;C# 中对于对象（即对象引用），仅存在一种隐式类型转换，即 子类型的对象引用到父类型的对象引用的转换。这里的变化指的就是这种 子-&amp;gt;父 的类型转换。&lt;/p&gt;
&lt;p&gt;协变与逆变虽然从名字上看是两个完全相反的转换，但其实只是“子类型引用到父类型引用”这一过程在函数中使用的“两个不同阶段”而已，接下来将详细说明这点。&lt;/p&gt;
&lt;h2 id=&#34;二为什么需要协变和逆变&#34;&gt;二、为什么需要协变和逆变&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;images/0.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1781/images/0.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;三协变例子&#34;&gt;三、协变例子&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;images/1.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1781/images/1.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;四逆变例子&#34;&gt;四、逆变例子&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;images/2.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1781/images/2.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;五net自带的协变和逆变委托和泛型&#34;&gt;五、.NET自带的协变和逆变委托和泛型&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;images/3.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1781/images/3.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>C#委托之Action和Func的用法</title>
      <link>https://dodoro.chouxiangpai.com/archives/1779/</link>
      <pubDate>Thu, 20 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1779/</guid>
      <description>&lt;p&gt;我们在使用委托的过程中，除了为每个参数和返回类型定义一个委托之外，也就是说为每一个方法（作为参数的方法）定义一个委托，我们还可以使用Action和Func委托。&lt;/p&gt;
&lt;p&gt;泛型Action委托表示引用一个void返回类型的方法。Action委托类存在不同的变体，可以传递至多16种不同的参数类型，没有泛型参数的Action类可以调用没有参数的方法。例如：Action调用带一个参数的方法，Action&amp;lt;in T1,in T2&amp;gt;调用带两个参数的方法等&lt;/p&gt;
&lt;p&gt;Func的用法和Action用法类似，但是Func表示引用一个带返回类型的方法，Func也存在不同的变体，至多可以传递16个参数类型和1个返回类型，例如：Func&amp;lt;in T1,out Resout&amp;gt;表示带一个参数的方法，Func&amp;lt;in T1,in T2,out Resout&amp;gt;表示调用带两个参数的方法。&lt;/p&gt;
&lt;p&gt;总结 1：Action用于没有返回值的方法（参数可以根据自己情况进行传递）;2：Func恰恰相反用于有返回值的方法（同样参数根据自己情况情况）;3：记住无返回就用action，有返回就用Func&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Azure Container App 应用介绍</title>
      <link>https://dodoro.chouxiangpai.com/archives/1772/</link>
      <pubDate>Mon, 10 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1772/</guid>
      <description>&lt;p&gt;容器技术正日益成为打包、部署应用程序的第一选择。Azure提供了许多使用容器的选项。例如，我们可以使用Azure容器注册表来存储和管理Docker Images。Azure Container Instance或Azure应用服务可用于运行隔离容器。对于需要完整容器编排、自动缩放和服务发现的更复杂的场景，Azure Kubernetes服务是一个很好的选择。问题是，Azure Kubernetes虽然是托管的，但 用起来还是有些困难，开发人员必须得学习掌握一些运维知识。&lt;/p&gt;
&lt;p&gt;2021年，Azure提出了新服务 Azure Container App。该服务旨在减少构建 AKS 应用程序所需的知识和配置量，从而可能降低解决方案成本并加快上市时间。&lt;/p&gt;
&lt;h2 id=&#34;1什么是-azure-container-app-&#34;&gt;1，什么是 Azure Container App ？？&lt;/h2&gt;
&lt;p&gt;Azure Container App 提供位于 AKS 服务之上的无服务器托管服务，允许您部署多个容器而无需处理底层基础结构。事实上，Azure Container App 甚至不向用户公开 Kubernetes API。&lt;/p&gt;
&lt;p&gt;当我们在 Azure Container App中部署或更改容器时，该服务将自动创建应用程序的快照&amp;mdash;&amp;ndash;修订版，并在一个 pod 中运行它的容器。就像在 Azure Kubernetes 中一样，这些容器共享相同的应用程序生命周期、网络和磁盘。它们可以相互交流。此外，由于它与基于 Kubernetes 的事件驱动自动缩放的集成，该服务将根据 HTTP 并发请求数等指标自动增加/减少（不支持垂直缩放）与修订相关的 Pod 数量和内存使用。作为节省一些费用上开支，我们还可以将最小副本数设置为 0。如果应用程序没有请求，该服务会将活动 pod 的数量缩减为 0，我们无需支付任何费用。&lt;/p&gt;
&lt;p&gt;同时多个 Azure Container App 也可以部署到单个环境中。通过这样做，它们将被置于同一个虚拟网络下并与外界隔离。为了提供监视功能，每个环境都有自己的 Log Analytics 工作区，该工作区与其中的 Azure Container App共享。对于熟悉 Kubernetes 的人来说，我们可以将 Azure Container App Environment 视为 Kubernetes Namespace，将 Azure Container App Revision 视为 Kubernetes Deployment。&lt;/p&gt;</description>
    </item>
    <item>
      <title>时隔将近三年，终于分co了</title>
      <link>https://dodoro.chouxiangpai.com/archives/1776/</link>
      <pubDate>Sun, 25 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1776/</guid>
      <description>&lt;p&gt;从提交PR申请今天，已经过去了将近三年时间！今天收到IMMI的邮件，要求补无犯罪记录证明和全家体检，其实这两项早在疫情前一个月我们提交申请的时候就已经完成，但是因为有时效性，只能重新补。&lt;/p&gt;
&lt;p&gt;2019年底，眼看着马上要审理我们的case，国内突发疫情，澳洲移民局直接把中国所有的cases都hold on了。后来疫情蔓延至全球，澳洲关闭边境，所有offshore的cases都暂停。今年澳洲完全放开国门，前几个月大选换了总理，终于开始加速审理我们这些被滞留的cases，这一晃已经三年时间。&lt;/p&gt;
&lt;p&gt;这三年深刻影响了每一个人，全球化停止了，随着各国民族主义的崛起，世界已经不再友好，一切都已经回不去了。而也正是在这三年时间，我静下来(重)读了很多书，从文学到中国文化、从历史到政治哲学，因为拥有科学上网的能力，能看到未删减的图书，得以获得信息全貌，逐渐形成自己牢固的思想。&lt;/p&gt;
&lt;p&gt;今天已经预约体检，并申请了无犯罪记录证明，后续按部就班完成各项事宜，希望这次真的Granted Directly&lt;/p&gt;</description>
    </item>
    <item>
      <title>依赖注入简单易懂的详解</title>
      <link>https://dodoro.chouxiangpai.com/archives/1761/</link>
      <pubDate>Fri, 09 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1761/</guid>
      <description>&lt;p&gt;之前记录的依赖注入太复杂，今天认真看了《C#高级编程》里面对依赖注入的解释，明显就简单很多。&lt;/p&gt;
&lt;h2 id=&#34;1什么是依赖注入为什么需要它&#34;&gt;&lt;strong&gt;1、什么是依赖注入？为什么需要它？&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;更快的开发周期需要单元测试和更好的可更新性。更改一些代码，不应该导致意外位罝出现错误。创建更模块化的、减少依赖项的应用程序，有助于防止这种错误。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;依赖注入(Dependency Injection,DI)允许从类的外部注入依赖项，因此注入依赖项的类只需要知道一个协定(通常是C#接口)。这个类可以独立于其对象的创建。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;依赖注入更便于进行单元测试。在单元测试中，只需要测试特定的类，需要的依赖项可以替换为包含测试数据的特殊模拟类。&lt;/p&gt;
&lt;p&gt;还可以使用不同的实现区分生产模式和开发模式。例如，在生产过程中，可能需要访问SAP服务器，或者可能需要对所有开发人员都无法访问的特定活动目录进行身份验证。在开发的每个调试会话期间，都不希望等待成功的身份验证，也不需要SAP服务器开发用户界面。在这里，可以给相同的协定使用不同的实现来模拟身份验证，可以使用测试数据而不是访问SAP服务器。&lt;/p&gt;
&lt;p&gt;也可以在不同的平台上使用不同的实现。例如，可&lt;strong&gt;以创建一个.NET标准库，在其中为UWP、WPF和Xamarin应用程序实现所有公共功能，并可以根据需要重定向到特定于平台的代码。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;依赖注入还允许用自定义特性替换标准功能。ASP.NETCore和EntityFrameworkCore主要基于依赖注入。这些技术使用数百个协定一例如，来找到控制器，将HTTP请求映射到控制器，将接收到的数据转换为参数，将数据库表映射到实体类型等。使用不同的实现，可以轻松地替换自定义功能。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DI是敏捷软件开发和持续软件交付实践的核心模式。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;**依赖注入不需要依赖注入容器，但该容器有助于管理依赖项。**依赖注入容器管理的服务列表越来越长，就可以看到它的优点。ASP.NETCore和EntityFrameworkCore使用Microsoft.Exteosions.DependencyInjection作为容器来管理所有依赖项，以此管理数百个服务。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;尽管依赖注入和依赖注入容器在非常小的应用程序中会增加复杂性，但是一旦应用程序变得更大，需要多个服务，依赖注入就会降低复杂性，并促进非紧密绑定的实现。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;2没有依赖注入&#34;&gt;&lt;strong&gt;2、没有依赖注入&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;下面的示例没有使用依赖注入；稍后将更改它，以使用依赖注入。所用的服务实现在类GreetingService中定义。这个类定义了返回字符串的Greet方法：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GreetingService&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; Greet(stringname)=&amp;gt;&lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;Hello,{name}&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;类HomeController使用这个服务。在Hello方法中，实例化了GreetingService,并且调用Greet方法:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;HomeController&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; Hello(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; name)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; service = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GreetingService();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; service.Greet(name);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;下面看看Program类的Main()方法。其中实例化了HomeController,调用Hello方法，将结果写入控制台:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Main()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; controller=&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; HomeController();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; result=controller.Hello(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Stephanie&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Console.WriteLine(result);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;程序运行时，把Hello，Stephanie写入控制台。这有什么问题吗？&lt;/p&gt;
&lt;p&gt;**HomeController和GreetingService是紧密稱合的。要用不同的实现取代HomeController中的GreetingService并不容易。**这个GreetingService是一个返回字符串的简单服务。在正常的应用程序中，场景通常更复杂。例如，GreetingService可能使用HTTP请求访问API服务，或者使用EntityFramewoik访问数据库。可能要更改在一个地方使用的服务，而不是査找使用服务的所有位置。&lt;/p&gt;
&lt;p&gt;另外，为HomeController创建单元测试时，也会测试GreetingService。在单元测试中，希望仅测试单个类的方法的功能，而不需要使用其他依赖项。在HomeController中，不能很容易地为单元测试替换GreetingService。从技术上讲，为单元测试替换GreetingService方法的内部实现是可能的。使用Microsoft Fakes框架，可以通过替换GreetingSeivice类的特定方法和属性，来更改方法的实现。这个变更是在单元测试中定义的，并且只有在单元测试运行时才会发生：通过另一个方法来“伪造”原来的方法。&lt;strong&gt;其实这有更好的方法：使用依赖注入。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下一节将介绍如何更改此实现，以使用依赖注入。&lt;/p&gt;
&lt;h2 id=&#34;3使用依赖注入实现&#34;&gt;&lt;strong&gt;3、使用依赖注入实现&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;下面使HomeController独立于GreetingService的实现。为此，可以创建接口IGreetingService,它定义了HomeController所需的功能:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;IGreetingService&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; Greet(stringname);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;GreetingService现在实现了接口IGreetingService:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GreetingService&lt;/span&gt;:IGreetingService
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; Greet(stringname)=&amp;gt;&lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;Hello,{name}&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;HomeController现在只需要对一个对象的引用，该对象实现了接口IGreetingService。它用HomeController的构造函数注入，分配给私有字段，通过方法Hello来使用:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;HomeController&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;readonly&lt;/span&gt; IGreetingService _greetingService;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; HomeController(IGreetingService greetingService)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        _greetingService=greetingService??
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; ArgumentMullException(nameof(greetingService));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; Hello(stringname) =&amp;gt; _greetingService.Greet(name);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在这个实现中，HomeController利用了控制反转的设计原理。HomeController没有像以前那样实例化GreetingService。相反，定义由HomeController使用的具体类的控件在外部给出；换句话说，控制是反转的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>https请求报错block:mixed-content</title>
      <link>https://dodoro.chouxiangpai.com/archives/1759/</link>
      <pubDate>Mon, 05 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1759/</guid>
      <description>&lt;p&gt;开发过程中，可能会遇到在https里面请求内容的时候报混合调用的错误，一般是因为网站启用了https，但是老的网页链接和请求中还有使用http的情况。接口会错block: mixed-content，图片则会报错：Mixed block。解决的办法有两种。&lt;/p&gt;
&lt;p&gt;第一种， 页面的head中加入下面代码（将调用的http请求升级成https请求并调用）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;meta&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http-equiv&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Security-Policy&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;upgrade-insecure-requests&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这是最方便快捷的，也是很有效的办法。&lt;/p&gt;
&lt;p&gt;第二种， 如果是接口，可以通过本地后端（将本地后端当成service中间层），从后端再去调用其他服务器的http请求。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何在.NET Core3.1使用log4net</title>
      <link>https://dodoro.chouxiangpai.com/archives/1752/</link>
      <pubDate>Tue, 23 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1752/</guid>
      <description>&lt;h2 id=&#34;1添加log4net程序集&#34;&gt;1、添加log4net程序集&lt;/h2&gt;
&lt;p&gt;通过nuget添加，可以直接在程序集引用里搜索nuget包安装，也可以通过命令行安装，这里使用命令行：PM&amp;gt; Install-Package log4net&lt;/p&gt;
&lt;h2 id=&#34;2添加log4netconfig配置文件&#34;&gt;2、添加log4net.config配置文件&lt;/h2&gt;
&lt;p&gt;创建一个log4net.config文件，保存在项目的根目录：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;log4net&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;root&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;level &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ALL&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;appender-&lt;span style=&#34;color:#66d9ef&#34;&gt;ref&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ref&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;console&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;appender-&lt;span style=&#34;color:#66d9ef&#34;&gt;ref&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ref&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/root&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;!--File Appender--&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;appender name=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; type=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;log4net.Appender.RollingFileAppender&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;file &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;main.log&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;appendToFile &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;rollingStyle &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Size&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;maxSizeRollBackups &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;5&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;maximumFileSize &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;25MB&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;staticLogFileName &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;layout type=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;log4net.Layout.PatternLayout&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;conversionPattern &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%date [%thread] %level %logger - %message%newline&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/layout&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/appender&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;!--Console appender--&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;appender name=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;console&amp;#34;&lt;/span&gt; type=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;log4net.Appender.ManagedColoredConsoleAppender&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;mapping&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;level &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;INFO&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;forecolor &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Green&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/mapping&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;mapping&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;level &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WARN&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;forecolor &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Yellow&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/mapping&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;mapping&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;level &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ERROR&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;forecolor &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Red&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/mapping&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;mapping&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;level &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DEBUG&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;forecolor &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Blue&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/mapping&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;layout type=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;log4net.Layout.PatternLayout&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;conversionpattern &lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%date [%thread] %-5level - %message%newline&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/layout&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/appender&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/log4net&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;3加载log4net的配置的并创建相关实例&#34;&gt;3、加载log4net的配置的并创建相关实例&lt;/h2&gt;
&lt;p&gt;这里有两种办法，&lt;strong&gt;第一种最简单&lt;/strong&gt;，这种情况适用于控制台应用程序，简单明了，直接用加载到程序集中：&lt;/p&gt;</description>
    </item>
    <item>
      <title>亲子沟通提示：重视亲子沟通</title>
      <link>https://dodoro.chouxiangpai.com/archives/1742/</link>
      <pubDate>Mon, 15 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1742/</guid>
      <description>&lt;h2 id=&#34;一耐心认真地去听你的孩子讲话&#34;&gt;一、耐心、认真地去“听”你的孩子讲话&lt;/h2&gt;
&lt;p&gt;有时当妈妈一边炒菜一边盛饭时，孩子在想跟妈妈说些什么时，妈妈有时是不经心地听着，有时会打断她，反而请她帮忙摆桌吃饭，但从未停下来，专心去“听”她想说的话，除非她说的话，真是什么天大的好消息(不过，这种机率低于百分之一)。&lt;/p&gt;
&lt;p&gt;这里不是教您一定要停下手边所做的，但你可给孩子一个“确定”的时间，比如:“好，等我把饭菜摆好。”或是“再给我一分钟。&amp;ldquo;当然，最好是立即去“听”孩子要说的。&lt;/p&gt;
&lt;p&gt;因为，你一次，二次，三次地忽略了他们后，他们便会慢慢地失去了&amp;quot;告诉你”的兴趣。另外，在“听”时，最好做目光接触，要孩子知道你是直的愿意听。&lt;strong&gt;很多时候，孩子不过想说你觉得不太要紧的事，但对他们而言，却是重要的。如果你没有经常拒绝他们，当他们真遇到困难时，自然就会地来找你谈了。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;二有些话不能说以免伤害到孩子的感情&#34;&gt;二、有些话不能说，以免伤害到孩子的感情&lt;/h2&gt;
&lt;p&gt;家长不要说一些孩子最不想听的话，即使在盛怒的时候，也要思考话语的轻重，以免伤害孩子的感情。&lt;/p&gt;
&lt;p&gt;另外，孩子的世界与想法是和大人们不同的，当孩子很认真地告诉你什么时，你如果取笑孩子，或者有轻蔑或不相信的态度，也会伤害孩子，这样孩子以后也就不再愿意跟你谈了。&lt;/p&gt;
&lt;h2 id=&#34;三有意识地与孩子进行沟通主动分享自己的感受&#34;&gt;三、有意识地与孩子进行沟通，主动分享自己的感受&lt;/h2&gt;
&lt;p&gt;多与孩子说说自己的感受和以往的经历，让孩子走进自己，向孩子表达自己的期待和需求。&lt;/p&gt;
&lt;p&gt;当然，做父母的，不需要把心中的担心向孩子表明，去增加孩子担忧的心理负担，但有时不妨主动地与孩子分享自己的心情、感受，及对事情的看法，孩子当然也就比较容易向你诉说他的心情、感受与看法了。&lt;/p&gt;
&lt;h2 id=&#34;四重视沟通的方法别问一些太空洞的问题&#34;&gt;四、重视沟通的方法，别问一些太空洞的问题&lt;/h2&gt;
&lt;p&gt;譬如“今天如何?”“学校好吗?”也别常用，“为什么?”因为孩子会不自觉地想保护自己。以询问孩子一些有趣的、愉快的事情作为聊天的开场白。愉快的开始，能营造良好的沟通氛围，促进亲子沟通。&lt;/p&gt;
&lt;p&gt;了解孩子的兴趣，&lt;strong&gt;了解现在孩子与同龄人中流行的东西&lt;/strong&gt;，包括儿歌、动画片，故事书等，与孩子一起做他感兴趣的事，进行积极沟通，让孩子感受到父母对自己的关心，他会更愿意与家长沟通。&lt;/p&gt;
&lt;h2 id=&#34;五了解孩子的想法理解孩子要表达的意思&#34;&gt;五、了解孩子的想法，理解孩子要表达的意思&lt;/h2&gt;
&lt;p&gt;由于孩子的表达能力条理性较差，&lt;strong&gt;因此孩子有时不能清晰表达自己&lt;/strong&gt;。家长要耐心等孩子把话说完，把“零散”的东西拼凑起来，准确理解孩子要表达的意思。&lt;/p&gt;
&lt;p&gt;大部分时间，&lt;strong&gt;孩子只是想从他信任的成人中，确定自己的想法与做法&lt;/strong&gt;。所以，家长可在了解情况后，做个回答或支持。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ABP框架能力清单</title>
      <link>https://dodoro.chouxiangpai.com/archives/1729/</link>
      <pubDate>Fri, 08 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1729/</guid>
      <description>&lt;p&gt;ABP框架提供了一个稳定的架构用于构建企业级软件解决方案，它遵循了.NET和ASP.NETCore平台之上的最佳实践。它内置了基础架构、生产级别的模块、主题、工具、指南和文档，并尽可能地自动化开发细节和解法我们的重复性工作。&lt;/p&gt;
&lt;p&gt;在接下来的几个小节中，我将从架构层面介绍ABP是如何完成所有这些工作。&lt;/p&gt;
&lt;h2 id=&#34;abp架构&#34;&gt;ABP架构&lt;/h2&gt;
&lt;p&gt;ABP是一个特殊的架构，换句话说，它是一个有个性化的框架。先解释一下什么是没有个性的框架，什么是有个性的框架。&lt;/p&gt;
&lt;p&gt;正如我在搭建架构部分所述，为搭建解决方案的基础设施需要大量决策工作；比如系统架构、开发模型、技术、模式、工具和库。&lt;/p&gt;
&lt;p&gt;没有个性的框架，例如ASP.NETCore，这些决定大多由您决定。例如，您可以通过将UI层与数据访问层分离来创建分层解决方案，或者您可以通过直接从UI页面/视图访问数据库来创建单层解决方案。您可以使用任何库，只要它与ASP.NETCore兼容，并且您可以应用任何架构模式。无个性使ASP.NETCore在不同的场景中变得灵活和可用。但是，所有的这些都需要我们自己去做决策。&lt;/p&gt;
&lt;p&gt;我并不是说ASP.NETCore完全没有自己的个性想法。假定您正在构建基于HTTP规范的Web应用程序或API。它清楚地定义了应该如何开发UI和API层。它还提供了一些低级的基础设施组件，例如依赖项注入、缓存和日志记录。但是，它并没有说明您的业务代码是应该要如何组建，应该使用哪些架构模式。&lt;/p&gt;
&lt;p&gt;换句话说，ABP框架是一个有个性倾向的框架。它相信软件开发方法本质上可以更好，因此可以引导开发人员在解决方案中使用更佳的架构、模式、工具和库。 尽管ABP框架足够灵活，可以使用不同的工具和库来改变您的架构决策，但当您遵循它的实践原则时，您将获得最大的价值。请别担心，因为它为通用架构提供了良好的、行业认可的解决方案。他的架构规则将节省您的时间，提高您的生产力，并使您专注于您的业务代码而不是基础设施问题。&lt;/p&gt;
&lt;p&gt;在接下来，我将介绍ABP所支持的四种基本架构。&lt;/p&gt;
&lt;h2 id=&#34;领域驱动设计&#34;&gt;领域驱动设计&lt;/h2&gt;
&lt;p&gt;ABP的主要目标是根据整洁代码原则提供一个模型来构建易维护的解决方案。它提供了一个基于DDD模式和实践的分层架构。它提供了一个分层的启动模板、基础架构以及架构应用指南。&lt;/p&gt;
&lt;p&gt;由于ABP是一个软件框架，它专注于DDD的技术实现。本书的第3部分，实现领域驱动设计，解释了使用ABP框架构建基于DDD的最佳实践。&lt;/p&gt;
&lt;h2 id=&#34;模块化&#34;&gt;模块化&lt;/h2&gt;
&lt;p&gt;在软件开发中，模块化是一种拆分系统成独立模块的技术。最终目标是降低复杂性，提高可重用性，使不同的团队能够在不相互影响的情况下能并行处理不同的功能集。&lt;/p&gt;
&lt;p&gt;ABP构建模块化有两个主要挑战：&lt;/p&gt;
&lt;p&gt;第一个挑战是模块隔离。尽管ASP.NETCore有一些特性（例如Razor组件库）来支持模块化。但是，它仍然非常有限，因为它是一个底层通用的框架，并且仅对UI和API部分支持。另一方面，ABP框架提供了一个一致的模型和基础设施来构建完全隔离的、可重用的应用模块及数据库、领域、应用和UI层。&lt;/p&gt;
&lt;p&gt;第二个挑战是模块之间如何通信，使之成为一个统一的应用程序。ABP为模块化系统提供常见的模型，例如在模块之间共享数据库，在模块之间通过事件或API进行通信，以及模块安装。&lt;/p&gt;
&lt;p&gt;ABP提供了许多可在任何应用程序中使用的预构建模块。包括身份验证模块，它提供用户、角色和权限管理，同时也提供登录和注册页面。他们基本上都是可重用和自定义的。此外，ABP提供了模块启动模板，帮助您构建可重用的应用程序。这方面的一个例子可以在[第15章]使用模块化中详细介绍。&lt;/p&gt;
&lt;p&gt;模块化非常适合管理复杂的大型单体系统。但是，ABP也可以帮助您创建微服务解决方案。&lt;/p&gt;
&lt;h2 id=&#34;微服务&#34;&gt;微服务&lt;/h2&gt;
&lt;p&gt;微服务和分布式架构是构建可扩展系统的公认方法。它允许不同的团队开发不同的服务并独立地对服务进行单独部署和扩展。&lt;/p&gt;
&lt;p&gt;但是，构建微服务系统在团队开发、部署、微服务间通信、数据一致性、监控等方面存在一些重要挑战。&lt;/p&gt;
&lt;p&gt;微服务系统是一种将不同的学科、方法、技术和工具结合在一起来解决独特问题的解决方案。每个微服务系统都有其要求和限制。每个团队都有一定程度的专业知识、知识和技能。&lt;/p&gt;
&lt;p&gt;ABP框架从一开始就被设计为与微服务兼容。它在具有事务支持的微服务之间提供了一个用于异步通信的分布式事件总线。它还提供C#客户端代理来轻松调用远程服务的RESTAPI。&lt;/p&gt;
&lt;p&gt;所有预构建的ABP应用模块都经过设计，以便您可以将它们转换为微服务。ABP也提供了详细指南来解释如何创建微服务兼容模块。这样，您可以从模块化单体开始，然后将其转换为微服务解决方案。&lt;/p&gt;
&lt;p&gt;ABP团队准备了一个使用ABP框架构建的开源微服务参考方案。它演示了如何使用API网关、微服务间通信、分布式事件、分布式缓存、多个数据库提供程序和多个UI应用程序。它还包括在容器上运行解决方案的Kubernetes和Helm配置。详情参阅。&lt;/p&gt;
&lt;h2 id=&#34;saas多租户&#34;&gt;SaaS/多租户&lt;/h2&gt;
&lt;p&gt;软件即服务(SaaS)是一种广泛使用的架构模式。以下是多租户系统的典型特征：&lt;/p&gt;
&lt;p&gt;在租户之间共享硬件和软件资源。每个租户都有用户、角色和权限。在租户之间隔离数据库、缓存和其他资源。可以启用/禁用每个租户的应用功能。可以为每个租户自定义应用配置。&lt;/p&gt;
&lt;p&gt;ABP框架涵盖了所有这些要求甚至更多。它可以帮助您优雅地构建多租户系统，而您几乎感受不到多租户的存在。&lt;/p&gt;
&lt;p&gt;到目前为止，我已经介绍了四种ABP基本架构模式。此外，ABP还提供了启动模板来轻松创建新的解决方案。&lt;/p&gt;
&lt;h2 id=&#34;启动模板&#34;&gt;启动模板&lt;/h2&gt;
&lt;p&gt;使用ASP.NETCore自带的模板创建新解决方案时，只能获得单个项目，没有分层和依赖关系。您通常会花费大量时间来设置解决方案架构，包括安装工具和做配置基本。&lt;/p&gt;
&lt;p&gt;ABP框架提供了一个架构完善、分层清晰、预配置和生产就绪的启动解决方案模板。以下截图显示了当您运行ABP框架创建的启动模板时的初始UI：&lt;/p&gt;
&lt;p&gt;下面谈谈这个启动模板：解决方案已经做好逻辑分层。一些预构建模块，例如Account和Identity模块。已经实现了基本的登录、注册、用户和角色管理以及其他一些标准功能。预先配置好的单元测试和集成测试项目。一些管理数据库迁移以及使用HTTPAPI实用工具。&lt;/p&gt;
&lt;p&gt;ABP的启动模板带有UI框架和数据库提供者的多个选项。你可以从Angular、Blazor或MVC(RazorPages)选择一个作为UI框架，或者使用EntityFrameworkCore或MongoDB作为数据库提供者。&lt;/p&gt;
&lt;h2 id=&#34;abp基础设施&#34;&gt;ABP基础设施&lt;/h2&gt;
&lt;p&gt;ABP基于您已经了熟悉的工具和库。它没有引入新的对象关系映射器（ORM），而是使用EntityFrameworkCore。同样，它使用Serilog、AutoMapper、IdentityServer和Bootstrap，而不是自己创建类似的功能。它提供了一个解决方案集成了这些工具，并实现了常见的业务应用需求。&lt;/p&gt;
&lt;p&gt;ABP框架按照约定简化了异常处理、验证、授权、缓存、审计日志和数据库事务管理，并允许您在需要时进行精细控制。&lt;/p&gt;
&lt;p&gt;ABP与IdentityServer很好地集成，基于cookie和令牌的身份验证以及单点登录。它还提供了一个详细的、基于权限的授权系统来帮助您控制应用的权限。&lt;/p&gt;
&lt;p&gt;同时也提供了后台作业、BLOB存储、文本模板、审计日志和本地化等常见组件。&lt;/p&gt;
&lt;p&gt;在UI部分，ABP提供了完整的UI主题系统，帮助您开发无主题的模块化应用，并轻松为应用程序安装主题。它还在UI方面提供了大量功能和帮助程序，以消除重复代码。&lt;/p&gt;
&lt;h2 id=&#34;社区&#34;&gt;社区&lt;/h2&gt;
&lt;p&gt;当您在公司中搭建解决方案架构时，除了开发人员没有人会去研究它。然而，ABP拥有一个庞大而活跃的社区。他们使用相同的架构和基础设施，应用类似的最佳实践，并以类似的方式开发他们的应用程序。当您遇到基础架构问题或想要获得解决业务问题的想法或建议时，这具有很大的优势。由于ABP开发人员正在应用相同或相似的模式，因此在另一个解决方案中也更容易理解他人的代码。&lt;/p&gt;
&lt;p&gt;ABP框架自2016年以来一直存在并不断发展。截至2021年底，它在GitHub上拥有7,000多颗星、220多位贡献者、22,000多个提交、5,700个已关闭问题，以及在NuGet上超过4,000,000次下载，超过110多个专业和次要版本。我的意思是，它是一个成熟的、被接受的、值得信赖的开源项目。&lt;/p&gt;
&lt;p&gt;来自ABP核心团队和社区的贡献者，有着不断持续输出的文章，视频教程和ABP社区网站可供大家学习。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET Core应用程序配合web服务器的工作原理</title>
      <link>https://dodoro.chouxiangpai.com/archives/1719/</link>
      <pubDate>Tue, 28 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1719/</guid>
      <description>&lt;p&gt;这段时间开始阅读.NET Core内部技术的书籍，发现了很多之前忽视的技术，果然还是得通过阅读，才可以加深对技术的理解。今天了解到了ASP.NET Core应用程序配合web服务器的工作原理。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220628092554-2.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1719/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220628092554-2-300x97.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Web服务器(如IIS)通过一个配置的端口与完全解耦的可执行文件通信，并将传入的请求转发给控制台应用程序。这个控制台应用程序由一个必要的HTTP模块从US进程空间生成，该HTTP模块使IIS能够支持ASP.NETCore。要将ASP.NETCore应用程序托管到其他Web服务器(如Apache或NGINX)上，必须有类似的扩展模块。&lt;/p&gt;
&lt;p&gt;这里值得注意的是，图中给出的ASP.NETCore架构与最初的架构(即2003年将ASP.NET1.x与IIS连接起来的架构)有类似之处。当时ASP.NET有自己的工作进程，通过命名管道与IIS通信。后来，ASP.NET工作进程的任务被内置的IIS工作进程(w3wp.exe)接过，从而有了应用程序池的概念。在ASP.NETCore中，两个独立的、无关的、完全解耦的可执行文件进行通信，但是ASP.NET可执行文件并不是一个多租户工作进程，而只是托管一个基本的异步服务器来处理传入请求的应用程序的一个实例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微软官方.NET 升级助手：可以将NET Core 3.1项目升级为.NET 6</title>
      <link>https://dodoro.chouxiangpai.com/archives/1717/</link>
      <pubDate>Tue, 21 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1717/</guid>
      <description>&lt;p&gt;装并运行升级助手 在命令提示符下，运行以下命令安装升级助手工具:&lt;/p&gt;
&lt;p&gt;dotnet tool install -g &amp;ndash;add-source &amp;lsquo;&lt;a href=&#34;https://api.nuget.org/v3/index.json&#34;&gt;https://api.nuget.org/v3/index.json&lt;/a&gt;&amp;rsquo; &amp;ndash;ignore-failed-sources upgrade-assistant&lt;/p&gt;
&lt;p&gt;现在，你已准备好在解决方案或项目上运行该工具。让我们先分析项目的包依赖项。&lt;/p&gt;
&lt;p&gt;导航到包含项目或解决方案的目录，并运行以下命令:&lt;/p&gt;
&lt;p&gt;upgrade-assistant analyze&lt;/p&gt;
&lt;p&gt;将此页命令上的 更改为解决方案或项目文件的路径和名称。&lt;/p&gt;
&lt;p&gt;上一个命令将生成 SARIF 格式的报告，该报告基于 JSON 格式，可使用以下查看器查看:&lt;/p&gt;
&lt;p&gt;任何文本编辑器。 VS extension for SARIF Viewer for a richer experience.&lt;/p&gt;
&lt;p&gt;分析项目依赖项后，运行以下命令以开始升级项目:&lt;/p&gt;
&lt;p&gt;upgrade-assistant upgrade&lt;/p&gt;
&lt;p&gt;该工具还支持其他选项。有关完整的工具使用情况信息，请参阅 GitHub 上的 升级助手自述文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>伯林的《两种自由概念——消极自由和积极自由》</title>
      <link>https://dodoro.chouxiangpai.com/archives/1739/</link>
      <pubDate>Wed, 15 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1739/</guid>
      <description>&lt;p&gt;最近读完叶礼庭的《伯林传》，进一步理解了伯林的很多思想，伯林是二十世纪最重要的思想家和哲学家之一，也是自由主义大师，他提倡的保护消极自由才是自由主义者的核心本质，任何一位要叙述自由都离不开他。&lt;/p&gt;
&lt;p&gt;“20世纪的思想家中，以赛亚·伯林可以说是既无做大师的抱负，也自认没有下过大师的苦功，却在有生之年成为当之无愧大师的人。对那些寻求以思想改变世界的思想家来说，伯林是成功的，也是幸运的。”&lt;/p&gt;
&lt;p&gt;“在强调自由高于平等、个性高于群体的冷战式自由主义转向中，伯林对消极自由的辩护是一种时代精神；他是当代多元主义，特别是从价值多元主义到文化多元主义的最有力倡导者，而这种多元主义已经成为晚近实践哲学的纲领。”&lt;/p&gt;
&lt;p&gt;“伯林一生最重要的工作之一，就在于审视为什么独创性的、书斋式的哲学或社会思想，用于改造人类现实时，会导致灾难性的结果。用大观念的社会历史后果来检视大观念，暴露出大观念的残酷本性，揭示人的一种现代境遇，在这方面，伯林是无与伦比的。”&lt;/p&gt;
&lt;p&gt;这几天又把《两种自由概念——消极自由和积极自由》大概看了一遍，做如下读书笔记。&lt;/p&gt;
&lt;p&gt;这篇文章是伯林的一次演讲，&lt;strong&gt;通篇核心的思想是：要把自由拆分为消极自由和积极自由；要保护消极自由，因为消极自由是自由主义者的真正政治内核；要警惕积极自由，因为积极自由是亦导致了法西斯主义和共产主义的现代极权的根源。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一个社会，除非至少遵循由下列两个互有关连的原则，否则，绝对无法获得自由&lt;/strong&gt;，这两个原则是：第一，&lt;strong&gt;惟有“权利”（rights）能成为绝对的东西，除了权利以外，任何“权力”(power)都不能被视为绝对&lt;/strong&gt;；惟有如此，所有的人才能具有绝对的权利，去拒绝从事非人的行为，而不论他们是被什么权利所统治。第二，&lt;strong&gt;人类在某些界限以内，是不容侵犯的，这些界限不是人为划定的，这些界限之形成，是因为它们所包含的规则，长久以来，就广为众人所接受，而人们也认为：要做一个“正常人”，就必须遵守这些规则&lt;/strong&gt;；同时，人们认为如果违犯这些规则，就是不人道、或不正常的行为；对于这些规则而言，如果我们认为它们可以由某个法庭、或统治团体，用某种正式的程序，予以废止，是荒谬的想法。当我说某一个人是个“正常人”的时候，我所指的意思中，也包含了“他不可能破坏以上这些规则，而丝毫不感到嫌恶、或不安”。&lt;/p&gt;
&lt;h2 id=&#34;导论&#34;&gt;导论&lt;/h2&gt;
&lt;p&gt;**社会与政治理论的研究，本就发源于人类意见之分歧，而且因为意见分歧，相关的研究才会不断滋生繁茂。**有人可能会以下面这个理由，来质疑我的说法：即使在一个由圣徒般的无政府主义者组成、对终极目的不可能有冲突看法的社会里，政治问题，诸如宪法或立法的问题，也仍然会出现。但是，这项反对意见的理由是错误的。人们对于“目的”的看法，一旦趋于一致，剩下来的，就是“手段”的问题，而手段问题只是技术性（technical）的问题，不是政治性的问题。&lt;/p&gt;
&lt;p&gt;换句话说，这些问题可以由专家或机器来解决，就像是工程师或医生之间的争论一样。这就是何以若有人信仰某种巨大无比、旋乾转坤的现象，&lt;strong&gt;例如“理性的最后胜利”、或“无产阶级革命的最后胜利”等，便也必然相信一切政治或道德问题，都可以转变为技术上的问题&lt;/strong&gt;。圣西蒙的名言：“用‘管理事情’来代替‘治理人们’”，以及马克思预言：国家的凋萎，就是真正人类历史的开始，所指的都是这个意思。&lt;/p&gt;
&lt;p&gt;有人认为，这种有关社会和谐的完美状态之类的玄想，只是一种无聊的幻想，于是称之为“乌托邦式”的看法。令人惊讶，因为在近代历史上，&lt;strong&gt;也许从不曾有这么多人——包括东方人和西方人——的观念以及生命，被狂热的社会与政治学说所改变，有时甚至被猛烈翻搅。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;相当危险，因为如果应该注意观念的人，也就是说，训练有素、能对观念作批判性思考的人，忽视观念的话，观念有时候就会形成一股不受拘制的动力，&lt;strong&gt;对广大人群产生无可抗拒的影响力，这些力量会变得极为暴烈，不是理性批判所能左右。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一百多年以前，德国诗人海涅(Heine)就曾经警告法国人，&lt;strong&gt;不要低估观念的力量：一位教授在他宁静的书房里孕育出来的哲学观念，可能毁灭一个文明&lt;/strong&gt;。海涅认为康德的巨著《纯粹理性批判》(Critiqueof Pure Reason)，是一把处决了欧洲“自然神论”的宝剑；卢梭的著作在罗伯斯庇尔的手中，变成一种沾满血渍的武器，摧毁了欧洲的旧体制。&lt;/p&gt;
&lt;p&gt;政治言论、观念和行为的背后，都有某些使人产生不同意见问题，为其背景。我们若不去了解这些背景，就无法了解这些政治言论、观念或行为。因此，&lt;strong&gt;除非我们理解我们这个世界的重要问题，我们可能就无法清楚地认识我们自己的态度和活动。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这其中最大的一个问题，便是两种思想体系之间的公开战争，&lt;strong&gt;这两种思想体系为古老的政治中心问题，即：服从与强制问题，提出了互相冲突的不同答案。&lt;strong&gt;这些政治中心问题大抵是：&lt;/strong&gt;“我(或任何人)为什么要服从别人?”“我为什么不能按照我喜欢的方式去生活?”“我必须服从吗?”“如果我不服从?我会不会受到强制?谁来强制?强制到什么程度?用什么名义强制?为什么?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;关于强制力的许可限度，这个问题，当今世界人们持有互相对立的看法，每一种看法都有很多信服者。因此，在我看来，这问题的任何一个层面，都值得加以检讨。&lt;/p&gt;
&lt;h2 id=&#34;一两组不同的问题主要探讨消极自由&#34;&gt;一、两组不同的问题(主要探讨消极自由)&lt;/h2&gt;
&lt;p&gt;在人类历史上，几乎每一个道德家都颂扬自由。正如“幸福”、“善良”、“自然”、“实相”一样，“自由”这个名词的意义也很模糊，所以，几乎能够容纳绝大部分的解释。我并不想去探讨这个变幻莫测的字眼的起源，也不打算去研究思想史家为它所提出来的两百多种意涵。**我所要探讨的，只是这个名词在两个层面上的意义——但却是最重要的两个意义，各自背后都包含了许多历史事件。**同时，我敢说未来也有许多历史事件，将会与这两种意义下的“自由”，发生关连。&lt;/p&gt;
&lt;p&gt;我将和前此许多人一样，把我所要探讨的第一种“自由”(freedomor liberty，我用这两个词眼来表示同一种意思)的政治意义，&lt;strong&gt;称为“消极的”(negative)自由&lt;/strong&gt;；这种“消极的自由”，和针对以下这个问题所提出的解答有关，亦即：&lt;strong&gt;“在什么样的限度以内，某一个主体(一个人或一群人)，可以、或应当被容许，做他所能做的事，或成为他所能成为的角色，而不受到别人的干涉?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;第二种意义的自由，我称之为**“积极的”(Positive)自由**，则和以下这个问题的答案有关：&lt;strong&gt;“什么东西、或什么人，有权控制、或干涉，从而决定某人应该去做这件事、成为这种人，而不应该去做另一件事、成为另一种人?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这两个问题的答案，虽然可能有重叠之处，但却显然是不同的问题。&lt;/p&gt;
&lt;h4 id=&#34;１消极自由的概念&#34;&gt;&lt;strong&gt;１、“消极”自由的概念&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;**正常的说法是，在没有其他人或群体干涉我的行动程度之内，我是自由的。**在这个意义下，政治自由只是指一个人能够不受别人阻扰而径自行动的范围。我本来是可以去做某些事情的，但是别人却防止我去做——这个限度以内，我是不自由的。我是否受到压迫，其判别的准则是：**别人是否直接或间接、有意或无意地，使我的希望不得实现。**在此一意义下，若我是自由的，意思就是我不受别人干涉。不受别人干涉的范围愈大，我所享有的自由也愈广。英国古典政治哲学家在使用“自由”这个字的时候，他们所指的，也就是上述这个意思。&lt;/p&gt;
&lt;p&gt;自由的范围可能有多大、应该有多大，他们的意见并不一致。他们认为不能漫无限制，因为如果这样的话，人们就可以漫无界限地干涉彼此的行为；这种“自然的”(natural)自由，也会导致社会的混乱，在这种混乱中，要不是人类的最低限度之需求，无法获得满足，就是弱者的自由，会被强者所剥夺。这些思想家认为：&lt;strong&gt;人类自由行动的范围，必须由法律施以限制。但是，他们同样又认为&lt;/strong&gt;，尤其是英国的洛克与穆勒、以及法国的康斯坦和托克维尔等自由主义思想家认为：&lt;strong&gt;个人自由应该有一个无论如何都不可侵犯的最小范围，如果这些范围被逾越，个人将会发觉自己处身的范围，狭窄到自己的天赋能力甚至无法作最起码的发挥&lt;/strong&gt;，而惟有这些天赋得到最起码的发挥，他才可能追求、甚至才能“构想”，人类认为是善的、对的、神圣的目的。&lt;/p&gt;
&lt;h4 id=&#34;２自由主义者的良心问题&#34;&gt;&lt;strong&gt;２、自由主义者的良心问题&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;我认为，&lt;strong&gt;西方自由主义者之所以会感到良心不安，并非由于他们相信人类追求的自由&lt;/strong&gt;，随其社会或经济环境的不同，而有所分别，而是由于他们相信少数人之所以拥有自由，是因为他们剥削了大多数没有自由的人、或至少是对大多数人缺乏自由的事实视若无睹，而得来的。&lt;/p&gt;
&lt;p&gt;**但是，**我们如果仅以这种说法，把用语搅混的话，却得不到什么好处。为了要避免显著的不公平、或者到处可见的悲苦情况，我随时愿意牺牲我的一部分自由、或全部自由；我可以情愿而自由地这么做：然而，为了正义、平等、或同胞爱，我牺牲的是自由。在某种情况下，我如果不做这样的牺牲，我的内心将会充满、而且理当充满罪恶感。&lt;/p&gt;
&lt;p&gt;**但是，**一种牺牲不会增长被牺牲的东西，无论哪种牺牲，在道德上有多大需要或补偿，都是如此。一件东西是什么，就是什么：自由就是自由，不是平等、公平、正义，不是文化，也不是人类的幸福、或平静的良心。如果我自己、或我的阶级、或我的国家的自由，是建立在许多人的不幸上面，则促成此事的体制就是不公正、不道德的。&lt;/p&gt;
&lt;p&gt;**但是，**如果我为了减少不平等的耻辱，因而去削减、或者丧失我的自由，却又没有能借此具体地增益别人的个人自由，那么，所发生的是自由的“绝对丧失”(abso1uteloss)。这虽可以由正义、或幸福、或和平的收获来补偿，但是丧失的却毕竟是丧失了；如果我们硬要说：我虽然失去我个人的、“自由主义式”的自由，但是别种形式的自由，即“社会自由”或“经济自由”，却增加了，则这样的说法，不啻是混淆价值。&lt;/p&gt;
&lt;h4 id=&#34;３限制自由的最低界限&#34;&gt;&lt;strong&gt;３、限制自由的最低界限&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;不过，为了使某些人获得自由，有时候其他人的自由，必须削减，这一点仍然没错。问题是：在什么原则下，我们才能如此削减某些人的自由?如果自由是神圣而不可侵犯的价值，那么，我们将找不到任何这样的原则。&lt;/p&gt;
&lt;p&gt;无论如何，在实际上，这些互相冲突的规则或原则中，**有些必须让步：这种让步并不一定都基于某些可以明确陈述的道理，更不是都能概化成规则、或普遍的公理。**无论如何，我们仍然必须找到一个实际的妥协办法。&lt;/p&gt;
&lt;p&gt;对人性抱持乐观态度，并且相信人类利益能彼此和谐的哲学家，诸如洛克或亚当斯密，以及某种心情下的穆勒，他们相信社会的和谐与进步，与为个人保留一个不容国家、或其他权威任加干涉的广大私生活范围，是可以相容的。&lt;/p&gt;
&lt;p&gt;霍布斯，以及其他一些和他持相同看法的人，特别是一些保守、反动的思想家，则主张：为了避免人类的互相残杀，因而使社会生活变成一处丛林或荒野，我们必须建立一个更高一等的安全防卫，使人类能够各安其位；基于这个缘故，霍布士主张加强中央控制的范围，减少个人自由的范围。&lt;/p&gt;
&lt;p&gt;无论如何，以上这二派，都一致认为：**人类生活的某些部分必须独立，不受社会控制。若是侵犯到了那个保留区，则不管该保留区多么褊狭，都将构成专制。**自由与隐私权最雄辩的维护者康斯坦，忘不了法国雅各宾党人的独裁，他宣称说：至少宗教、意见、表达、财产的自由，必须受到保障，不容横加侵扰。杰佛逊(Jefferson)、柏克、潘恩(Paine)、穆勒等人，也都各自列举了一些不同的个人自由，但目的都同样是不使权威过度扩张。&lt;/p&gt;
&lt;p&gt;**我们必须维持最低限度的个人自由，才不致于“贬抑或否定我们的本性”。我们无法享有绝对的自由，因此必须放弃某些自由，以保障其他自由。**但是完全的自我放弃，便是自我挫败。那么，这个最低限度应该是什么呢?如果我们抛弃它，就是违逆了我们的人性本质—这就是最低限度的自由。&lt;/p&gt;
&lt;p&gt;然则，所谓人性本质却又是什么东西?它又隐含了哪些标准呢?对于这个问题，人们一向争论不休，将来也仍会永远争论不休。无论这个不准干涉的范围，是根据什么原则来划定的，无论它是根据自然法、或自然权利、或功利原则、或某种康德所谓的无上命令(categorieal imprative)、或社会契约的神圣不可侵犯性、或是人类用来厘清并支持他们的信念的其他任何概念，来订定的，在这种意义之下，&lt;strong&gt;自由都是“免于……的自由”（liberty from…）；也就是：在变动不居的、但永远可以辨认出来的界限以内，不受任何干扰。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一位最有名的自由斗士，曾经说过：“惟一能以自由为名，而当之无愧的，是用我们自己的方式，追求我们自己利益的自由。”&lt;strong&gt;果真如此的话，我们是否有理由强迫任何人做任何事?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;穆勒认为我们毫无疑问地具有这种权利。既然正义的意义，是每个人拥有最低限度的自由，我们当然有必要对其他的人加以约束，必要时还可以强制执行，以使他们不至于剥夺在何人最低限度的自由。其实法律的整个功能，也就是预防这种冲突：&lt;strong&gt;在这种情况下，国家就成为拉萨尔(Lassalle)所讥讽为守夜者、或交通警察之类所代表的功能。&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&#34;４穆勒的自由理念&#34;&gt;&lt;strong&gt;４、穆勒的自由理念&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;为什么穆勒会认为保障个人自由，是如此神圣的事呢?他在他有名的论文中表示：&lt;strong&gt;除非人们得以按照他们的希望，“按照只与他们自己有关的方式去生活”，否则文明就不会进步，真理也不会显现，因为我们会缺少自由的观念市场&lt;/strong&gt;；人类的自动自发、原创力、天才、心智能力、道德勇气等，也将无从发挥。社会将会被集体的平庸所压抑。&lt;/p&gt;
&lt;p&gt;对一个人施以威胁说：除非他屈就于一种无法自己选择目标的生活，否则就要迫害他；堵塞他所有去路，而只留一扇门，那么，无论这扇门开向多么高贵的远景，无论作此安排的人，动机多么慈悲仁道，这些作法都违反了下述的真理：他是一个人，他有他自己的生活方式所有关于公民自由与个人权利的呼吁，所有对于剥削与羞辱的抗议，对于大众权威侵犯个人生活的反抗，以及向习俗和有组织的宣传对群众的操纵，所发出的抗议，都是源自于这种个人主义式的、议论纷坛的“人之概念”。&lt;/p&gt;
&lt;p&gt;这种意义下的自由，与某几类专制政体或至少与自治(self—government)之阙如，并非不能相容。这个意义下的自由，所涉及的主要是“控制的范围”，而不是它的“来源”问题。正如一个民主社会，事实上可能剥夺一个公民在别种形式的社会里，所能享有的许多自由。我们也完全可以想见：一个具有自由心态的专制君主，可能会容许他的子民，享有相当大尺度的个人自由。这种给予他的子民享有相当大自由范围的专制君主，或许是不公正的，或许助长极度的不平等，或许不重视秩序、美德、或知识；但是，假使他不抑制人民的自由，或至少比其他政权约束得更少，那么，他就合乎穆勒的特定标准了。&lt;/p&gt;
&lt;p&gt;至少从逻辑上来说，这个意义下的自由，和民主或自治没有什么关连。**大体说来，自治和其他的政权形态，比较起来，更能保障公民的自由，自由主义者便是持此一理由，来为自治做辩解。**但是个人自由和民主统治之间，没有什么必要的关连。“谁统治我？”和“政府干涉我多少?”这两个问题，从逻辑的角度来看，是完全不一样的问题。&lt;/p&gt;
&lt;h4 id=&#34;５两种自由的总结&#34;&gt;&lt;strong&gt;５、两种自由的总结&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;总结来说，“消极的”与“积极的”两种自由概念之间的重大对比，与这个区别正相一致。因为如果我们要了解“积极”自由的意义，我们要问的是：“谁统治我?”、“谁有权决定我是什么人?不是什么人?应该怎么样?做什么事?”而不是去问：“我可以自由地成为什么、或自由地做哪些事?”。民主与个人自由间的关连，远比双方的拥护者所认为的稀薄。&lt;strong&gt;想要自己治理自己，或参与控制自己生活过程的欲望，可能和希求一个能够自由行动的范围的欲望，同样深刻。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;而从历史的角度来看，前一种欲望，或许还发生得更早。但是，这两种欲望所希求的，不是同样的东西。**实际上，它们的区别非常重大，以致于造成了今天主宰着我们这个世界的、各种意识形态的冲突。**因为相信“消极的”自由概念的信徒，认为“积极的”自由概念，有时只不过是残酷暴政的华丽伪装而已；而“积极的”自由观念则认为，自由不是“免于……的自由”，而是“去做……的自由”——去过一种已经规定的生活形式的自由。&lt;/p&gt;
&lt;h2 id=&#34;二积极自由的概念&#34;&gt;二、积极自由的概念&lt;/h2&gt;
&lt;p&gt;**“自由”这个字的积极意义，是源自个人想要成为自己的主人的期望。**我希望我的生活与选择，能够由我本身来决定，而不取决任何外界的力量。我希望成为我自己的意志，而不是别人意志的工具。希望成为主体，而不是他人行为的对象；我希望我的行为出于我自己的理性、有意识之目的，而不是出于外来的原因。我希望能成为重要的角色，不要做无名小卒；我希望成为一个“行为者”(doer)——自己做决定，而不是由别人决定；我希望拥有自我导向，而不是受外在自然力影响，或者被人当做是一件物品、一只动物、一个无法扮演人性角色的奴隶；我希望我的人性角色，是自己设定自己的目标和决策，并且去实现它们。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;当我说我是理性的，当我说理智使我成为一个人，而有别于世界其他事物时，我所指的，至少有一部分就是上述的意思&lt;/strong&gt;。人，最重要的，我希望能够意识到自己是一个有思想、有意志而积极的人，是一个能够为我自己的选择负起责任，并且使用我自己的思想和目的，来解释我为什么做这些选择的人。只要我相信这一点是真理，我就觉得自己是自由的，而如果有人强迫我认为这一点不是真理，那么，我就觉得在这种情形下，我已经受到奴役。&lt;/p&gt;
&lt;p&gt;以做自己主人为要旨的自由，和不让别人妨碍我的选择为要旨的自由，&lt;strong&gt;表面上来看，似乎没有什么重大的逻辑差距，只不过是同一件事的“消极”与“积极”描述方式而已。但是，在历史上，“积极”与“消极”的自由观，却朝着不同的方向发展，而且不一定依照逻辑常理，终至演变成直接的冲突。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;要弄清楚这个现象，其中一个方法，&lt;strong&gt;就是去了解自主(self—mastery)这个比喻，本身所造成的影响力&lt;/strong&gt;。最初，这也许是并无害处的影响力。“我是自己的主人”、“我不是任何人的奴隶”，这种想法并没有害处可言。但是，如柏拉图学派(P1atonists)、或黑格尔学派所想探讨的：我会不会是自然的奴隶?我会不会是我自己那种“不受约束”的激情的奴隶?这些难道不也同样是“奴隶”?进而言之，有些人是政治上的、或法律上的奴隶，有些人则是道德或精神上的奴隶?人类不是曾经有从精神的奴役中得到解放，或者从自然的奴役中，得到解放的经验吗?&lt;/p&gt;
&lt;p&gt;我们更可以认为这两种自我，还被一条更大的鸿沟隔开：那个真实的自我，还可以被看成某种比个人(一般意义下的个人)更广泛的东西，它可以看成个人只是其中一个因素、或一个层面的社会整体，例如：一个部落、种族、教会、国家，以及由现在活着的人、加上已逝者、和末到人世者，所构成的“伟大社会”等。这个“整体”于是被看成“真正的”（true）自我，它将集体的、“有机的”（organic）、独一无二的意志，强加在顽抗的“成员”身上，从而获得它自己的“更高层次”的自由。&lt;strong&gt;思想史上，有人强制他人，要将他们提升到“更高”的自由水平；而使用有机体的比喻，来辩护这种强制，也已经有人指出其中的危险。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;但是，这一类语言之所以能显得有理，是因为我们承认：以某种目标的名义，例如正义、或大众健康的名义，来对人们施以强制，是可能的，而且有时是有理由的；因为群众若是在民智已开的阶段。他们自己也会去追求这些目标，如今他们没有去追求，只是因为他们盲目、无知或腐化。如此一来，我很容易认为，我是为了他们自己、为了他们的利益，而强制他们。于是，我就是在宣称：**我比他们自己，更明白他们真正需要的是什么。**一旦我采取这样的观点，我的立足点，就可能使我忽视人类或社会的实际愿望，借人们的“真实”自我为名，并且代表那个自我，去欺凌、压迫、折磨他们，同时心里却还坚持认为：只要是人类的真正目标，诸如；幸福、责任之履行、智慧、公正的社会、或自我完成等，便一定能和他们的自由相吻合，而这自由即是：自由地选择他“真正的”、但却经埋没而未得表明的“自我”。&lt;/p&gt;
&lt;p&gt;对“消极的”自由概念，人们无疑也可以轻易施展这种魔术般的转化或“戏法”，威廉·詹姆士即曾很公正地以此来嘲弄黑格尔学派的人物。在转化后的情况下，“不准别人干涉的自我”，已经不是一般人心目中，拥有一些实际希望与需求的个人，而是内在的“真”人：这个内在的“真”人，在追求某些“经验自我”所无法想象到的理想目的。事实上，“积极的”自由观念，认为自由即是“自主”(self-mastery)，实已暗示了自我分裂交战之意，在历史上、学理上、以及实践上，已经轻易地助成了人格的剖分为二；其一是先验的、支配的控制者，另一则是需要加以纪律、加以约束的一堆经验界的欲望与激情。具有广泛影响力的，就是这一历史事实。如果这么明显的真理也需要举证的话，那么，这个事实证明：&lt;strong&gt;自由的概念，直接导源于自我、个人、人类，系由何物构成的看法&lt;/strong&gt;。对人的定义施以足够的操纵，则自由是什么意思，便唯操纵者的意愿是从。&lt;/p&gt;
&lt;p&gt;近代历史已经昭然显示，这个问题不只是个学术问题而已。将自我一分为二的后果如何，只要考虑要求自我导向的欲望、要求以一个人“真正的”自我为导向的欲望，在历史上采取的两种形式，就更加清楚。这两种形式：其一，是为了获得独立，而采取自制(self—abnegation)的态度；其二，是根据某一特定的原则、或理想，来“实现自我”，或将自我完全认同于某一特定的原则、或理想，以求取自我独立的目的。&lt;/p&gt;
&lt;h2 id=&#34;三迟隐于内心的碉堡中&#34;&gt;三、迟隐于内心的碉堡中&lt;/h2&gt;
&lt;p&gt;**我是理智与意志的拥有者，我构想我的目标，并且想要追逐那些目标；如果我受阻而无法达成这些目标，我就不再觉得自己是人生情境的主人。**使我不能达成这些目标的原因，或许是自然法则、或许是偶发的事件、或许是人的活动、或许是人类的制度所造成的影响，而且往往不是故意设计的影响。这些力量可能会使我受不了。我要如何才不至于被他们压垮?显然，我必须从我已知为无法实现的欲望中，解放出来。我希望能成为我自己王国中的主人，但是我的边境绵长而不安全；因此为了减少、或消除易受攻击的地方，我把我的国度缩小。&lt;/p&gt;
&lt;p&gt;这就是禁欲主义者、寂静主义者、斯多噶学派、佛门圣徒、以及各种教徒或非教徒所一惯使用的“自我解脱”之途，他们逃离了世界，逃开了社会与舆论的枷锁，其方法是某种深思熟虑后的“自我转变”，这一转变使他们能不再介意那些世俗的价值，能维持自我的孤立，而独立自处于世界的边缘，世界的武器已不再能伤害他们。&lt;/p&gt;
&lt;p&gt;**任何政治孤立主义，任何经济独立政策，任何一种形式的“自主”，都带有一点这种态度。**为了要消除道路上的障碍，我干脆放弃这一条道路；我退隐到我自己的宗教、自己的计划经济、自己刻意孤立起来的领域之中，在这里面，我不必听外人讲话，外界的力量都不再具有影响。这是一种追寻安全的形式，但也有人称之为追寻个人或国家的自由与独立。&lt;/p&gt;
&lt;p&gt;坦率说来，凡我无法获有的事物，我必须训练自己，不去欲求；欲望一旦被消除，或者已成功地受到抵制，即等于欲望得到满足，这样的学说，容或崇高伟大，在我看来，却不折不扣是酸葡萄心理的一种形式：我没有把握获得的东西，就不是我真心想要的东西。&lt;/p&gt;
&lt;p&gt;**至此，以“为所欲为”的能力，作为消极自由的定义，何以行不通，就很明白了。**其实，这也就是穆勒采用的定义。因为，如此一来，倘若我发现我想做，而实际上能做的并不多、或根本不能做，那么我便只要缩减、或消灭我的愿望，我就自由了。按照这个定义，设若有某个暴君、或某个“隐形的说服者”，设法“制约”了他的子民(或顾客)，使他们丧失了原有的期望，从而拥抱他为他们发明的那一套生活方式，甚至将那一套生活方式“内化”，那么，按照这一定义来说，这暴君或说客也是将他们“解放”了。无疑，这样的暴君会使他们“感到”自由。&lt;/p&gt;
&lt;p&gt;**禁欲式的克己苦修，或许是正直、宁静与精神力量的来源，然而，我们却很难理解：为什么克己苦修可以被称为“自由的扩张”? (这不是自由)**假若有敌人来了，我躲到屋子里面去，并且把所有的进出口堵住，因而幸免于难。如此一来，我确是比被他捉去要自由得多；但是，这会比把他打败、把他捉起来，所获得的自由更多吗?如果我做得太过份，把我自己关闭在一个小空间内，我终不免要窒息而死。&lt;/p&gt;
&lt;p&gt;我所处身的世界，是我的意志会遇到阻碍的世界。&lt;strong&gt;那些执着于“消极”自由概念的人，如果认为，自我否定并不是克服障碍的惟一方法，我们还可以将障碍物移开，而克服它：如果这障碍来自人以外的东西，我们就用身体的行动来移除它&lt;/strong&gt;；如果障碍是人为的抵抗，我们就用武力、或说服，来克服它，例如，我可以劝诱某人在他的马车上，为我留个空位，或可以征服一个对我国利益有威胁的国家，这一类的想法，或许还是可以原谅的。&lt;strong&gt;这些行动可能不公正，可能涉及暴力、残酷、奴役他人之类，但行动者由此便能最名符其实地增加自己的自由，则是难以否认之事。&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>刘擎《伯林与自由民族主义》</title>
      <link>https://dodoro.chouxiangpai.com/archives/1750/</link>
      <pubDate>Wed, 04 May 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1750/</guid>
      <description>&lt;h2 id=&#34;摘要&#34;&gt;摘要&lt;/h2&gt;
&lt;p&gt;本文**通过讨论以赛亚·伯林的民族主义论述,分析自由民族主义的理论可能与复杂性。**作者认为,伯林的自由多元主义与文化民族主义之间具有和解包容的可能,但始终存在着深刻的紧张,因此他未能提出一套清晰的关于“自由民族主义”的规范性学说。**伯林思想的内在紧张标志着自由民族主义的实践困境,而仅仅在观念层面上做出分析疏理无法克服这种困境,必须借助具体语境下的社会学分析才有可能在实践中达成自由主义与民族主义的融合。**文章在最后勾勒了当代中国在社会转型的条件下民族主义兴起的形态特征,指出了发展自由民族主义论述的必要性与困难所在。&lt;/p&gt;
&lt;h2 id=&#34;中国的现状&#34;&gt;中国的现状&lt;/h2&gt;
&lt;p&gt;**民族主义思潮在当今中国社会的强劲崛起是一个显著的事实,而与此形成激烈竞争的是晚近兴起的自由主义思潮。**两者之间的紧张与冲突已经成为当前中国公共辩论中最为醒目的话题之一(李世涛主编,2002)。无论是知识分子的争论,还是互联网上的民间大众讨论,无论是对具体事件的直觉反应,还是在理念层面上的立场言说,&lt;strong&gt;民族主义与自由主义呈现出严重的分歧,公众意识在此出现了两极化的对垒。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在意识形态谱系的一端,**民族主义被写在信念的旗帜上,发出悲壮的召唤,自由主义主张的普适价值(人权、自由与民主)经常被视为虚假的甚至伪善的;而在另一端,民族主义被钉在历史的耻辱柱上,象征着狭隘、偏激与灾难,是需要被克服与超越的蒙昧与危险的狂热情感。**在公共讨论中,人们经常会被置于一种强制性的审问与抉择:是放弃还是坚持民族主义立场?而答案似乎是如此至关重要。对激进的民族主义者来说,这是检验“爱国”与“卖国”、“忠诚”与“背叛”、“英雄”与“败类”的试金石;而对于另一方的自由主义者来说,是否能将自由主义的价值置于民族情感之上,意味着对“开放”还是“封闭”、“文明”还是“野蛮”、“和平”还是“暴力”的抉择。&lt;/p&gt;
&lt;p&gt;在当代中国的社会转型中,**自由主义与民族主义之间的紧张成为一个令人焦虑的问题。**在这样的背景下,“自由民族主义”(liberalnationalism)———这种能够使自由主义与民族主义彼此和解、甚至相互结盟的理念———对于中国知识分子具有格外的吸引力,它可能为我们的社会认同提供新的想象空间,为中国未来的发展提供新的政治文化选择。因此,考察自由民族主义的理论内涵,探讨它与中国社会转型的相关性具有格外重要的意义。&lt;/p&gt;
&lt;h2 id=&#34;伯林的自由民族主义思想&#34;&gt;伯林的自由民族主义思想&lt;/h2&gt;
&lt;p&gt;本文试图通过对以赛亚·伯林的民族主义思想的讨论,分析自由民族主义的理论可能与复杂性,并在当代中国民族主义话语的形态特征中,讨论发展自由民族主义论述的必要性与困境。任何文化民族主义的理想,在其实践中都不得不与政治相关,其现实形态都或多或少地必须是一种“政治民族主义”。伯林的犹太复国主义本来只是追求一种“在家”的理想,却不能不为寻求家园而展开政治斗争。&lt;/p&gt;
&lt;p&gt;伯林非常清楚地意识到这一困难。在《两种民族主义概念》的访谈中,当被问及,“怎样的政治结构才适合文化自决的新时代并且维护自由,避免有一些一触即发的流血冲突”?伯林的回应没有给出答案,而是更加突出了这个问题的严重性———“没有政治框架的文化自决恰恰是现在面临的问题……像赫尔德那样的理想主义者显然并没有考虑到这问题”(嘉德尔斯,1999:260)。也正是在这个意义上,他说赫尔德以及马志尼所抱有的信念———各个“社会可以沿着它自身内在的路线和平地、非暴力地发展,对其他同样致力于和平发展的社会非但不存嫉妒与敌意,而且还非常同情”———“是过于天真”了(嘉德尔斯,1999:259-260)。而对于这种善意的“天真”,伯林并没有像后来的一些自由民族主义者试图做的那样,设法发展一套更为“成熟”的理论原则来加以弥补,因为(再一次)他的反唯理主义的知识倾向妨碍了他,在他看来,那是更为天真的做法。伯林愿意做的,就是怀着对这种天真善意的同情,同时以他“狐狸般的”警觉,不断地对民族主义“进攻性”的危险予以解剖,并提出警策。&lt;/p&gt;
&lt;p&gt;那么,&lt;strong&gt;什么是伯林最为敏感的政治民族主义的危险?当被问及:“是什么使得文化自决的热望演变为民族主义的进攻”时,伯林回答说:一种受到伤害的“民族精神”,打个比喻说,就像一根被强力扳弯的树枝,一旦放开就会猛烈地弹回去&lt;/strong&gt;。民族主义,至少在西方,是压力引起的创伤所造成的。至于东欧和前苏维埃帝国,现在看起来是一个巨大的、开裂的伤口,经受多年压迫和屈辱之后,解放了的民族和它们的领袖容易产生一种剧烈的反作用,产生一种突然爆发的民族自豪感和往往具有进攻性的坚持自己主张的行为。&lt;/p&gt;
&lt;p&gt;“弯枝”(benttwig)成为伯林论述民族主义的一个中心隐喻。“弯曲”(bent)暗示了民族遭到的羞辱性征服,来自“更先进的”、文化上更优越的外国势力的征服。但是,这个被迫弯曲的枝条终究要反弹回去,以鞭挞民族的欺辱者。没有一个民族能够忍受外来的长期羞辱,“迟早会有无法控制的强烈反应。人们再也不愿容忍一个有优越感的民族、阶级或者其他什么东西盛气凌人的态度和侮辱。迟早,他们会提出民族主义的问题:&amp;ldquo;我们为什么得听他们摆布?&amp;rsquo;&amp;ldquo;他们有什么权利……?&amp;rsquo;&amp;ldquo;我们怎么办?&amp;rsquo;&amp;ldquo;我们为什么不能……&amp;rsquo;”(嘉德尔斯,1999:257)。这里的关键词是“羞辱”以及“雪耻”。这是伯林在德国民族主义的形成中看到的最为突出的情感。“弯枝”会以盲目的、非理性的过度反弹来回应曾经遭受的羞辱,成为攻击性的民族主义。这是弯枝隐喻的重点所在。&lt;/p&gt;
&lt;p&gt;为什么伯林会对攻击性的民族主义如此忧虑?血腥的冲突、残酷的战争———这些“人道代价”当然是重要而且明显的理由。但还有更为潜藏的理由。**在走向雪耻的民族自决的政治斗争中,民族主义话语几乎无可避免地走向极端,走向偏见,成为一种偏执的、反自由的意识形态,一种惟我独尊的、整体性的、道德上无限制的民族主义。**这是一种与马志尼等民主派所持有的民族主义反差鲜明的另一种民族主义:“民族自由存在于对来自外部和内部的一切可能障碍的铲除中,也就是要对一切权力的竞争者发起圣战———内部的阶级或团体,以及外部的力量,即其他民族。”这种形态的民族主义和它的两个“令人恐惧的兄弟”———种族主义和宗教狂热主义———一样,会演变出我们时代“最恐怖和最野蛮的现象”(伯林,2004b:287-288)。在此,攻击性民族主义对自由价值的压制与摧毁,是伯林忧虑的深层原因。&lt;/p&gt;
&lt;p&gt;所以,即使民族的政治自决就长远而言有利于这个民族的文化自由发展,但如果在短期内会出于“民族利益高于一切”而限制许多个人的和群体选择自己生活方式的自由———这是许多后来的自由民族主义①者愿意承担的代价,伯林将对此十分勉强。对他而言,集体性的自决并不具有内在的价值,而只是一种条件,与其他许多条件一样,其目的是为了个人和群体的自由发展。因此,正如米勒和汉普夏尔(StuartHampshire)等人都指出的那样,“民族自决”对于伯林来说只是“工具性”的(Miller,2005:117)。从这个角度来看,伯林对犹太复国主义的支持并没有普遍性的原则依据,而是出于一种实际的、工具性的考虑。&lt;/p&gt;
&lt;p&gt;伯林的另一位朋友、哲学家沃尔海姆(RichardWollheim)指出,犹太复国主义对于伯林不是意识形态,而只是推动以色列立国的实际途径,是“对犹太人具体苦境的明智的解决方案”。**言下之意,如果还有别的方法(比如伯林说过,如果世界上有这样一种药,犹太人吃了就能够一夜之间变为丹麦人,他会鼓励他们吃这种药),伯林很可能不会选择犹太复国主义。**在沃尔海姆看来,这就是为什么在对犹太复国主义的正当性论述中,伯林对“积极正当性论证”持极为温和的态度,而偏爱“消极正当性论证”(Wollheim,2001:166)。然而,犹太复国主义毕竟是一种意识形态的蓝图,就此而言,汉普夏尔的问题是尖锐的———伯林如何可能调和对先验蓝图的反对与他对犹太复国主义的支持?马格利特最终的结论是,这两者之间存在着真实的紧张,伯林也没有真正解决这种紧张(Margalit,2001:157)。&lt;/p&gt;
&lt;p&gt;沃尔海姆也指出,伯林犹太复国主义与他的总体生活态度具有“很别扭”的关系,“他支持犹太复国主义多少是一个例外”(Wollheim,2001:168)**。总的来说,以赛亚·伯林对民族主义怀有一种爱恨交加的复杂情感,其中的紧张在于,他一方面重视民族“文化自决”的价值,因为这对于多样而自由的生活方式是必要的;但他在另一方面极为忧虑民族“政治自决”的危险,因为政治形态的民族主义是不稳定的,总是可能走向反自由的方向。**非政治化的文化自决是伯林所期望的,而他良好的“现实感”告诉他,离开政治的文化自决往往是不可能的。正是民族主义所要求的“政治化”使伯林犹豫不决。&lt;/p&gt;
&lt;h2 id=&#34;社会转型中的中国语境创伤记忆与雪耻情结&#34;&gt;社会转型中的中国语境:创伤记忆与雪耻情结&lt;/h2&gt;
&lt;p&gt;本文以上的分析所获得的一个结论是:**伯林思想的内在紧张表明,自由主义与民族主义之间的冲突,无法仅仅通过思想观念层面上的清理来解决,无法诉诸一套明确的政治哲学原则或纲领来化解。**自由民族主义是一种实践性的改革方案。如果我们期望人类普遍的自由价值与对自身民族的特殊偏爱之间达成和解,只能在具体语境的实践中实现。因此,我们必须由思想观念的研究中启程,走向社会学的探索,在具体的语境中展开社会学层面的分析和判断,开拓出富有实践性的自由民族主义的改良路径。&lt;/p&gt;
&lt;p&gt;如果以自由民族主义的视野来考察,中国当下突出而紧迫的问题是自由主义与民族主义之间的相互排斥和极端对立。**中国的自由主义者从来没有发展出一套自由的“民族论述”,而中国的民族主义者也从来没有发展出民族的“自由论述”。**这是双方的失败,而其负面的结果是:一种偏激和危险的民族主义情绪日益高涨,既妨碍了自由的价值, 也最终会损害民族的利益。伯林曾指出,在民族主义兴起的过程中有两个关键的因素:一是民族经受的历史创伤,一是现代化过程中的社会动荡与结构变迁。这两点都与中国目前的民族主义形态有关。&lt;/p&gt;
&lt;p&gt;首先,中国的民族主义情绪来自一种创伤性的历史记忆,&lt;strong&gt;这是一个客观的社会心理事实,如果不能同情地理解这种社会心理,也就不可能发展出具有实践潜力的自由民族主义论述&lt;/strong&gt;。伯林在一篇短文《关于偏见的笔记中》中表达了民族主义“常常是创伤的产物”这一观点,其中特别提到“如果俄国人没有被西方视为野蛮的大众,中国人没有在鸦片战争或更普遍的剥削中受屈辱”,他们不会轻易接受极端的观念(伯林,2003c:396)。中国的历史无疑记载着民族的创伤体验。**但是,历史记忆具有特定的选择性,只有在当下的语境中重新建构之后才能形成一种有力的叙事。设想一下,对于一个“正统的汉民族主义者来说”,最为深重的历史创伤应该是千百万“汉人”曾在长达250年的时间里沦为满人的“亡国奴”。**还有什么比这样的奇耻大辱更令人沉痛的历史记忆吗?实际上,从“反清复明”的先驱义士到孙中山的革命同盟,一直曾坚持着激昂的“排满”诉求,这种民族主义的斗争叙事持续了几百年,并在某种意义上促成了中国作为现代民族国家的诞生。然而,如今电视剧中那些连篇累牍的关于大清皇帝们“丰功伟绩”的故事,却丝毫不会激发我们的民族主义激情。因为历史变迁了,“满人”早已融入中华民族的大家庭,排满主义的义愤已经被化解、被超越而最终被遗忘了。&lt;/p&gt;
&lt;p&gt;**历史的“创伤记忆”只有在“新鲜伤口”的刺激下才会重新复活。**今天中国的民族主义义愤主要指向西方(尤其是美国)与日本。从中国大使馆被美军轰炸、到南海的飞机相撞、到日本公司职员在珠海的集体嫖娼等一系列事件中,中国人感受到直接的、当下的耻辱体验。这种新的屈辱感选择性地激活了创伤记忆———从鸦片战争、甲午战争直到日本侵华战争所遗留的历史伤口,而作为这一历史记忆的中心象征———火烧圆明园以及南京大屠杀等事件———散发着格外血腥的气息。于是,“新仇”接续“旧恨”构成了悲愤性的民族历史叙事。**由此可见,历史创伤转化为一种社会心理事实是社会学层面上的选择性建构。创伤记忆或许会激发极端的、狭隘的与排外的民族主义情绪,但这种生成转化并不是直接的,也不是必然的,它与现代性条件下的社会变迁具有深刻的关联。**这正是伯林思想蕴含的第二个启示。&lt;/p&gt;
&lt;p&gt;伯林在分析俄国与德国的民族主义兴起时指出,“尽管在我看来, 民族主义首先是受到伤害的社会做出的反应,不过这虽然是民族主义肯定自身的必要条件,却不是一个充足的理由。”在伯林的分析中,“社会变迁”(对于俄国,是彼得大帝剧烈而迅速的现代化造成的冲击)是民族主义兴起的重要前提,“技术革命的后果或新市场的开拓和旧市场的衰败,各阶层的生活因此而被打乱……&lt;strong&gt;于是人们努力创造一种新的综合,一种新的意识形态,以便为与他们的信念及生活方式相对立的势力做出的反抗加以解释和辩解,并指出一个新的方向,为自己提供一个自我认同的新中心&lt;/strong&gt;”(伯林,2003a:416)。这段论述对我们认识当下的状况仍然具有相关性。&lt;/p&gt;
&lt;p&gt;在中国最近20多年的改革开放的探索实践中,社会的价值观念与阶层结构都发生了剧烈的动荡和变化。文革之后终结了以“阶级斗争”为核心的意识形态,“竞争”、“商品”、“资本”和“财产”逐渐成为公共话语中的关键词,“市场价值”导向的意识形态叙述改变了社会的基本价值观念与行为方式。一系列改革方案在刺激生产力增长的同时也重新分配了社会资源和财富,伴随着全球化趋势的扩张、新技术革命的来临和产业结构的重组等因素,中国出现了新的社会分层,相应的贫富不均也日渐鲜明。所有这些精神领域和物质层面的变化发生在短短的20多年之间,使中国人感受到强烈的现代化冲击,在社会心理层面造成了自我认同与价值归属的危机和紊乱。**在这种状况下,人们需要一种新的意识形态层面上的综合,以获得明确而统一的自我认同和对于生活的“意义感”。而民族主义生逢其时地提供了一个认同与意义资源。**尤其重要的一个原因是,中国的现代化深刻地介入了当今的全球化过程,中国作为一个民族国家进入了世界性的经济、政治和文化多个维度的互动,既是交换融和,也是博弈斗争。虽然中国在参与全球化的过程中获得许多经济利益,但全球化作为一个博弈格局仍然具有结构性的不平等,中国仍然受到来自美国、日本等“发达国家”的压力。虽然社会成员所经历的社会动荡与全球化的不平等之间的关系十分复杂,但公众在寻求自我认同与价值归属方面需要一种“简洁性”,而民族主义恰恰提供了这种简洁性。于是,民族历史的创伤记忆,经过改革年代社会转型的特定条件,得以在社会心理层面上的重构,形成当今中国民族主义的特殊形态,可称之为“雪耻型民族主义”。&lt;/p&gt;
&lt;p&gt;创伤记忆只是今天民族主义勃兴的一个源头。&lt;strong&gt;现代性的社会变迁需要调动与此平行的另一种民族记忆,那是以“强汉盛唐”的辉煌传说 为代表的历史叙事,一种中华帝国的“华夏中心主义”叙事,它唤起了许多中国人对往昔的强盛、骄傲与尊严的深切缅怀,并激发出对未来“中华民族伟大复兴”的热烈想象。创伤记忆与复兴想象,这两种叙事共同建构了当代中国民族主义的气质形态。&lt;/strong&gt;“雪耻型民族主义”———以重返远古时代曾经的辉煌来彻底洗刷近代以来的屈辱,这种民族主义话语不只是一种情绪性的集体宣言,同时也正在发展成为一种意识形态,为日常经验提供了一种可能的认知框架。在这种叙事所支持的阐释图景中,所有个人的遭遇只要涉及异族外邦就不再是孤立的、意外的和偶然的,都与文化、政治、军事与经济的结构性压迫相联系。来自外企上司的傲慢言辞、被拒绝的签证、在海关遭遇的“特别问询”,甚至目睹那些出入高级宾馆的异族男人身边伴随着迷人的中国女人等等最细微的不良感受,都会激发悲愤的民族情绪,可以毫不迟疑地与奥运会申办的落选、与大使馆被炸、与中国公民在国外被警察殴打等等“整合”起来,生成逻辑一致的整体性耻辱感。我们在20世纪初郁达夫的私性小说《沉沦》中已经看到了这种阐释的原型。小说中那位苦闷的青年主人公在日本妓院遭受冷遇之后,发出了强劲的民族呐喊:“中国呀中国!你怎么还不强大起来!”“祖国呀祖国!你快富起来!强起来吧!你还有许多儿女在那里受苦呢!”借助于民族主义的解释逻辑,个体的不幸遭遇将得以与民族的苦难命运有机地合为一体,由此超越了个人的卑微感,上升为一种悲壮体验。而日常经验与抽象理念互为增援,不断地加固了民族主义宏大叙事的建构,最终为身处社会变迁压力下的人们提供了自我认同和价值归属的可能。&lt;/p&gt;
&lt;p&gt;**雪耻型民族主义具有不断激进化的可能。骄傲与创伤的双重性反差会产生一种激增性的循环反馈:对雪耻的诉求越强烈,就越容易被外来的冲击所挫伤,而越发深重的屈辱感将会唤起更为迫切的复兴渴望。**因此,雪耻型民族主义具有一种持续的内在紧张,宛如一个允诺已久却迟迟未临的狂欢高潮,令人焦虑不安。实际上,我们每个人都处在这种集体性的焦虑之中。即便那些民族主义的极端反对者,或“民族虚无主义者”也是如此。那些诸如“宁愿再被殖民三百年”或者“解散中国”的鼓吹,正是试图以一种自虐性的狂热一劳永逸地解脱这种焦虑。无论是拒绝还是坚持,民族情感都是特定历史的造物,也是我们共同的地平线。如果我们无法摆脱民族主义,真实的问题是我们怎样对待民族主义。&lt;/p&gt;
&lt;p&gt;雪耻型民族主义具有某种反自由的倾向,也是伯林所说的“弯枝”隐喻典型形态:它将“民族的统一与自决的利益提升为最高价值,必要时其他一切考虑必须服从这种利益……”“假如满足我所归属的有机体的需要变得与实现其他群体的目标不可调和,那么,我或者我不可分割地属于其中的社会别无选择,只能强迫那些群体屈服,必要时就诉诸武力。假如我的群体———让我们称它为民族———想自由地实现其真正的本性,就必须清除道路上的障碍”(伯林,2003a:403、409)。&lt;strong&gt;在当今中国的雪耻话语中,尤其在网络论坛最为极端的呐喊中,我们的确可以感受到极端的、盲目的和非理性的复仇主义的潜流&lt;/strong&gt;———以“来一次东京大屠杀”来雪“南京大屠杀”之耻,以“日本是劣等民族”来回应“支那劣等民族”论,以我对你的仇杀来血洗你对我的蹂躏、以野蛮来应战野蛮、以残暴回敬残暴。而不同意这些论调的人,一概被极端的民族主义者剥夺了作为“中国人的资格”,是美国的或者日本的“走狗”。但是,辨识现存民族主义情绪中的极端倾向是容易的,简单地指责非理性的民族主义情绪也并不困难,但仅止于此却无助于克服和避免其危险。&lt;/p&gt;
&lt;p&gt;**在动荡的社会变革时期,如果没有一种有效的对时代变化的解释话语,民族主义很自然地得以借助历史的创伤记忆成为新的意识形态。如果不能发展出有效的自由民族主义论述,狂热的、激进的、攻击性的民族主义将占据主导地位。**在中国发展出自由民族主义的论述是困难的,却不是不可能的。如何克服与超越“自由的”价值与“民族的”价值之间的两极对立?对于中国的自由主义者来说,如果仅仅坚持一些古典自由主义的教条,如果将一切对自身民族的特殊依恋都看作无可救药的狂热偏见,如果相信只有成为“世界主义者”才能摆脱极端民族主义的危险,那么就等于放弃了发展自由民族主义的可能。**在这个意义上,中国的自由主义者需要从自身狭隘的偏见中解放出来,怀着对民族情感与自身利益的同情理解,对当代中国与世界格局提供更深刻的、更有说服力的论述,才有可能克服雪耻型民族主义走向极端的潜在危险。**中国的民族主义需要注入自由主义的血液,但这不应该是唯理主义的教条,不是普适主义的幻想,而是一种坚持最低基本价值的、同时具有高度智慧的自由改良主义。&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书笔记——养育男孩</title>
      <link>https://dodoro.chouxiangpai.com/archives/1699/</link>
      <pubDate>Fri, 22 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1699/</guid>
      <description>&lt;h2 id=&#34;序言&#34;&gt;序言&lt;/h2&gt;
&lt;p&gt;关于成功与快乐的科学研究表明，**财富上的成功并不是美好生活的关键。**事实上，财富有时会让人变得痛苦和孤独。无论你的孩子未来会如何，如果他能够保持温暖的内心和快乐的天性，形成强壮的脊梁与积极的态度，他的成长之路便会更加顺利。在生活中取得成功需要情商，而不仅仅是具体的知识。&lt;strong&gt;与人为善是打开快乐之门的真正的钥匙。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;**男孩们总是精力充沛。他们喜欢到处走动，尝试许多事情。**同时，他们也非常坦率真诚。如果能够保持这些品质，我们的男孩便会成为很好的父亲、朋友，甚至是优秀的领导与合作伙伴。&lt;/p&gt;
&lt;p&gt;数字化时代，我们应当和自己的儿子多一些互动，而不是让他们沉迷于限制大脑发展和阻碍人际交往的电脑屏幕或是电子游戏。这是一个取得平衡的问题，而这本书则能够帮助你找到这种平衡。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;男孩的成长过程会经历三个不同的阶段&lt;/strong&gt;，父母需要根据不同阶段的特点区别应对。我们还需要知道，男孩和女孩的激素分泌以及发展轨迹也是不一样的。起初，男孩学习新事物的速度会比女孩慢得多，但很快会赶上来。对此，我们需要循循善诱，并且让学习变得有趣而积极，引发他们的兴趣。&lt;/p&gt;
&lt;h2 id=&#34;第1章-这就是男孩&#34;&gt;第1章 这就是男孩&lt;/h2&gt;
&lt;p&gt;我们生活的今天，女孩更能把握自己，她们积极向上，工作努力。但是，男孩在生活中却经常不思进取：学习成绩不佳，与同学关系不融洽，容易暴躁，容易染上酗酒、吸毒等恶习。男孩和女孩在行为上的这种差别很早就产生了，不信你可以到幼儿园亲眼看看。女孩会聚在一起玩，非常快乐；男孩们却只知道疯跑，就像印第安人围着野牛疯跑一样。他们故意惹女孩生气，还和同伴打架。&lt;/p&gt;
&lt;p&gt;“男子汉”的特征无处不在：&lt;strong&gt;一方面，他们缺乏经验，喜欢冒险；另一方面，他们有能力，富有同情心，性格坚强。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;上小学时，男孩的作业写得潦草不说，还错误百出。到三年级时，绝大多数男孩不再愿意看书。到了中学，他们不参加辩论赛、音乐会、讨论会或其他非运动类的活动。他们假装对任何事都漠不关心，在他们看来，“无知就是酷”。&lt;/p&gt;
&lt;p&gt;十来岁的男孩根本不懂男女之间的感情，也不知道怎样讨女孩的欢心。当有女孩在身边时，有些男孩盛气凌人；但是也有些男孩过于腼腆，不喜欢有女孩在身边。他们有的甚至不懂最基本的谈话技巧。&lt;/p&gt;
&lt;p&gt;**新的研究成果表明，男孩和女孩在性格上是不一样的，这进一步证明了父母的直觉是对的。**我们开始懂得怎样欣赏男孩的阳刚之气，不管它以何种形式表现出来，我们都不再压制它。&lt;/p&gt;
&lt;p&gt;我们希望男孩能成为优秀的男人，而我们能够帮助他们成为这样的人，其中，理解他们是关键。&lt;/p&gt;
&lt;h2 id=&#34;第2章-男孩成长的三个阶段&#34;&gt;第2章 男孩成长的三个阶段&lt;/h2&gt;
&lt;p&gt;男孩的成长过程并不是一帆风顺的。他们的成长要经历一个特定的过程，没有捷径。男孩在成长过程中所发生的变化，以及他们在不同时期所表现出的状态和活力都会令我们吃惊。但是人们的困惑在于不知道他们需要什么，即使知道他们的需要，也不清楚应该在什么时候给予。&lt;/p&gt;
&lt;p&gt;男孩的成长要经历三个阶段，这一点从古至今、在世界各地都是如此。&lt;/p&gt;
&lt;p&gt;**第一阶段是从出生到6岁——这个年龄段的男孩是属于母亲的。**他是“她”的孩子，虽然父亲在其中也扮演了非常重要的角色，但是他还是属于她的。在这一阶段，父母的任务是让孩子在爱的包围下安全地成长，让这一阶段成为男孩成长过程中温馨的一站。&lt;/p&gt;
&lt;p&gt;**第二阶段是6~13岁——在这个阶段，男孩感受到来自内心世界的召唤，开始尝试着成为男人。**这时候，男孩在感兴趣和偏爱的活动方面越来越像父亲。（虽然男孩与母亲仍然保持着密切的联系，但是更广阔的世界开始向他招手。）在这一阶段，父母的主要任务是，让孩子在嬉笑玩闹的过程中形成善良的品性，同时培养孩子的竞争意识，并教给他们这方面的技能，使其成为一个全面发展的人。在这个年龄段，男孩为自己能够成为一个男人而感到高兴。&lt;/p&gt;
&lt;p&gt;**第三阶段是从14岁到成年——在这个阶段，男孩如果要完成从幼稚到成熟的转变，就需要成熟男人的引导。**这时，父母在男孩的生活中不再占据主导地位，但是他们必须为儿子挑选好的引导者，否则儿子就会在同样无知的同伴身上寻找自我。在这一阶段，男孩参加成人社团活动的机会越来越多，这些活动将帮助他们学会与人沟通的技巧，让他们成为有责任感、自尊自爱的人。&lt;/p&gt;
&lt;p&gt;对于那些身为6~13岁之间男孩的父亲来说，他们不应该再把精力只放在工作上。父亲常常缺席家庭活动会给男孩造成不良影响，会让男孩感觉不到来自父亲的支持。这样的父亲必然会伤害他们的儿子。&lt;/p&gt;
&lt;h4 id=&#34;1从出生到6岁温柔岁月&#34;&gt;&lt;strong&gt;1、从出生到6岁：温柔岁月&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;婴儿就是婴儿。自己是男孩还是女孩，他们并不关心，我们大人也不应该在这个问题上浪费精力。**婴儿喜欢让人抱着，喜欢有人和他们玩，喜欢被人逗，喜欢咯咯地笑；他们对这个世界充满好奇，喜欢探险，四处摸索。**他们的性格迥异。一些孩子比较容易安抚——他们安静、放松，一觉就睡很长时间。但有些孩子喜欢制造噪声，很难入睡，一直动来动去。还有一些孩子性情急躁，需要父母不停的爱抚才能平静下来。&lt;/p&gt;
&lt;p&gt;如果男孩主要由母亲来照料，那么在这个孩子的心中，母亲是他寻求爱情的第一参照。从男孩蹒跚学步时起，**如果母亲严格要求，定下种种原则，但是从没有打骂、羞辱过孩子，那么他会大踏步地前进。**他知道，他在母亲心中占据着特别重要的地位。&lt;/p&gt;
&lt;p&gt;当儿子抓到蜥蜴或者用泥巴捏出馅饼时，母亲会喜形于色，对孩子的成就大加赞叹。父亲也会和孩子打闹、开玩笑，动作是那么轻柔。当儿子生病时，父亲也会在一旁轻声安慰，为他读故事书哄他入睡。&lt;strong&gt;这会让小男孩懂得：男人是善良的，生机勃勃的；男人同样会阅读，有能力撑起这个家。&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&#34;26&#34;&gt;&lt;strong&gt;2、6~13岁：学着成为男人&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;男孩到了6岁左右，一个巨大的变化出现了。甚至连那些最安静的男孩也突然想舞刀弄枪，幻想自己身披着超人斗篷，与想象中的坏人较量、大声吼叫。这些重要变化并非偶然。**6岁左右的男孩似乎更喜欢和爸爸或其他男性在一起，与他们形影不离，想向他们学习，模仿他们。**他们的目的就是学着做一个男人。&lt;/p&gt;
&lt;p&gt;男孩突然对父亲产生了兴趣，并不说明已经到了母亲该退出他们生活领域的时候。如果母亲突然消失，带走了她所有的关爱和温暖，他就会发生可怕的转变：为了抑制自己的忧伤和痛苦，他内心深处会关闭与母亲有联系的方面，即他温柔、可爱的一面。&lt;/p&gt;
&lt;p&gt;**矮个儿男孩更容易感到害羞、焦虑或压抑，但是最近一次研究并没有得出同样结论。**原因可能是社会在变化，变得更为多样化，更为宽容。如果孩子能够得到家庭成员的表扬和肯定，并且能与家人进行良好的交流，那么虽然与别的孩子不一样，他也不会感到特别有压力。&lt;/p&gt;
&lt;p&gt;男孩从6岁左右到13岁的这段时间对爸爸来说至关重要。**这是爸爸对孩子产生影响，同时也是在儿子心中树立英雄形象的关键时期。**现在就是“抽空”做这些事的时候。小事同样重要：夏天的夜晚，和儿子一起玩耍；边散步边和小家伙谈论生活，向他讲述自己的童年；因为喜欢，所以和儿子一起运动，一起培养共同的爱好。美好的回忆始于此，几十年后，无论是你还是他，每当回首往事，都会感到无尽的深情。&lt;/p&gt;
&lt;h4 id=&#34;314岁向男人转变&#34;&gt;&lt;strong&gt;3、14岁：向男人转变&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;男孩14岁左右开始进入另一个发展阶段。在一般情况下，此时男孩进入了快速发育期,身体内部正在发生显著变化——睾丸激素大幅增加，含量几乎是以前的8倍！尽管每个男孩都大不相同，**但是这个年龄的男孩们有一个共性，那就是：好辩、焦躁、喜怒无常。**这并不说明他们变坏了，只是他们发生了彻底的变化，拥有了一个全新的自我。他们需要自己解答成长道路上遇到的疑惑，需要开始新的征程，迎接新的挑战，从而学会生活——生物钟在催促他们前进。&lt;/p&gt;
&lt;p&gt;对于十几岁的男孩来说，他们和父亲相处时总会意气用事，令对方发狂。通常，&lt;strong&gt;父亲会想尽一切办法去疼爱自己的儿子，但是做到这一点并尽力去教导孩子&lt;/strong&gt;，似乎是不可能完成的任务。两个男人在一起总会使事情变得复杂难解。如果此时有人在其中调节，那么父子之间的紧张关系就能得以缓和。（一些出色的电影就是以此为题材的，例如《王者之旅》和阿尔伯特·芬尼主演的《乡村之恋》。）&lt;/p&gt;
&lt;p&gt;**需要把男孩培养成谦虚的人，这一点非常重要。**日常小事能够帮助他们学会谦虚，例如当他们做错事该道歉的时候必须要求他们道歉，还要让他们学会助人为乐、尊敬他人。孩子们必须清楚自己在世界上的位置，或许这个充满竞争的世界会让他们懂得这一点。&lt;/p&gt;
&lt;p&gt;十几岁的男孩总是热衷于自己的想法，他们的道德标准只服从于自己的兴趣，从不考虑别人的感受。作为父母，**我们的任务是，让他们参与有关义务、公正以及是非的热烈讨论。我们必须强化一些基本品质——负责、全面考虑问题、为他人着想、考虑后果。**仅仅爱孩子是不够的，让他们学会坚忍才是问题的关键所在。母亲让他们知道这一点，父亲使这一点在他们的头脑中得到强化。如果孩子对此还是没有概念，那么年长者就该站出来，身体力行地教导他们。&lt;/p&gt;
&lt;p&gt;对于14岁或者16岁的男孩来说，他们还远没有做好“独自面对外部世界”的准备。**这时，必须有人担当起“桥梁”的角色，这也正是引导者需要做的。**在这个年龄，我们不能让少年们在没有成年人关照的情况下整天和同龄人待在一起。引导者发挥的作用超过老师或者是教练：引导者在孩子们心中占据着特殊的地位，同时孩子们对他们来说也很重要、很特殊。&lt;/p&gt;
&lt;p&gt;你需要一些这样的朋友，他们关心、喜欢你的孩子，并能像个长辈一样经常为孩子做一些事。这些朋友会对你的孩子产生兴趣，会询问他们对某些事的意见。他们欢迎孩子常去他们家中玩，使孩子成为他们家中受欢迎的人。当孩子与自己的家人关系紧张时，他们能倾听孩子们的心声。&lt;/p&gt;
&lt;p&gt;**如果孩子的父母较为封闭，孩子就会受到伤害。**对此，我深有体会。我的父母本来就是害羞的人，移居加拿大后，他们更内向、更怕见人了。他们一直没能为我们找到同龄的玩伴，他们也没交到新朋友，没有自己的朋友圈。因此，我们无法使自己的生活更丰富多彩，无法扩展我们的生活范围。结果，我和妹妹长到十几岁时，为了从自己的小世界里挣脱出来，我们做过很多冒险的事，最后戏剧般地进入了更为广阔的世界。&lt;/p&gt;
&lt;p&gt;今天，母亲在养育孩子方面做得很出色，但是父亲才刚刚意识到自己在孩子成长过程中所发挥的重要作用。为孩子找到一个好的引导者，是父母们在抚育孩子的征程上遇到的另一个难题。&lt;/p&gt;
&lt;h2 id=&#34;第3章-睾丸激素&#34;&gt;第3章 睾丸激素&lt;/h2&gt;
&lt;p&gt;睾丸激素会使男孩发生重大变化：4岁——男孩开始变得淘气、好动。13岁——男孩进入快速成长时期，缺乏目标。14岁——遇到人生历程中的第一次考验，开始进入成年期的早期阶段。&lt;/p&gt;
&lt;p&gt;出生几个月后，婴儿睾丸激素的含量会下降到刚出生时的1/15。在婴儿蹒跚学步的整个阶段内，他体内睾丸激素的含量会一直比较低。**蹒跚学步的男孩和女孩的行为表现非常相似。当男孩长到4岁时，睾丸激素激增——达到之前的两倍。**为什么会发生如此巨大的转变，没人能解释清楚。长到5岁时，小男孩会对战斗、英雄行为、冒险以及需要花费极大精力的游戏产生越来越浓厚的兴趣。&lt;/p&gt;
&lt;p&gt;**在男孩5岁的时候，体内的睾丸激素会下降一半。这时，他会再次平静下来。**这时，他体内的睾丸激素仍然足以使他对运动、冒险以及探险感兴趣，但唯独对女孩不“感冒”。在11~13岁这段时间内，睾丸激素含量开始再次急剧上升——会达到蹒跚学步时期的8倍。睾丸激素激增的结果就是，男孩的四肢会突然猛长，以至于他全身的神经系统都会发生根本性变化。&lt;/p&gt;
&lt;p&gt;**睾丸激素同样会对男孩的心情和精力造成影响，其影响力超过了生长激素。**毫无疑问，这会使男孩精力旺盛，也会使他们变得狂躁。这也是几个世纪以来，人们为了驯服马，要先阉割它们的原因。&lt;/p&gt;
&lt;p&gt;性欲和攻击行为之间存在着某种联系——都是受大脑和激素的控制。一些人经历的不幸和痛苦（如遭到性侵犯）都可以追溯到性欲和攻击行为上。因为它们之间存在着这种关系，因此，要帮助他们认识到：**女性和他们一样都是人类，要站在女性的立场上，多为她们考虑，努力学着做个好男人。**帮助他们认识到这一点非常重要。&lt;/p&gt;
&lt;p&gt;**睾丸激素能使男孩精力旺盛，注意力集中。**体内睾丸激素含量高的男孩通常具有很强的领导能力。在学校里，老师会发现，一些男孩要么是班里的英雄，要么就变成无可救药的坏学生，因为这样的孩子没有中间道路可选。如果老师能和这类男生成为朋友，引导他们把过剩的精力放在做有意义的事情上，这些男孩就能茁壮成长，这也有利于学校建立良好的氛围。&lt;/p&gt;
&lt;p&gt;男孩要学会体会别人的感受和情绪。如果他是个充满同情心的人，那么一定要让他感受到关爱和体贴。&lt;/p&gt;
&lt;h2 id=&#34;第4章-男孩和女孩在大脑结构上的差别&#34;&gt;第4章 男孩和女孩在大脑结构上的差别&lt;/h2&gt;
&lt;p&gt;当胎儿还孕育在母体中时，男女胎儿在大脑结构上的差别就非常明显了。其中一个差别是，男孩大脑的发育速度明显慢于女孩大脑的发育速度。另一个差别是，男孩大脑的左右半球之间的联系少于女孩。&lt;/p&gt;
&lt;p&gt;婴儿出生前后，他们大脑的生长就像放在太阳底下的一盆紫花苜蓿，在不知不觉中发芽。大脑细胞生长的速度越来越快，彼此间不断建立起新的联系。对于所有婴儿而言，大脑左半球皮质的生长速度比右半球皮质的生长速度慢，但是男婴大脑皮质的生长速度更慢。女婴体内的雌激素促进了大脑细胞的快速发育。&lt;/p&gt;
&lt;p&gt;**男孩的大脑右半球不断发育、完善，试图与左半球建立联系。**但是大脑的左半球还没做好与右半球建立联系的准备，导致从右半球延伸到左半球的神经细胞无法进入左半球，只能返回右半球并连接到右半球上。因此，男孩大脑右半球的内部连接发达，而与左半球的连接较少。&lt;/p&gt;
&lt;p&gt;学会交流。如果你不希望自己的孩子在学习或语言方面遇到困难，那么你可以通过多方面的努力来帮助孩子。珍妮·哈拉斯蒂等人对交流障碍进行了深入的研究，取得了重大成功。**就学习语言而言，最佳的学习时间是从出生到8岁。**进入青春期和成年期后，我们还能继续学习，但是年龄越大，就越难改变大脑早期的连接。&lt;/p&gt;
&lt;p&gt;跟孩子说话——逐步进行。**家长需要有意识地对孩子进行口语训练，但一定要注意，讲话内容取决于孩子的年龄。**1岁以下的婴儿开始牙牙学语，开始手舞足蹈地比比画画。这预示着，他们已经可以开始学习语言交流了。这时应该教他们说单个的字。你在和孩子说话时，应高于他们的语言能力，但是只能高出一个层次。这样继续下去，孩子就能得到最大的提高。孩子喜欢这种游戏。所有人都喜欢交流。&lt;/p&gt;
&lt;p&gt;**利用所有可利用的机会，给孩子解释他们看到的、听到的一切事物。**当你和孩子在一起时，例如一起旅行、做家务或散步时，你可以充分利用这些时间和孩子聊天，对他们感到好奇的事物做出解释，或者回答他们的问题。但是令人吃惊的是，一些父母（他们对孩子关怀备至）似乎并没有意识到，孩子大脑的发育是从谈话开始的。&lt;/p&gt;
&lt;p&gt;尽早开始给孩子读书。孩子才刚满1岁，或许你认为和他一起分享读书的乐趣还为时过早。**其实此时你完全可以和他一起读书了，特别是那种韵律强、适合背诵的书。**还有一点必须给予足够的关注，那就是在睡觉前，把孩子抱到腿上或是搂着他陪他玩一会儿。&lt;/p&gt;
&lt;p&gt;我们能帮助男孩更好地阅读，明白无误地表达自己的想法，正确、及时地解决冲突，更好地体会别人的感受，所有这些都能帮助男孩成为大有作为的人。**当孩子长到六七岁的时候，开始接受严格的学校教育。**与女孩相比，在智力方面，男孩的发育有些缓慢，大约比女孩晚6~12个月，在完成精细动作所需的协调能力方面发育得尤为迟缓。具体来说，这些精细动作的协调能力就是运用手指的能力，包括拿钢笔和拿剪刀的能力。&lt;/p&gt;
&lt;p&gt;男孩大脑的右半球比较发达，这使他们具有多方面的优势。他们对数学得心应手，对机械能力的掌握也毫不逊色。此外，他们的动手能力比较强，如果遇到操作上的问题，他们倾向于亲自动手解决。**大脑的右半球负责处理情感和行动，因此绝大多数男性会采取行动，而绝大多数女性更愿意静静地沉思。**对于男性来说，他们需要付出额外的努力才能调动大脑的左半球，找出合适的词来形容他们的感受。&lt;/p&gt;
&lt;p&gt;在现代世界里，体力劳动失去了以往的地位，变得越来越不重要。现在，男性的体力和精力需要转移，转移到另一种工作上去。这意味着，&lt;strong&gt;男孩的思考方式和做事技巧是不适应这个社会的，只有当他们具备一定的语言技巧和情感处理技巧&lt;/strong&gt;，他们才能成为现代社会所需要的“超级男孩”，这样他们才能在各个领域所向披靡，战无不胜。&lt;/p&gt;
&lt;h2 id=&#34;第5章-父亲应该做些什么&#34;&gt;第5章 父亲应该做些什么&lt;/h2&gt;
&lt;p&gt;**绝大多数男孩喜欢运动，喜欢和父亲一起玩。他喜欢拥抱父亲，和父亲打闹。他喜欢和你一起探险，一起体验更大、更广阔的世界。**他还需要安全感，因为父亲看上去高大魁梧、无所不能。他喜欢父亲讲他自己小时候的故事，想见父亲的朋友，也想知道父亲是怎样挣钱养家的。他喜欢父亲教他一些实实在在的东西。如果你不懂钓鱼，不知道怎样制作一些小东西，也不知道如何修理玩具车等，你们可以一起学习。&lt;/p&gt;
&lt;p&gt;孩子会学习父亲的人生态度。孩子会学习你的一言一行、一举一动（甚至达到了令人惊讶的地步）。我的一个朋友开车带孩子出去玩时，他们在红灯前停下来等，这时，一个来自亚洲的家庭就闯了过去。&lt;/p&gt;
&lt;p&gt;**孩子通过观察父亲的行为来学习如何爱别人。**儿童甚至通过观察你的举动来学习如何表达自己的爱。当你向妻子表达自己的关怀、哄妻子开心的时候，当你说出自己的浓浓爱意或与妻子拥抱、亲吻时，在无形之中，孩子都在向父亲学习。当我和妻子拥抱时，女儿总会挤进来。她喜欢被我们两个包围的感觉。当你们独处，悄悄地关上卧室的门时，孩子甚至也会从父母的这种行动中学会爱，这种爱是神圣的、崇高的。&lt;/p&gt;
&lt;p&gt;父亲应该尊重妻子，这一点非常重要。因此，**父亲应该自重，不要辱骂、蔑视妻子，必要时你只要表明自己的观点就可以了。**儿子需要看到的不仅仅是男性要尊重女性，还要让他知道，男人遇事同样能心平气和地商量，而不必动用武力。男孩不仅能听到父亲的意见，他还会有自己的观点，并且坚持让父母听听自己的想法。儿子讨厌看见父亲有失绅士风度。&lt;/p&gt;
&lt;p&gt;离婚会对孩子造成巨大的打击，会破坏他对父亲所抱的希望和对父亲所怀的梦想。离婚后，一些男人感到极度悲伤，无法和妻儿保持正常的联系。还有一些人战胜困难，和孩子保持着正常的联系。不管你的婚姻出了什么问题，都不要脱离孩子的生活圈，这一点至关重要。离婚后，越来越多的父亲得到了孩子的抚养权。&lt;/p&gt;
&lt;p&gt;**为了孩子能健康成长，一定要善待自己的伴侣，给对方一定的空间和时间以及足够的关心，努力保持亲密的夫妻关系，即使有时你不想这么做。**到家庭分裂的那一天，一切都将悔之晚矣。&lt;/p&gt;
&lt;p&gt;长久以来，没人明白这一点，尤其是母亲，通常她们费尽心思地让孩子平静下来，而父亲会再次把他们鼓动起来，打成一团！但是研究发现，孩子在打闹中所学到的东西对他们以后的成长具有深远意义，这是他们成为真正的男人所必须经历的一课：知道怎样玩得开心，怎样制造噪声，甚至怎样使自己生气；同时，他们也应该知道什么时候必须结束。&lt;/p&gt;
&lt;p&gt;**男性意义重大的一课：知道什么时候应该结束。**如果在男孩三四岁的时候，你曾和他打闹过，那你就知道，开始时，小男孩很高兴，但一两分钟后，他们就会失去兴趣，变得愤怒起来。他们会高高昂起头，以示抗议，还会紧皱眉头，开始用肘推挤，用膝撞击。哎哟！痛呀！细心的父亲会在适当的时候停下来。打住！打住！停！然后，你可以给他上一课——不要大声吼叫，只需平静地解释就可以。&lt;/p&gt;</description>
    </item>
    <item>
      <title>日剧《火花》和齐藤和义的《今夜星光灿烂》</title>
      <link>https://dodoro.chouxiangpai.com/archives/1692/</link>
      <pubDate>Tue, 19 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1692/</guid>
      <description>&lt;p&gt;这几年一直和小熊一起看日剧，绝大部分都是看往年的豆瓣前几名，日剧不拖沓、引人深思、令人心情平静地看待人与事，客观地说日剧已经取代其他任何电视剧成为我心中第一。我的第一部日剧就是小熊带着看，那时候看了《野猪大改造》、《求婚大作战》、《白色巨塔》和《东京爱情故事》。最近看完2016年的《火花》，真实地入骨，一个年轻人面对想做的事，即使拼尽全力的努力仍然要面对失败，两个主人公经历一番痛苦后平静地回归朴实的生活。&lt;/p&gt;
&lt;p&gt;剧中的插曲《今夜星光灿烂》同时打动了我们两个人，这是齐藤和義于1996年写的一首曲子，剧中那位街头卖唱、追求音乐梦想的年轻人，最后默默坐着巴士离开东京，离别前挥泪再次唱起这首曲子。&lt;/p&gt;
&lt;p&gt;[audio mp3=&amp;ldquo;images/3301205948.mp3&amp;rdquo;][/audio]&lt;/p&gt;
&lt;p&gt;空に星が綺麗 作詞曲：斉藤和義&lt;/p&gt;
&lt;p&gt;日中文歌词： 口笛吹いて歩こう　肩落としてる友よ 吹起口哨往前走，垂头丧气的朋友 いろんな事があるけど　空には星が綺麗 纵人生无常，世事变幻，今夜星光灿烂 懐かしいあの公園にちょっと行ってみようか? 记忆中的公园，啥时再去看看？ 最近忘れてること　なんか思い出すかも 最近时常想起，曾经忘却的过去 あの頃の僕らには　守るものなどなくて 那个时候的我们，肆无忌惮 夢ばかりこぼしては　いつも暇を持て余してたね 一心只要追梦，以为总有时间 口笛吹いて歩こう　肩落としてる僕よ 吹起口哨往前走，满腹心思的我 遠くで誰かのギター　ゆっくりと空へ行く 远处不知谁的弹吉声，悠然入云 今も心の奥でざわつく 即便如今，内心依然骚动 あの気持ちは変わっていない　でも… 那种追梦的心情，似乎从未改变 あの頃の僕ら今　人に頭を下げて 但……现在的我们，人前低着头 笑ってはいるけれど　目に見えない涙こぼれるね 脸上笑着，眼底却泪流 口笛吹いて歩こう　肩落としてる友よ 吹起口哨往前走，垂头丧气的朋友 誰も悪くはないさ　きっとそういうもんさ 其实谁都没有错，人生就是这样的 口笛吹いて歩こう　空には星が綺麗 吹起口哨往前走，星空灿烂美如昨&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决Xcode 10 、Xcode11、Xcode12升级之后 &#39;string&#39; file not found C&#43;&#43;头文件、`libstdc&#43;&#43;6.0.9.tbd`库缺失问题</title>
      <link>https://dodoro.chouxiangpai.com/archives/1672/</link>
      <pubDate>Sat, 02 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1672/</guid>
      <description>&lt;p&gt;最近公司的移动开发工程师被困在老家，项目有紧急需要修改的地方，我只好亲自上阵，打开Xcode改bug。编译的过程发现小伙子前阵子刚刚升级了，遇到了c++头文件无法编译的问题。网上查了一下，发现这是Xcode的通病，三个版本都有类似的问题。&lt;/p&gt;
&lt;p&gt;Xcode10 &amp;lsquo;string&amp;rsquo; file not found C++头文件缺失问题&lt;/p&gt;
&lt;p&gt;将对应文件拷贝到Xcode10对应目录下&lt;/p&gt;
&lt;p&gt;真机： /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/c++ 模拟器： /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/c++&lt;/p&gt;
&lt;p&gt;Xcode9 C++头文件github链接：&lt;a href=&#34;https://github.com/DeCori/Xcode9-cpp.git&#34;&gt;https://github.com/DeCori/Xcode9-cpp.git&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Xcode10中缺少的libstdc++6.0.9.tbd库 其中文件夹 1、2、3、4 中的文件分别对应复制到Xcode10中的以下4个目录中即可：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Xcode11和12文件的1路径发生改变：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>读书笔记——约翰密尔和《论自由》</title>
      <link>https://dodoro.chouxiangpai.com/archives/1674/</link>
      <pubDate>Sat, 02 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1674/</guid>
      <description>&lt;p&gt;如果要问我哪一本书让我彻底展开自由的翅膀、并且变成一名彻头彻尾的自由主义者，那么我一定要回答：约翰密尔的《论自由》。&lt;/p&gt;
&lt;p&gt;《论自由》最精髓的地方是：个人只要在不伤害他人的范围内，就应该拥有完全的思想自由、言论自由和个性自由（行动自由），这一原则的实施，&lt;strong&gt;有赖于对政府及社会权力的界定和限制&lt;/strong&gt;，这也正是本书最早的中译者严复先生将其译为“群己权界”的渊源所在，这种思考对每一个迈向现代社会的国家来说，仍然至关重要。&lt;/p&gt;
&lt;p&gt;《论自由》里面让我印象最深刻的是：从长远来看，国家的价值，归根结底还是组成这个国家的&lt;strong&gt;个人的价值&lt;/strong&gt;，一个国家为了要使它的人民成为它手中更为驯服的工具(哪怕是为了有益的目的）而使人民渺小，终将会发现：&lt;strong&gt;弱小的国民毕竟不能成就任何伟业。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;第一个版本我读的是译林出版社，这次重读的是孟凡礼的版本，出版社是广西师范大学出版社，翻译非常棒，信达雅都满足了。&lt;/p&gt;
&lt;p&gt;这个译本里面有高全喜老师的序言，里面一段话也让我印象深刻**：二十一世纪的中国，面临着双重扭结的问题。**一方面，我们依然还需要洛克的《政府论》，&lt;strong&gt;因为基于个人权利的现代国家政府构建并未经由一系列革命彻底奠定下来，权利论与契约论的宪政民主框架即现代国家政制构建还有待完成&lt;/strong&gt;，这也正是我一再强调洛克理论仍然是我们这个时代所需要的原因所在。而与此同时，&lt;strong&gt;中国社会自身的发展却不会停留在早期现代阶段，而是迅速向成熟现代迈进，所以另一方面，我们就又在还没有走完“洛克政府论阶段”的时候进入了“穆勒新政府论阶段”&lt;/strong&gt;，因而穆勒的《论自由》同样成为我们所必需。&lt;/p&gt;
&lt;h2 id=&#34;第一章-导读&#34;&gt;第一章 导读&lt;/h2&gt;
&lt;p&gt;最近几年我一直在强调一种关于中国问题的看法，那就是自鸦片战争至今一百七十年来，尤其是历经两个共和国（即中华民国与中华人民共和国），&lt;strong&gt;中国社会依然处在一个古今之变的转型时期，即从古典王朝社会到现代自由民主社会的转型远没有彻底完成。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们看到，西方文明的这个时期产生了一大批思想家，细数起来，这个名单可以从马基雅维利、博丹、格劳秀斯、霍布斯、洛克、卢梭、伏尔泰、孟德斯鸠、亚当•斯密，一直数到边沁、约翰•穆勒。&lt;/p&gt;
&lt;p&gt;中国百余年来古今之变的社会大转型至今业已跨过二十一世纪的门槛，如果说在两个共和国的创制时期，中国还是处在一个较为标准的西方早期现代的社会构建，即一个现代中国的政治与社会的发轫与肇始之际的话，那么我们看今日中国**，大陆经过三十多年改革开放所带动的社会之全面变迁，以及台湾在解严之后逐渐进入开放的宪政民主社会，海峡两岸暨香港、澳门，都已大致走过了早期现代的政治、经济、社会乃至文化的创建时期**，都面临着向更为成熟的正常的现代社会的转型问题。&lt;/p&gt;
&lt;p&gt;洛克《政府论》着重探讨的是政府权力的正当性来源，虽然洛克在《政府论》中非常强调生命权、财产权和自由权等基本的个人权利，但他作为早期现代的思想家，所面临或针对的真正的理论对手主要是霍布斯的绝对国家主权，&lt;strong&gt;因此《政府论》的中心内容在于构建一个人民同意的有限政府，个人的基本权利只是作为政府权力的正当性而被表述出来的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;穆勒这本名为《论自由》的十九世纪之新版“政府论”，从表面上看与洛克恰恰是相反的，《论自由》的大部分篇幅讨论的都是个人思想言论自由以及个性自由的重要性，而洛克《政府论》的大部分内容讨论的则是政府权力以及立法权、执行权与对外权等政府的职权功能。&lt;/p&gt;
&lt;p&gt;我所谓的“群己权界”指的就是right与power之间的rule(规则）问题，这个群己权界就构成了自由的核心原则：一个社会的权力应该是一种基于规则的（具有正当性来源的）权力，其要义是通过划分政府权界，尊重并保障每个个体之人的right。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;英国经验主义不承认绝对真理，因此就主张没有谁能够垄断真理，即便是具有正当合法性基础的政府乃至社会本身&lt;/strong&gt;，也都不例外。这就要求在追求真理的过程中，为思想言论自由提供广阔的社会空间，进而在生活方式的选择上也是如此，要为个性自由发展保留出可供伸展的领地。《论自由》的前三章主要是正面论述思想言论自由、个性自由的原理，在第四、第五两章，穆勒进入了对于自由原理的应用的分析，在我看来，这两章才是全书的真正落脚点一一为捍卫个人自由而划定“群己权界”，其实也就是新版的“政府论”，要旨也就是限制政府以及社会权力，限制权力行使的方式、范围以及强度，给那些可能是谬误也可能是真理的思想言论和个性拓展留下自由的空间，为人性的内涵向更丰富化的发展创造条件，为英国社会保持其活的生命力。&lt;/p&gt;
&lt;h2 id=&#34;第一章-引论&#34;&gt;第一章 引论&lt;/h2&gt;
&lt;p&gt;**自由与权威之间的斗争，在我们早已熟知的那部分历史中，特别是希腊、罗马和英国的历史中，就是最为显著的特征。**但在过去，这一斗争发生在臣民或臣民中的某些阶层与政府之间。那时的自由指的是对政治统治者暴虐的防范。统治者被认为必然与其所统治的人民处于相敌对的位置（希腊的一些平民政府除外）。统治者不管是一个大权在握的个人，还是实际掌握统治权的某个部族或等级，其统治权威不管是得自于继承，还是来自于征服，无论如何，其掌握权力不是出自被统治者的意愿。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;人类事务已进步到这样一个时代，人们对于统治者应该成为独立的权力而与人们自身利益相对立，已经不再认为有本质上的必要了&lt;/strong&gt;。如果能让国家的各级官吏成为人们的承租人或代理人，可以随他们的意愿而撤换，看起来要好得多。似乎只有用这种方式，他们才能获得完全的保障，使得政府权力永远不会被滥用而损害他们的利益。凡有平民政党存在的地方，这种选举短任统治者的新要求，都逐渐成为他们寻求的重要目标，并且在相当程度上取代了此前寻求限制统治者权力的努力。&lt;/p&gt;
&lt;p&gt;人们最初认为并且仍然庸俗地认为，&lt;strong&gt;多数者暴政之所以像其他暴政一样可怕，主要是因为它是通过公共权力的措施来施行的&lt;/strong&gt;。但是深思之士已经察觉到，当社会本身就是暴君时，即当社会集体凌驾于组成它的各别个体之上时，暴政的实施就并不限于借助政治机构之手而行的各种措施。&lt;/p&gt;
&lt;p&gt;本文的目的即是要力主一条非常简明的原则，若社会以强迫和控制的方式干预个人事务，不论是采用法律惩罚的有形暴力还是利用公众舆论的道德压力，都要绝对遵守这条原则。该原则就是，人们若要干涉群体中任何个体的行动自由，无论干涉出自个人还是出自集体，其唯一正当的目的乃是保障自我不受伤害。&lt;strong&gt;任何人的行为，只有涉及他人的那一部分才必须要对社会负责。在仅仅关涉他自己的那一部分，他的独立性照理说来就是绝对的。对于他自己，对于其身体和心灵，个人就是最高主权者&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这一范围就是人类自由的适当范围。它包括如下几个方面。&lt;strong&gt;首先是人类内在的意识领域的自由：它要求最广义的良心自由，思想和情感自由，对举凡实践、思想、科学、道德、宗教等所有事物的意见和态度的绝对自由&lt;/strong&gt;。第二，这一原则要求品味和志趣自由：&lt;strong&gt;自由地根据自己的特性规划生活，做自己喜欢做的事并愿意承受一切可能的后果&lt;/strong&gt;；只要我们的行为不伤及他人就不受人们干涉，即使在他人看来我们所行是愚蠢的、乖张的或错误的。第三，&lt;strong&gt;由个人自由可以推出在同样限制内的个人联合的自由&lt;/strong&gt;：人们可以在不伤害他人的任何目的下自由联合，但参加联合的人必须是成年人，并且不受强迫和欺骗。&lt;/p&gt;
&lt;h2 id=&#34;第二章-论思想言论自由&#34;&gt;第二章 论思想言论自由&lt;/h2&gt;
&lt;p&gt;正如人们所希望的，如今这个时代，对于出版自由作为防范腐败或暴虐政府的有效手段之一，&lt;strong&gt;已没有任何为之辩护的必要了&lt;/strong&gt;。可以这样说，如果一个立法或行政机关，不与民众利益相一致，而欲将意见指示给民众，并且规定哪些见解或言论才是允许人们听到的，其势不可行，肯定是无需争辩而后已了。&lt;/p&gt;
&lt;p&gt;有必要对这两个各自对应着不同论据的论点分别予以考察：一是我们永远不能确定我们所竭力要禁绝的意见是错误的；二是即便我们可以确定其错误，禁绝它仍为过错。&lt;/p&gt;
&lt;h4 id=&#34;1我们永远不能确定我们所竭力要禁绝的意见是错误&#34;&gt;1、我们永远不能确定我们所竭力要禁绝的意见是错误&lt;/h4&gt;
&lt;p&gt;**认定某一意见正确乃是因它在一切与之竞争的场合中都未被驳倒，与认定它正确乃是因它不容反驳，这两者之间有着天壤之别。**对我们所持的意见，给予反驳与质难的完全自由，是我们有理由为了行动的目的而认定它正确的先决条件，而且除此而外，在人类智能所及的范围内，没有任何东西能够作为正确性的理性保证。&lt;/p&gt;
&lt;p&gt;既然人类中那些最有资格相信自己判断的明哲之士，尚有必要依此才敢确保自己正确，那么混杂多数愚众和少数智者而形成的所谓公众，就更须依此去检验了，这并非什么过分的要求。&lt;/p&gt;
&lt;p&gt;有一件事，也许无论多少次向人们提醒都不嫌其过：从前一个名叫苏格拉底的人，跟他那个时代的司法当局和公众意见发生了令人难忘的冲突。苏格拉底生于一个俊彦迭出的时代和国度，依照对他个人和那个时代深为熟稔之人所流传下来的说法，他可称是当时最为正直的人；而我们也知道他是后世所有美德之师的表率和典型，他的博大思想共同启发了柏拉图和亚里士多德。这个为有史以来一切杰出思想家所公认的宗师一一两千多年后，他的声名仍随着时间的流逝而愈加彰显，几乎盖过了其他所有为他的城邦带来荣耀的有名之士一一却被国人经过审判后以不敬神和不道德的罪名处以死刑。所谓不敬神，是指否弃这个国家所信奉的神；甚至他的控告人声称，苏格拉底根本不信任何神。所谓不道德，是指用他的思想和教导“腐蚀青年”。有理由相信，在这些指控面前，&lt;strong&gt;法官确是真诚地认为他有罪，于是把这个可称是人类有史以来最好的人当作罪犯处死了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;但是确切地说**，真理总是能战胜迫害的说法，只是一种美丽的谎言，人们彼此津津乐道，直至最终成为陈腔滥调，但一切经验都与之恰好相反。**真理被迫害扑灭的例子史不绝书。其纵使不被遏绝，也动辄被推后数百年不止。仅就宗教观念来说：先路德而进行宗教改革者不下二十余辈，但是都被镇压了。布雷西亚的阿诺德被镇压了。多尔奇诺修士被镇压了。萨伏那洛拉被镇压了。阿尔比派被镇压了。韦尔多派被镇压了。罗拉派被镇压了。胡斯派被镇压了。真理的真正优势在于，如果一项意见是真理，它虽可能被扑灭一次、两次以至多次，然而在悠悠岁月之中，总会有人重新发现它，直到有一天它的重现恰值一个有利的环境，成功地逃脱了压迫，再到它经受住了随后所有镇压它的企图而大步前进。&lt;/p&gt;
&lt;p&gt;苏格拉底被处死了，但是苏格拉底的哲学如日中天，它的光辉照遍整个人类智慧的苍穹。基督徒曾被投身狮吻，但基督教的教堂长得如枝繁叶茂的参天大树，高耸于比之更古老但却毫无生气的物种之上，并且以其遮天之荫令它们窒息。&lt;/p&gt;
&lt;h4 id=&#34;2即便我们可以确定其错误禁绝它仍为过错&#34;&gt;2、即便我们可以确定其错误，禁绝它仍为过错。&lt;/h4&gt;
&lt;p&gt;第二部分我们先把任何公认意见都有可能错误的假设搁置一旁，而是假设它们皆为正确，然后再来考查一下，如果其真确性不容自由且公开地讨论便径直加以主张，这种做法究竟有何价值。一个持有强烈信念之人，&lt;strong&gt;不论多么不情愿承认他的意见可能有错，只要想一想，无论多么正确的意见，如果不能时常经受充分且无所畏惧地讨论，它都只能作为僵死的教条而不是鲜活的真理而被持有&lt;/strong&gt;，他都应该有所动容。&lt;/p&gt;
&lt;p&gt;一个人只要毫不怀疑地赞同他们认为正确的意见就足够了，尽管他对此意见所据之理由毫无所知，甚至不能为反驳最肤浅的异议提供哪怕一条站得住脚的辩护。这样的人，一旦自权威方面得到某种信条就想当然地认为，允许对其提出质疑只会有害无益。&lt;strong&gt;只要他们得势，就几乎不可能允许对公认意见提出明智而审思式的反驳，从而使它受到的反对只可能是鲁莽而无知式的&lt;/strong&gt;；因为完全钳制一切议论毕竟不大可能，当议论一旦出现，未能真正深入人心的信念就会在论辩的只言片语面前轻而易举地屈服。&lt;/p&gt;
&lt;p&gt;虽然人们信奉某种真理，都理应对之有所理解，但即便我做出最大让步，姑且承认那种认为对所奉真理不必人人都需理解的观点，也未能丝毫削弱言论自由的理由。因为，即便是这种说法，也承认了人类应当拥有一个理性的保证，即所有的反对意见都已被圆满地答复。&lt;/p&gt;
&lt;p&gt;那些原本最能深入人心的义理，却因为言论自由的缺乏，只能作为僵死的教条而保留下来，人们根本不能通过想象、情感或理智对其有所领会，这种情况竟至于达到什么程度，可以通过多数信仰者对基督教教义的持守方式的例子来说明。&lt;/p&gt;
&lt;p&gt;随着人类的进步，人们不再争论或不复怀疑的道理必然日益增多；并且真理息争止疑的数量和分量，也几乎可以用来衡量人类幸福的程度了。人们在一个又一个问题上的严重分歧相继消失，是意见统一过程中必然会有的事情之一；&lt;strong&gt;意见统一于真理可为人类造福，情形恰如意见统一于谬误时可为人类招祸一样。&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&#34;3更多的讨论内容&#34;&gt;3、更多的讨论内容&lt;/h4&gt;
&lt;p&gt;目前为止，我们只考虑了两种可能性：一是公认意见有可能是错误的，因而某些不同意见倒是正确的；二是即便公认意见正确，而与相反的错误意见的较量，对真理能够得到清晰理解与深刻体认也是必要的。但是还有一种比这两者都更为常见的情形：&lt;strong&gt;一组相互冲突的信条，并非一者全对另一者全错，而是真理共存于二者之中；公认的信条只包含真理的一部分，必须要由不合主流的意见来补充真理的剩余部分。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;异端意见通常包含一些被遏制和被忽视的真理，其一旦冲决令之不能抬头的桎梏，不是寻求与包含在通行意见中的真理相调和，就是起而与之分庭抗礼，以同样唯我独尊的姿态把自己当作完全真理树立起来。迄今为止最为常见的乃是后一种情形，因为人心每每偏爱一己而很少兼顾各方。因此，甚至在观念的历次革新换代中，也往往是一部分真理兴起的同时，伴随着另一部分真理的沉没。&lt;/p&gt;
&lt;p&gt;政治方面，下面所言几乎已成老生常谈：强调秩序或稳定的政党与要求进步或改革的政党，同为政治生活达至健康状态的必要因素；直到二者中某一个能够扩展自己的理解力，成为既重秩序又能进步的政党，懂得并善于辨别什么适宜保守什么适宜革新乃止。这种想法固然是将对方的缺陷化为自己的长处，但很大程度上也正是因为双方的对立，而使彼此保持在理性和稳健的限度之内。&lt;/p&gt;
&lt;p&gt;政治上纷见迭出的各种言论，如民主制和贵族制、产权论和均富论、合作和竞争、奢侈和节俭、群性和个性、自由和纪律，以及实际生活中永相对立的种种意见，&lt;strong&gt;除非每一对的两方都能同样地自由发表，并且以同样的才情和精力得到贯彻和拥护，否则对立的双方都不会有机会得到公平的对待，必然会像天平的两边此起而彼落。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在生活的各种重大实际利害上，真理往往是对立双方调和与交汇的问题，却很少有人能够有足够恢弘公正的心胸，去用正确的方法作出适当的调整，而使真理只能通过交战双方在敌对旗帜下展开斗争的粗暴过程才能得到。&lt;/p&gt;
&lt;p&gt;**在以上所列举的任何一个重大而又具有开放性的问题上，如果两种意见中有一个比另一个更具优势，那么不仅要得到容忍，还应该去鼓励和支持的，恰恰该是在特定时间和特定地点为少数人所持有的那个意见。**当其时，那一意见一定代表着被忽视的利益，代表着有丧失公平对待之危险的某一方面人类福祉。我知道在这个国家中，对于大多数这类主题上的意见分歧并不存在任何不宽容。从得到公认且日益增加的事例中，都显示并证明着一个普遍的事实，在人类智慧的当前状态下，唯有通过意见的纷歧多样，才能使真理的各个方面有一个公平竞争的机会。如果我们发现有人在任何问题上，对世人显然一致公认的意见竟有不同看法，纵然世人是对的，那些异见者为自己辩护的话中，也总有一些值得我们一听的东西，若禁止他发言，则对真理而言往往就会有所损失。&lt;/p&gt;
&lt;h4 id=&#34;4总结&#34;&gt;4、总结&lt;/h4&gt;
&lt;p&gt;我也不敢说，让一切可能的意见丝毫不加限制地自由发表，就能结束宗教或哲学上宗派主义的祸害。心胸狭隘之人，对于他所热衷的每一个真理，都必然会极力主张，反复强调，甚至以各种办法来实行，就好像世界上再也没有其他真理，或者无论如何都不会有第二义能对其有所限制或可与之一争高下。&lt;strong&gt;我承认，一切言论都有向宗派化发展的倾向，且并不会因有了最自由的讨论而得以矫正。当争端的两造只有一造有辩护人代表其上前时，有人却能够在两造之间做出明智判断，在人类的精神属性中，没有什么比这种公断能力更为罕见了，既然如此，若不是让问题的各方公平地出现，令包含任何真理片段的每一项意见不仅能有辩护人，而且还要让其辩护足以让人不得不听，真理就不可能被发现。&lt;/strong&gt; 2024-01-29 17:34:11 星期一 &lt;strong&gt;一、即便某一意见被压制而至于沉默&lt;/strong&gt;，但其实我们未必真的不知道，那个意见有可能是正确的。拒绝承认此点就是认定我们自己一贯无错。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二、即使被压制的意见是错误的，它也可能包含并且通常确实包含部分真理&lt;/strong&gt;；而由于在任何主题上，普遍或通行的意见难得是或从来不曾是全部真理，只有通过与反面意见的碰撞，余下的部分真理才有机会得以补足。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三、纵然公认意见不仅正确而且是全部真理，除非它允许并确实经受了极其有力而又最为认真的挑战，否则大多数接受它的人抱持的仅仅是一项成见，对其所以然的理性根据毫无理解或体认。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;四、&lt;strong&gt;信条本身的意义也将变得岌岌可危，其可能由隐晦而至于消失，对人的身心言行将不复有积极影响的能力&lt;/strong&gt;：最终，由于信仰仅仅剩下形式，非但无益于为人增福，而且还因破坏了根基，从而妨碍了任何真实而又诚挚的信念自人类理性或个人体验中生长出来。&lt;/p&gt;
&lt;p&gt;结束关于言论自由的讨论之前，似乎还应当对某些人的一种看法稍作注意，**他们认为，一切言论固然都应该被允许自由表达，但前提是意见表达方式必须温和节制，不能逾越自由讨论的界限。**有很多理由可以说明这些假定的界限根本无法确定，因为如果要检验意见受攻击的那些人是否受到了冒犯，我想经验一再证明只要其所受攻击是有效且有力的，则冒犯就是一定的，每一个紧相逼迫而令其难于作答的反对者，如果再对那一主题表现出任何激情的话，在他们看来就是一个无节制的反对者。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最主要的冒犯则来自于除非通过他自己不经意的泄露，否则就极难证明其罪过的那种类型。其中最严重是，强词夺理地诡辩、隐瞒事实或论据、颠倒事件的要素、曲解对方的意见。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;至于通常所指的过激辩论，即恶语谩骂、讽刺挖苦、人身攻击以及诸如此类的做法，**如果对这种语言利器的斥责，总是同等地要求双方都不要使用，也许应该得到更多的支持；**可是人们却仅仅希望限制使用它们来反对主流意见；如果反对的是非主流意见，则它们不仅可以被使用而不致遭到普遍反对，而且使用者还有可能赢得激于义愤而热诚卫道的赞誉。争辩者所可能会犯的最坏一种冒犯，就是污蔑抱持相反意见的对手乃是不道德的坏蛋。&lt;/p&gt;
&lt;h2 id=&#34;第三章-论作为幸福因素之一的个性自由&#34;&gt;第三章 论作为幸福因素之一的个性自由&lt;/h2&gt;
&lt;p&gt;前一章一节论证：人类在形成意见以及毫无保留地发表意见上不可不自由；思想言论的自由若得不到承认，或没人突破禁令而加以力主，其对人类智性进而德性的种种恶果。&lt;/p&gt;
&lt;p&gt;接下来我们要考查的是，是否能以这些同样的理由，来主张人类应该依照自己的意见自由行动——即只要他们愿意自负责任和自担风险，就应该不受同胞实质的或道德的阻挠，而将其意见贯彻到自己的生活之中。&lt;/p&gt;
&lt;p&gt;无论何种行为，但凡没有正当理由而贻害于人，都该受到反对意见的抑制，如有必要还应通过人们行动上的干涉加以阻止，苟其情形严重，则人们做出上述遏阻之举就为绝对需要。&lt;strong&gt;是故个人自由必须要有所限制，即无论如何不能令自己妨碍他人&lt;/strong&gt;。如果其能在涉及他人之事上避免妨害他们，而仅仅在事关自己之事上随心所欲、为所欲为，那么能够表明意见应予自由的那些理由，同样也可以证明，只要其自负后果，就该被允许将自己的意见贯彻到行动之中而不受干涉。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正如只要人类未臻完善，允许不同意见的存在就是有益的，同样，在生活方式上允许不同的尝试，也是有益的；各种性格只要不伤及他人就该给予其自由发展的空间；只要有人愿意一试，不同生活方式的价值就该允许通过实践去证实。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;总之，**在并非首先关及他人的事情上，个性就应该得到伸张。**如果行为法则不是出于个人的性格，而是出于他人的传统或习俗，人类幸福就缺少了其首要因素之一种，而这项因素恰恰对个人和社会的进步十分重要。&lt;/p&gt;
&lt;p&gt;如果一个人将自身生活计划的选择，全部委诸世人或自己的生活圈子，则无需赋予他任何其他能力，只要有猿猴一般的模仿力就足够了。&lt;strong&gt;人性并不是一部按照一种模型组建起来，并被设定去精确执行已规定好的工作的机器，人性毋宁像是一棵树&lt;/strong&gt;，需要朝各个方面去成长与发展，并且是根据使它成为一个活体生命的内在力量的倾向去成长与发展。&lt;/p&gt;
&lt;p&gt;我既已说明个性与发展乃是同一回事，&lt;strong&gt;只有个性得到扶植培育，才造就出或才能造就先进的人类&lt;/strong&gt;，这里本可以就结束这一论证了：因为在人类事务的极限之内，既然个性的舒展可以让人类自身接近其所能达到的最佳境地，还有什么更多更好的话值得一说呢？或者说到对于人类幸福的阻碍，还有什么比压抑个性更为可恶呢？然而，这些理由无疑仍不足以说服那些最需要被说服的人们；必须进一步说明，&lt;strong&gt;人类中的这些先进者总是或多或少有益于那些未进者——即向那些不渴求自由，也不稀罕自由之助益的人点明，如果允许他人利用自由而不加以阻挠，他们也会在某些不难理解的方式下获得回报。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我这样断然强调天才的重要，以及应该允许他们在思想和实践上自由舒展的必要，是因为我深知虽然理论上没人会反对这一立场，但是我也知道事实上几乎每个人对此都完全漠不关心。人们以为，如果天才不过意味着可以创作出动人的诗歌或悦目的图画，那固然是好。但是一说到它的真正所指，也即思想和行动上的首创，尽管没人会说那并不值得如何夸赞，却几乎所有人心里都不以为然，以为没有它人们照样会做得很好。&lt;/p&gt;
&lt;p&gt;**强制他人必须走他所指的道路，这种权力不但与其余所有人的自由与发展相违背，而且足以令强者自身腐化堕落。**然而，如今仅仅由普通人组成的群众，其意见已成为或正成为无处不在的支配性力量，能够平衡和矫正这种趋势的，似乎只有那些思想高标之士不嫌其多的鲜明个性。一个社会怪诞之行的多寡，一般说来也跟其所含创造才能、精神活力以及道德勇气的多寡恰成正比。今日敢于独行怪癖之人寥若晨星，正是这个时代大为可惧的标志。&lt;/p&gt;
&lt;p&gt;今日英国之伟大尽在集体，以个人而言实渺小不堪，我们之所以还能够产生任何伟大的事物，全在于还保持着联合行动的习惯；而对此我们的道德与宗教仁爱之士却感到心满意足。但是，&lt;strong&gt;英国之所以为英国，却不是赖这些人之力，而是有赖恰恰与之相反的一流人物，如今要避免英国衰落，也正需那另一类人物才行。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当今时代的这些趋势，比以前大多数时代都更倾向于促使公众指定行为的一般规则，竭力要每个人顺从其所认可的标准。并且这种标准，明言也好，暗示也罢，就是要求对任何事物都不能抱有强烈的欲望。其理想的性格就是没有任何特出性的性格；&lt;strong&gt;就像中国女子的缠足一样，通过压制束缚来摧残人类天性中每一个格外出众的部分，务将外表轮廓明显不同的人们驯服成毫无个性的平庸之辈。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;习俗的专制在任何地方对于人类的进步都是一种持久的障碍，因为它总是不断地反对志在发现优于习俗之物的那种气质，根据不同的情况，该气质或被称作自由精神，或被称作进步或改良精神。进步精神并不总是同于自由精神，因为它可能会将进步之事强加于未必情愿的民族；而自由精神，为抵抗这类企图，也会与反对进步者结成局部或暂时的同盟；&lt;strong&gt;但是进步唯一可靠和恒久的源泉却是自由，因为只要有自由，有多少个体，就可能会有多少个独立的进取中心。&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>日常一些记录</title>
      <link>https://dodoro.chouxiangpai.com/archives/1534/</link>
      <pubDate>Wed, 23 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1534/</guid>
      <description>&lt;p&gt;作为个体的个人，需要爱国吗？我的答案是：当然要爱国，但是必须警惕狭隘的爱国主义，特别是基于民族主义的爱国，这往往会导致巨大灾难。二十世纪的世界灾难均源于狭隘的爱国主义，比如纳粹德国、军国主义日本和斯大林&amp;hellip;
国家很早之前就已经存在，古希腊的古典政治观念认为国家作为一个政治共同体，亚里士多德认为人在城邦这个共同体中实现价值，西塞罗和康德等人认为共和国是人们依照法律结成的具有共同利益的集合体。
从人类的历史来看，无论从思想解放、经济条件和政治氛围，二战之后的人类基本算是进入现代文明社会，现代文明社会的基石是现代国家。现代国家是一种“统治者的统治要以被统治者同意为前提”的社会契约的产物，根据契约公民们为了公共利益而把自己的一部分权利让渡给了由“公共选择”产生的公益管理者——政府，并承担在这些权利的范围内受政府约束-强制的义务，而其余的一部分权利仍为公民个人所保留，政府不能干预。&lt;/p&gt;
&lt;p&gt;我北漂以来都是几乎都挺顺，跟北京的公共部门打交道也基本顺畅，从个人情感上，我一直心怀感激。但是理性地想一想，作为一名纳税的公民，公共部门做得好本来就是应该的事情，没必要感恩戴德，倒是做得不好的时候要应该去提出想法、甚至去敲打。如果都去歌功颂德，那么就是侮辱和伤害那些跟我同样北漂却苦苦挣扎、或者黯然(甚至被清理)离开的人。&lt;/p&gt;
&lt;p&gt;“基督徒为了信仰，连舍身喂虎都不怕，试问一下，自由派有这样的决心和牺牲精神吗？” &amp;ndash;张军老师&lt;/p&gt;
&lt;p&gt;读完《伯林传》，我认为伯林绝对不可能是一位自由保守主义者，就如哈耶克也不是自由保守主义者。如果因为伯林对“消极自由”和“积极自由”没有给出明确的界限，国内学院派、犬儒派的保守主义者就随便拿他的思想来加固自己的乌龟壳，那么这是对伯林的亵渎！&lt;/p&gt;
&lt;p&gt;政治哲学关联的学科很多，上承哲学，下接实践，牵扯到大量复杂多变的实际情景，几乎不可能建立一整套完整的学说来指导我们的日常政治活动和行为准则，非要对每一种情况都进行大量的政治讨论，那么最终可能会沦为学院派无休止的辩论。我是一名数学爱好者，本科是数学专业，也一直从事数学相关工作，对我来说，政治哲学里的各种学说和数学有一些相似之处(只是没有数学那么清晰简约)，这些学说都基于特点的公理或者公设（请注意，在数学上这些公理和公设并非唯一，也不是说哪个就是真理，比如几何学里的平行公设，存在三种不同的公设，能推出三种不同的几何学。）
那么如何选择所谓的公设和公理，我认为基于现实考虑，我会把自由主义，特别是面向个人主义(或者说人本主义)的自由主义作为公理，其他各种结论，都要以这个公理作为标尺去衡量，实际中可能会有各种情况达不到自由主义的要求，但是一定要尽量朝着这个目标和方向去努力。&lt;/p&gt;
&lt;p&gt;中国商人的传统作风不是做个更巧的捕鼠机来诱捕老鼠，而是绞尽脑汁要取得官方的独占补老鼠的许可。&lt;/p&gt;
&lt;p&gt;我上初中住校之前养过三只小狗，中华田园犬，那时候是从小孩的视角觉得小狗可爱，哪怕当时不知道用这个词。每只都是养不到一年就误食村民放的老鼠药死了。后来我弟弟养小猫，猫不会乱吃东西，偶尔会吃自己抓住的老鼠(很少有毒)，这些猫都顺利长大，其中一只是捕鼠高手，养了好几年，体重超10斤。&lt;/p&gt;
&lt;p&gt;“中国中产的整体心态：有笼统的自由主义倾向，有对一个更公正社会的渴望，但过度相信中国的国运以及国家能力，于是当铁拳砸下之时，前者在后者面前终究不值一提。”很多人都觉得自己能够避开铁拳，部分人甚至认为大唱赞歌可以保全自己，岂不知自己就是自己的掘墓人，毕竟“覆巢之下，焉有完卵”。&lt;/p&gt;
&lt;p&gt;大约是六年前，机缘巧合和“近水楼台”的原因，我开始旁听周濂老师的《西方哲学史》和《Modern political philosophy》这两门课。周老师的课堂唤醒了我青少年时期对哲学的兴趣，并激发我去不断阅读和思考，我其实喜欢数学，因为早期的数学家往往都是哲学家，那时候读了不少相关读物。听课的这段时期，我的思想完成了一次(可能是最后一次，因为人老了)大的重构。
由于我连续两年重复去听同样的课，老师似乎看出我不是他的学生，但是我们都没有主动去打招呼，课堂上偶尔的眼神交流，我觉得我们都“知道”彼此的一些想法。周老师说自己是“偷偷的乐观主义者”，我觉得自己也是如此，我一直相信：一个拥有三千多年文明的古老民族，一定拥有足够的智慧和胸怀去吸纳多元的价值和理念、最终构建一个合理的现代社会，虽然发展的轨迹是螺旋式向上。当然我没有周老师的勇气、才华和耐心，所以我最终依然只是一个旁观者。
周老师说自己的每一次写作都是“身份确认”，他在文中引了自己在公共号看到的一段话：“其实很多时候人不是为了‘希望’而活，而是为了‘身份确认’。泰坦尼克号即将沉没的时候，船上的音乐家为何还要演奏？是为了希望吗？明明已经看不到任何希望。之所以还要演奏，更重要的原因是因为‘自己是音乐家、演奏者’，在生命的最后时刻，要完成自己的‘身份确认’，完成自己要做的事情而已。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书笔记——养育女孩</title>
      <link>https://dodoro.chouxiangpai.com/archives/1661/</link>
      <pubDate>Wed, 23 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1661/</guid>
      <description>&lt;h2 id=&#34;引言&#34;&gt;引言&lt;/h2&gt;
&lt;p&gt;**女孩出生后的第一年是大脑发育和心脏发育最迅速的一年。**在这一年里，她们的大脑中会逐渐形成爱的能力、安全感以及与世界上另一个人建立信任和共鸣的能力，在这一年里，我们不能把她们仅仅当做嗷嗷待哺、哭闹不止的小家伙，而是需要付出时间和真心去交流的小生命。&lt;/p&gt;
&lt;p&gt;对于女儿而言，如今的世界充满了“毒素”——各种媒体散发出的消息是欲望与低俗的洪流，超市货架上摆放的商品中含有各种各样危害身体健康的成分。我们需要时时刻刻提高警惕，好让她们的身心所吸收到的一切尽可能健康。&lt;/p&gt;
&lt;p&gt;**父母所遭受的文化和心理压力或伤害可能会传递到孩子身上。**我绝不是危言耸听，我想提醒父母们，我们赋予孩子的一切中，有一半来自我们自己，因此，我们首先需要让自己变成身心健康的人。&lt;/p&gt;
&lt;p&gt;父亲的角色在女儿建立自信和自尊的过程中发挥了无可替代的重要作用。&lt;strong&gt;一位理想的父亲懂得如何实现各种微妙的平衡&lt;/strong&gt;：疼爱女儿，但不干涉她成长的自由；与女儿轻松愉快地交流，但在关键问题的处理上绝不纵容；关心女儿的生活，同时更懂得与之建立越来越深厚的信任。&lt;/p&gt;
&lt;p&gt;你的女儿可能刚刚降生，或者正在蹒跚学步，或者已经进入学校学习。她也许正处在青春期，心灵敏感脆弱，却已经逐渐形成了对性别和身份的认知；她也许已是位年轻的女郎，正处于谈婚论嫁的年龄，同时也正在社会上奋力打拼，她将越来越独立，对你的依赖越来越少；或者她自己也是位母亲，已经能够深深懂得并与你分享母亲与孩子之间亲密而奇妙的情感维系。无论你的女儿处在生命的哪一阶段，你都不能放弃履行父母的职责。&lt;/p&gt;
&lt;p&gt;希望所有女孩的父母记住一点：&lt;strong&gt;不要把孩子当做任由我们操纵的木偶&lt;/strong&gt;。她们应当向世界展示她们独一无二的特质，她们只属于自己。作为父母，我们应该感到幸运，能够将她们引领到这个世界，并且陪她们度过一段美好时光。&lt;/p&gt;
&lt;p&gt;**如果你有一个个性鲜明的女儿，帮助她开发天赋和潜力非常重要。**我希望本书能助你一臂之力。我会在你身边指明你可能会犯的错误，并教你提早防范，但首先，我会告诉你如何同女儿建立互相信赖的亲密关系。&lt;/p&gt;
&lt;h2 id=&#34;第一章-为什么女孩们别具特色&#34;&gt;第一章 为什么女孩们别具特色&lt;/h2&gt;
&lt;p&gt;**女孩们并不总是温柔、宁静可爱的，就像男孩们并非一定是聪明好动的。**每个孩子都是特色独具的独立个体：他们每个人都为这世界带来一道独一无二的风景，同时每个人在成长中也都受到周围环境的影响和塑造。&lt;/p&gt;
&lt;p&gt;关于男性和女性大脑差异，最易引发争论的是连接左右半脑之间的神经纤维束数量的差异。女性大脑中胼胝体这个连接左右半脑的桥梁明显要比男性的大，这也可以解释男性和女性在思维方式上的差异。女性会同时运用大脑左右半球，而男性却通常只能调用一个半球的信息。&lt;/p&gt;
&lt;p&gt;也有研究表明女孩的左半脑发育速度要比男孩快，也正因为如此，男孩学习说话的时间通常比女孩晚。负责空间和视觉方面感知的右半脑则会在女孩身上发育得较晚，这也是女孩的空间方位感比较差的原因。&lt;/p&gt;
&lt;p&gt;父母经常会对女婴说话，这可以解释为什么女孩看上去会更专注地倾听。&lt;strong&gt;由于女孩保持视觉注意力的时间比男孩更长，她们会要求父母花更长时间对她们微笑或说话。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;从世界名模到默默无闻的人道主义工作者都被拿来当做女孩们的榜样。她们身上的什么特质对你而言最重要？如果你意识到你崇拜的女性是哪种类型，了解自己在生活中属于哪种类型的女人，以及对于其他女性特质的接受程度如何，那么你在抚养女儿时就会容易得多。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;女孩主要有这么几种类型&lt;/strong&gt;：一种性格坚韧，内心充满自信，适应能力强，有强烈的表现欲；另一类女孩欠缺自信心，畏惧同异性打交道，认为自己前途渺茫；还有一种女孩不愿意被任何组织束缚，她们希望能找到专属于自己的定位与未来。&lt;/p&gt;
&lt;p&gt;我希望人们能够重新珍视富有同情心，乐于合作及帮助他人，有集体责任感，富有创造性、想象力以及直觉和智慧等美好的品质。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;女性可以自由决定自己的生活方式&lt;/strong&gt;，我认为至关重要的是，她们能把自己的一生奉献给这样的生活：在联合国大会上发表慷慨激昂的演说，呼吁人类反对战争，维护世界的公正与和平；抵抗暴力；加入保护自然的组织，坚决不参与任何破坏环境的活动等等。身为母亲，我们要让女儿熟悉与自然相关的一切，教育她们要尊重生命，肯定女性在方方面面的成就。&lt;/p&gt;
&lt;p&gt;女性特质表现在女人能繁衍生命，呵护并伴随孩子成长，然后看着他们再繁衍下一代。我们要意识到生命遵循着某种规律，死亡是生命的必经部分，历经岁月磨砺之后，一个生命消逝，另一个新的生命开始成长。让我们带女儿去赏月吧，通过仔细观察夜空中的月亮，她可能对生活在地球上的生命会了解得更透彻。&lt;/p&gt;
&lt;h2 id=&#34;第二章-与初生的女儿建立亲密联系&#34;&gt;第二章 与初生的女儿建立亲密联系&lt;/h2&gt;
&lt;p&gt;你的女儿就是这样。**你越爱她，她越会成长得令你自豪。**具体来说，这意味着在她出生后的前几个月，你要一直在她身边陪伴着她。她需要你给她充满爱意的抚摸，向她传递来自周遭世界的信息；需要你用母乳喂养，和她聊天，带她到处转转看看，睡在她身旁。&lt;/p&gt;
&lt;p&gt;如果你能接受孩子的性格，全身心地照顾和保护她，给她全面的安全感，那么你就会为她搭建好成长所需的情感根基。尽可能多地爱孩子。她们纯真无邪，毫无自我保护能力，仰赖着你的照顾。尽可能多地爱孩子。她们纯真无邪，毫无自我保护能力，仰赖着你的照顾。&lt;/p&gt;
&lt;p&gt;和母亲一样，父亲和女儿的主要交流方式也是通过言语对话。但父亲们更喜欢玩耍，更喜爱与女儿进行有肢体接触的互动，并且会在交流中突然转变彼此之间的互动关系。成长在完整家庭中的女孩们会很早就认识到，与母亲和父亲之间的关系模式存在差异，她们会对这两种关系模式寄予不同的期望，这让她们更容易融入新环境。&lt;/p&gt;
&lt;p&gt;**不要满足女儿的所有要求，我们需要懂得如何承诺和拒绝。**如果你把他人（包括女儿）看做一个独立个体，那么你也应该接纳每个人在处理任何事情时，都应该有自己的决定权。拒绝孩子的要求其实很正常，然而拒绝孩子的某些要求并不意味着否定孩子。&lt;/p&gt;
&lt;p&gt;为孩子做个好榜样，家长都会要求孩子诚实，但自己却经常谎话连篇。时刻检视自己的行为并对自己和孩子保持诚实，只有这样，孩子才会变得诚实而坦率。一个诚实表达自己想法并且坚持真性情的人永远值得尊重。&lt;/p&gt;
&lt;p&gt;愉快地进餐，吃饭、睡觉以及满足性欲这些最基本的生存需要给我们造成了如此多的麻烦。如果你不在家中储存不健康的食品，那就没问题。如果你为孩子的营养奠定了良好基础，那么，即使孩子在同学家中偶尔接触了糖、防腐剂、氧化剂或者其他有害物质，她也会更加有抵抗力。&lt;/p&gt;
&lt;p&gt;**用餐礼仪的重要性毫不逊于对食物的选择。**孩子需要在一个友好温和的气氛中用餐。全家人一起吃饭时，不要批评女儿或者伴侣，也不要争论。如果有问题要讨论，可以选择在饭后散步时或者坐在客厅里交流。&lt;/p&gt;
&lt;h2 id=&#34;第三章-关注女儿的幼年成长&#34;&gt;第三章 关注女儿的幼年成长&lt;/h2&gt;
&lt;p&gt;女孩的语言流畅性会比男孩更好：她们的大脑左半球发育较早，而左半球正是语言中枢所在。这又使我们联想到男女大脑差异。有意思的是，父母们对这种差别的回应几乎是无意识的：与儿子相比，他们往往更积极地鼓励女儿说话。&lt;/p&gt;
&lt;p&gt;如果你的女儿弹钢琴，那么她大脑的所有部分都会被激发起来。&lt;strong&gt;音乐、运动、绘画以及捏橡皮泥不仅仅是为了好玩，更能帮她发展智力&lt;/strong&gt;，当然，一切都要建立在孩子自愿、开心的前提下。&lt;/p&gt;
&lt;p&gt;家长需要明白一件事：如果孩子的马桶训练不那么顺利，这并不是她想要惹父母生气或者要惩罚父母，而是因为她们还无法完全理解这件事，或者对即将发生的事情有些害怕。这个时候，耐心、爱心和理解是她们最需要的；处罚、斥责或者嘲笑只会适得其反，或者使问题更复杂。&lt;/p&gt;
&lt;p&gt;阴蒂是女性身体上最为敏感的部位，比男性性器官敏感得多，它能为女性带来极致的快乐。它是一个神圣的秘密，一个不含一丝丑恶的潘多拉宝盒，在它之内满是愉悦。女孩很早就会发现身体中这个奇妙的部分，我们只需放手让她去认识它。如果被允许随意探索自己的身体，女孩们就不大可能会去嫉妒男孩的性器官。&lt;/p&gt;
&lt;p&gt;父亲可以对女儿做出哪些举动，而哪些又是禁止的？在家庭疗法中有一条很简单的规则非常适用：始终保持界限。作为一个成年人，父亲有责任和义务去作一些约束。父亲应该扮演的是女儿想要的守护者的角色。以此为目的的一切都是合适的，“纯净”的玩闹对你们双方都很重要。在游戏中你可能会产生性冲动，这是可能发生的状况，作为父亲，你应该划清界限并停止游戏。&lt;/p&gt;
&lt;p&gt;许多小女孩知道如何不动声色地挑逗。她们的魅力令人难以抗拒。**所以父亲们需要明确地划清界限，牢记自己的责任。**不要让她们的小手引诱你，当然也不要粗鲁地拒绝，这样才会令她成长得更健康。明确告诉她你不喜欢这样，也不要作过多深入的解释。&lt;/p&gt;
&lt;p&gt;考虑是否需要和什么时候重返职场时，需要谨记：快乐的父母才更有可能养育快乐的孩子。女儿受到影响是因为她没有得到足够的照顾，也没有玩伴；你也会因为受到打扰而无法完成工作；你的家庭则会因为你在工作和家庭生活之间没有明确的界限而变得混乱。&lt;/p&gt;
&lt;h2 id=&#34;第四章-洞察女儿的内心世界&#34;&gt;第四章 洞察女儿的内心世界&lt;/h2&gt;
&lt;p&gt;建立明确的自我认知，是你能给予女儿的最好的保护。这意味着孩子懂得肯定和欣赏自己的价值，无论自己的外貌、能力或者表现如何。如果女儿觉得自己是重要的、有价值的，她就会懂得捍卫自己的身体、权利和尊严。&lt;/p&gt;
&lt;p&gt;**允许女儿表达她所有的感受，甚至是消极情绪，比如嫉妒、怨恨、愤怒。**这些挑衅性情绪并不都是坏的，因为它能帮助女儿维护自己的立场。作为成年女性，我们可以完全自由地去表达这些情绪，那么也应该让女儿们自由享受这样的权利。&lt;/p&gt;
&lt;p&gt;在女儿形成自信和自尊的过程中，父亲可以提供很多帮助。当女儿感觉到被父亲爱护、尊重并得到他的高度评价后，她从父亲那里得到的远远超过一箱丰实的嫁妆。要注意的是，父亲需要在言行中让女儿切切实实感知到这种爱和尊重。&lt;/p&gt;
&lt;p&gt;帮助女儿建立良好的自尊，可以从她还在蹒跚学步时就开始。女儿在学习或玩耍过程中，如果事情进展得不顺利，不要急着帮她完成，把问题留给她自己去解决，即使失败，也可以鼓励她再尝试一次。&lt;/p&gt;
&lt;p&gt;每个孩子都会偶尔感到恐惧，但是无论在哪里，男性都不希望表现出他们的恐惧。社会对于女性在表现恐惧感这方面要宽容得多，这可能就是为什么女性比同龄男性更容易表现或承认恐惧。尽管有生物学上的差异,女孩的过度恐惧也与父母或其他监护人的过度保护有关。&lt;strong&gt;如果你让孩子拥有正常的体验,包括意外跌倒,他们就能学会如何处理困境，无论是男孩还是女孩。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;训练女儿的动作技能。通过探索身体的能量，我们学会如何控制我们的身体，这能帮我们提升对于身体的自信，从而降低恐惧。唱歌同样也是一个对抗恐惧感的好方法。如果你经常不由自主地和女儿一起唱歌，这些歌曲就能在许多情况下帮助你的女儿克服恐惧。**放松练习也是一种对抗恐惧的方式。**一个懂得怎样使自己放松的人能够控制恐惧，也能更有自信地降低恐惧感。&lt;/p&gt;
&lt;p&gt;**不要认为什么都是理所当然的。失去孩子的可能性总是存在的。**你应当领悟到你和孩子共度的每一天都是美好的。信任和忠诚就是对她们最好的保护。而且你的每一个微笑都有意义。如果你知道孩子明天将要离开，那么今天你的表现会有何不同呢。&lt;/p&gt;
&lt;p&gt;**犯错是必需的，重要的是不要消极地评价它们。**犯错应该被看做是找到新的解决方法的动力。因此父母必须仔细考虑怎样鼓励女儿，强化她们对于自己能力的信任。其中一个要领是使用积极的语言。例如：“你可以得到它！”、“你没问题！”这些语句能够培养女儿的毅力，并强化她们对于自己能力的信任，有助于避免她们因为所犯的错误自惭形秽或者成为听天由命的弱者。&lt;/p&gt;
&lt;p&gt;很多孩子都希望拥有一只宠物。**孩子应该和小动物建立亲密关系并学会照顾它们。**当然如果你女儿不想养宠物，我也并不想说服你去养一只，因为在这种情况下宠物通常会被忽视。但是我敢向你保证，如果你的女儿准备好养宠物，它们会让她的生活丰富多彩。&lt;/p&gt;
&lt;h2 id=&#34;第五章-社会环境对女孩的影响&#34;&gt;第五章 社会环境对女孩的影响&lt;/h2&gt;
&lt;p&gt;当女儿第一天上学时，作为父母，你可能会预料到她是能够在学校里如鱼得水，还是会觉得困难重重。很多孩子在迈入社会第一步时都充满好奇，但是另外一些孩子认为前方充满了障碍和困难，他们需要时间去适应。对于父母来说也是如此：很多父母在看到孩子走向外面的世界时感到舒心，而另外一些父母则是忧心忡忡。&lt;/p&gt;
&lt;p&gt;当你在为你的女儿选择学校时，请仔细阅读该学校关于教学目标的说明，找到其中关于性别角色的描述。如果你对这些不满意，咨询学校的相关人员，弄清楚学校在这方面的定位——如果你感觉在性别定位上学校的立场与你的相左，尝试去改变它。这很重要，因为将来你要依据这些说明来讨论女儿在校期间的所有事情。&lt;/p&gt;
&lt;p&gt;女孩经常会压抑自己的愤怒和不满，把这些情绪深埋心中。一些女孩子把这些情绪归咎于自己，这会导致她们产生自卑情绪，或者无法充分展现自我，在极端情况下甚至会选择自杀。&lt;/p&gt;
&lt;p&gt;**女孩的第一本图画书应该简单些，每页最好只有一种物品。**如果你愿意的话，也可以把图画绣在布上。这样你的女儿可以动用她的各种感官去感受这些图画。几乎所有的童话故事里，女性都扮演着十分重要的角色。仅此一个理由，就足以让你重视它们。&lt;/p&gt;
&lt;p&gt;童话故事告诉我们，没有什么事情是不可能的。&lt;strong&gt;只要你不放弃，任何困难都能够得到解决。一个人只要拥有一颗开放的、善良的心，她就会变得聪明富有。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;拥有漂亮的外表并不是一件容易的事，因为人们对美人有很高的期待。首先，她们要更聪明、更热情、更愉快自然。你可以通过观察你女儿的兴趣，以及什么能给她带来快乐，来慢慢发现你女儿的事业梦想是什么，这种源自内心的快乐是不能通过后天环境培养的。&lt;/p&gt;
&lt;p&gt;成年后，许多人接受了来自社会和家庭的规范、约束和期望。由于这些外部压力，她们开始从事她们并不想做的事情，并以这种方式改变自己，甚至有时放弃自己原本想实现的梦想。这样的人无法在自己从事的工作中找到快乐，因为真正的快乐来自于你正在实现你的梦想。&lt;/p&gt;
&lt;h2 id=&#34;第六章-学校和学习将如何影响女孩的性格&#34;&gt;第六章 学校和学习将如何影响女孩的性格&lt;/h2&gt;
&lt;p&gt;女儿除了从家里获得成长所需的教育和给养之外，她还从社会上接受大量信息，为社会所影响和塑造。在学校里，女孩在许多方面都比同龄的男孩更优秀。她们更能适应学校的氛围，也能更快地学会阅读和写字，而且通常不怎么惹麻烦。&lt;/p&gt;
&lt;p&gt;在女儿开始进入社会时，**你能帮女儿做的第一件事情，就是帮她挑选一所条件优秀，且能让她自由快乐学习的学校。**不幸的是，在一些学校，孩子们的自尊未能得到妥善的保护，有时甚至遭到伤害。这是一个很难处理的问题，但是如果真的发生了，你有责任去学校了解情况，让学校认识到这些疏忽并且致力于改进。&lt;/p&gt;
&lt;p&gt;有些女孩的读写能力不如大多数女孩，她们就会感觉到被孤立，甚至有被她们的小群体开除的危险。而这对女孩子来说尤其可怕，因为小群体对女孩来说很重要，意味着陪伴、归属感和自我认知的来源。&lt;/p&gt;
&lt;p&gt;如果你女儿在学校成绩不好或者遇到其他问题，**你应该鼓励支持她，并告诉她尽管现在遭遇了麻烦，但你仍然很爱她，这点尤其重要。**如果必要的话，你还可以和她的老师谈谈，安排课外补课。&lt;/p&gt;
&lt;p&gt;**造成男女生在数学等理科科目成绩上差异的决定性因素是父母的态度，许多父母觉得女孩在数学方面的天赋不如男孩。**更重要的是，许多女孩自己似乎也认同这种看法。刚进入青春期时，女孩对数学的兴趣会消减，这使她们处于不利地位，因为数学是许多学科的基础。&lt;/p&gt;
&lt;p&gt;就数学学习而言，如果你对男孩和女孩区别对待，对女孩表现出较低的期望，那么她们往往就会获得更低的数学分数。这其实就是“自我实现”的原理。这意味着你对女儿的鼓励尤为重要。女孩其实是可以获得和男孩一样的数学成绩的，关键是看你对她抱以何种期望，以及她们对自己抱有何种期望。&lt;/p&gt;
&lt;p&gt;数学教学往往采用有限的教辅工具，而这些工具很多并不适合女孩的学习方式，所以女孩在学习数学时会遇到障碍。我的一位朋友给我看了下蒙台梭利学校的数学教学资料，这些教学材料清晰直观，而且非常有吸引力。&lt;/p&gt;
&lt;h2 id=&#34;第七章-青春期女孩的生理与心理保卫战&#34;&gt;第七章 青春期女孩的生理与心理保卫战&lt;/h2&gt;
&lt;p&gt;**青春期是所有孩子和父母都要面对的巨大挑战。**女孩还是9岁或者10岁时，她们通常显得坚定而自信，到了13岁~15岁时，她们开始感到迷茫、不安、缺乏安全感。这个时期，她们对自己的角色期待对她们的影响力比父母的影响更大。&lt;/p&gt;
&lt;p&gt;女孩在青春期和成年早期的问题，父母并不能全部解决。在这个阶段，女孩们的女性朋友、崇敬的老师，或者其他值得信赖的成年人都会是解决问题的不错帮手。从青春期过渡到成人，这个过程至关重要，在此之后，你的女儿就要离开家了。因此，充分表达出对彼此的爱显得至关重要。如果分离进展得不顺利，那么女儿可能对你产生终身依赖。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]卢梭与休谟：两种不同的启蒙理性</title>
      <link>https://dodoro.chouxiangpai.com/archives/1658/</link>
      <pubDate>Tue, 22 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1658/</guid>
      <description>&lt;p&gt;&lt;strong&gt;法国启蒙精神相信人类有能力通过有意识的“设计”和“规划”，对社会进行全盘“改造”，卢梭集其大成。英国启蒙精神则反对对社会进行任何整体性的、有意识的“计划”和“改造”，以大卫·休谟等人为杰出代表。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;《卢梭与休谟：他们时代的恩怨》，【英】大卫·埃德蒙兹、约翰·艾丁诺著，周保巍、杨杰译，上海人民出版社2016年10月第1版&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;读《卢梭与休谟：他们时代的恩怨》&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;虽然表面上同样是高扬理性的作用，法国启蒙运动（基本涵盖整个欧洲大陆）与英国启蒙运动（集中于当时的苏格兰）有着截然不同的思想基础，并存在着根本分歧和对立。&lt;/p&gt;
&lt;p&gt;法国启蒙精神是一种“建构论理性主义”。它相信人类有能力通过有意识的“设计”和“规划”，对业已存在了几千年的社会进行全盘“改造”。它的发展和实践直接导致了20世纪的极权主义政治实践，酿成了史无前例的人类悲剧，因而是一条“通往奴役之路”。这种一手导致了“法国道路”的“法国精神”的主要代表，自笛卡尔始，至卢梭集其大成。&lt;/p&gt;
&lt;p&gt;而英国启蒙精神则是一种“经验论理性主义”。它虽然对理性在人类事务中的作用抱有乐观期待，但同时对人类理性的极限有着深刻的认识和警惕。它坚决反对对社会进行任何整体性的、有意识的“计划”和“改造”，深信只有凭借过往经验，通过局部的、零敲碎打式的改进，才有可能推动社会取得真正进步。这是通往人类自由繁荣的唯一可取之路，但它在当代遭遇了极大的威胁。这一“英国道路”背后的“英国精神”的代表人物，则是18世纪苏格兰启蒙思想家群体，尤以大卫·休谟等人为杰出代表。&lt;/p&gt;
&lt;p&gt;除了经验演化论与理性建构论的区别之外，“法国思维”与“英国思维”还分别同“全盘反传统的激进主义”与“渐进改良的保守主义”有极其密切的关联。&lt;/p&gt;
&lt;p&gt;我自己高度认同“法国道路”与“英国道路”之间的分野，也同意哈耶克用“理性建构”与“经验演化”来分别概括这两种不同道路是相当合适的。但我对于哈耶克及其追随者认定的促成它们的原因——即“法国启蒙理性”与“英国启蒙理性”——却一直将信将疑。因为研读西方思想史的经历告诉我，法国思想家里除了有哈耶克批判的笛卡尔、孔德、卢梭，也有孟德斯鸠、贡斯当、托克维尔……那样浑身上下散发着“英国思维”的人；反之，英国思想家中除了哈耶克赞誉的休谟、斯密、伯克，也有霍布斯、边沁、密尔……那样满脑子“法国思维”的人。&lt;/p&gt;
&lt;p&gt;如果你列出一张比较完整的启蒙思想家的谱系表的话，我可以非常有把握地说，它上面具有“英国思维”的法国人同具有“法国思维”的英国人一样多，反之亦然。然而，前者并没有能够阻止“法国道路”，并把法国引上“英国道路”；后者也没有阻碍“英国道路”，并把英国带上“法国道路”。&lt;/p&gt;
&lt;p&gt;我的观点毋宁是，历史上并没有存在过真实的“英国思维”和“法国思维”。这两种不同的“路线斗争”更是全然凭空臆想出来的。举个最简单的例子，休谟和斯密都在法国长期学习、工作和生活过，与当时法国知识精英们交从过密。相反，卢梭倒是与当时大多数法国思想家关系紧张（如今紧挨着躺在先贤祠里的卢梭与伏尔泰就是一对死敌，两人都用恶毒的话语攻击过对方），但他在英国却有众多拥趸。更具讽刺意味的是，史上最伟大的两位自由主义思想家亚里克谢·德·托克维尔和伊曼纽尔·康德都是卢梭最坚定的崇拜者……&lt;/p&gt;
&lt;p&gt;再深入一步，法国人让-雅克·卢梭与英国人大卫·休谟确实有很深的恩怨。然而，阅读促使我认为，这里面，个人性格上和精神健康方面的偶然因素占了更大的比例。哈耶克却将这种恩怨认为仿佛这是“英式经验主义”和“法式建构主义”的“两条路线”之间的观念斗争。&lt;/p&gt;
&lt;p&gt;进一步的研读还告诉我，进入现代以后，英国与欧洲大陆（法国是其典型）截然不同的发展道路主要不是由不同的启蒙思想观念（即所谓“英国思想”与“法国思想”）决定的。事实上，自从罗马帝国衰亡以后，一系列客观原因促使英国与欧洲大陆国家就已经各自走向了不同的命运。许多人倒因为果了，是不同的政治经济结构和社会土壤选择了不同的“思想观念”，而不是不同的“思想观念”导致了不同的政治、经济和社会结构。&lt;/p&gt;
&lt;p&gt;今天，流连在爱丁堡、格拉斯哥和阿伯丁的大街上，你从任何一个角度举目四望，都会发现十分眼熟的欧陆风情。仅仅从景观上说，这些苏格兰城市就都要比伦敦和利物浦更像欧洲大陆城市。不仅如此，今日苏格兰人在思想和情感上也是所有英国人中最亲欧的，他们是最反对英国脱欧的。&lt;/p&gt;
&lt;p&gt;我当然并不是想要以此否定苏格兰启蒙思想家们与法国启蒙思想家们及其思想观念之间的区别，但我想说，他们绝非非此即彼的对立关系。与许多哈耶克的中国学生的想象完全相反，这两组璀璨的群星曾经频繁交往、互通有无，不少人之间（例如伏尔泰与休谟）还亲密无间，他们携手缔造了人类历史上的辉煌一幕。&lt;/p&gt;
&lt;p&gt;要对启蒙展开真正有意义的反思，首要任务就是破除这种根深蒂固的决定论迷思，还原真实历史，将思想观念与社会现实之间的关系恰如其分地安放好。只有当我们能够抹去遮在自己双眼上的蜘蛛网，我们才有可能获得真实可靠的知识。&lt;/p&gt;
&lt;p&gt;陈季冰&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书笔记——休谟和《人性论》</title>
      <link>https://dodoro.chouxiangpai.com/archives/1652/</link>
      <pubDate>Tue, 22 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1652/</guid>
      <description>&lt;p&gt;我一直到了前几年才开始阅读休谟，在这之前我都是理性思维的倡导者，虽然我在大学后期已经抛弃数学是宇宙的自然法则这种观念，但是年轻时代对理性的执着一直印在我的脑子里。休谟的著作让我从自己的感受和感知去体会自己的知识和对世界的认识，这是一种全所未有的体验，可以说：我又重新认识了一次这个世界。&lt;/p&gt;
&lt;h2 id=&#34;大卫休谟&#34;&gt;大卫.休谟&lt;/h2&gt;
&lt;p&gt;大卫·休谟是苏格兰的哲学家、经济学家和历史学家，他是苏格兰启蒙运动以及西方哲学历史中最重要的人物之一。法国启蒙精神相信人类有能力通过有意识的“设计”和“规划”，对社会进行全盘“改造”，卢梭集其大成。&lt;strong&gt;英国启蒙精神则反对对社会进行任何整体性的、有意识的“计划”和“改造”，以大卫·休谟等人为杰出代表。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;虽然休谟属于18世纪的哲学家，他的著作中讨论到的题材大多与现代哲学界的主要争论有密切关系，这与其他同时代的哲学家相较是相当罕见的。一些休谟最具影响力的哲学思想可以归类为以下几点：&lt;/p&gt;
&lt;h4 id=&#34;1因果问题&#34;&gt;&lt;strong&gt;1、因果问题&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;大多数人都相信只要一件事物伴随着另一件事物而来，两件事物之间必然存在着一种关联，使得后者伴随前者出现。休谟反驳了这个理论，他指出&lt;strong&gt;虽然我们能观察到一件事物随着另一件事物而来，我们却并不能观察到这两件事物之间的关联&lt;/strong&gt;。我们只能够相信那些依据我们观察所得到的知识。休谟主张我们对于因果的概念只不过是我们期待一件事物伴随另一件事物而来的想法罢了。“我们无从得知因果之间的关系，只能得知某些事物总是会连结在一起，而这些事物在过去的经验里又是从不曾分开过的。我们并不能看透连结这些事物背后的理性为何，我们只能观察到这些事物的本身，并且发现这些事物总是透过一种经常的连结而被我们在想像中归类。”也因此我们不能说一件事物造就了另一件事物，我们所知道的只是一件事物跟另一件事物可能有所关连。休谟在这里提出了**“恒常连结”**（constant conjunction）这个词，恒常连结代表当我们看到某件事物总是“造成”另一事物时，我们所看到的其实是一件事物总是与另一件事物“恒常连结”。&lt;/p&gt;
&lt;h4 id=&#34;2归纳问题&#34;&gt;&lt;strong&gt;2、归纳问题&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;休谟主张所有人类的思考活动都可以分为两种：追求“观念的连结”（Relation of Ideas）与“实际的真相”（Matters of Fact）。前者牵涉到的是抽象的逻辑概念与数学，并且以直觉和逻辑演绎为主；后者则是以研究现实世界的情况为主。而为了避免被任何我们所不知道的实际真相或在我们过去经验中不曾察觉的事实的影响，我们必须使用归纳思考。&lt;/p&gt;
&lt;p&gt;休谟接着总结道我们的思考能力并没有一个理性的基础，因为没有任何形式的理性可以证实这样的能力。在这里要注意的是休谟并不是在主张以下几点：他并不是主张因为归纳法不属于演绎法，所以那并不理性（休谟并不是所谓的“演绎主义者”）。&lt;/p&gt;
&lt;h4 id=&#34;3自我理论&#34;&gt;&lt;strong&gt;3、自我理论&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;休谟指出我们通常会假设现在的我们就和五年前的我们没有两样，虽然我们在许多方面都有了改变，呈现在五年前的我们和现在的我们都是同一个人。我们也会思考时光究竟可以在不改变一个人自身的情况下，改变一个人内在到什么程度。不过休谟否认那神秘的自我与一个人所带有的各式各样人格之间是有所区分的。当我们开始自省时我们会发现：“除非依靠一种特定的感觉，我们从来不可能有任何的意识；人只不过是由许多不同的感觉累积而成的一个集合，这些感觉永远处在一种快到无法想像的流动速度中互相交替汰换。”&lt;/p&gt;
&lt;p&gt;很明显的是在我们思考的过程中我们的各种思想永远都在改变，我们的想像力可以轻易的从一个想法转换到另一个类似的想法，而想法本身的特质便足以形成一个连结和联想。同样的，我们的感觉也必然会不断的改变，改变了的感觉也会类似于之前的感觉。想像力必然是经过长时间的习惯所培养下来的思考方式，随着空间和时间的改变而不断想出更新的想法。&lt;/p&gt;
&lt;h4 id=&#34;4政治理论&#34;&gt;&lt;strong&gt;4、政治理论&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;许多人将休谟视为是政治上的保守主义者，有时候还称他为第一名保守主义的哲学家。不过如果保守主义指的是现代的定义的话，这种说法也不见得完全正确。从现代观点来看，休谟的思想同时包含了保守主义与自由主义，也包含了契约主义论与功利主义。休谟认为社会最好是由一套普遍的而公正的司法体制所治理，并且根基在“狡猾的”契约原则上设计。休谟比较少注重这些维护法律的政府形式应该为何，他认为只要政府能够保持公正便是好的政府。&lt;/p&gt;
&lt;p&gt;休谟一直表达他对于那些企图改革社会而不顾既定传统的激进政策的不信任态度，他也劝告人们不需反抗他们的政府，除非在遇到极为恶劣的暴政时以外。休谟也对于社会的进步保持乐观，他相信贸易的扩展会带来经济的繁荣，社会也会从一个“未开化状态”发展为一个“文明”。一个有文明的社会是开放的、和平的、而且社会交流频繁的，其市民也会因此而活得更为快乐。休谟也大力主张将政治权力分立、分散，并且支持将选举权延伸到所有拥有财产的公民，同时也要限制教会的权力。&lt;/p&gt;
&lt;h2 id=&#34;人性论&#34;&gt;《人性论》&lt;/h2&gt;
&lt;p&gt;《人性论》分为三卷，分别讨论理智、情感和道德，阐明了休谟最主要的哲学思想。休谟认为，建立人性科学的全部材料是在感知中提炼的。&lt;strong&gt;感知作为意识内容的东西分为两种，即“印象”和“观念”，它们是两类知觉&lt;/strong&gt;。印象是指初次呈现于心灵的一切感觉、情感和情绪，具有较多的力量，比较猛烈。观念是指由记忆和想象对以前印象的再现，即对印象的“模仿和草拟”，是思考和推理中的印象的模糊心像。一切单纯观念都有一个单纯印象与之相应，但复合观念则未必那样，没见过长翅膀的马却可以对它进行想象。这是休谟在哲学中建立的“第一条原则”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书笔记——养育女孩（成长版）</title>
      <link>https://dodoro.chouxiangpai.com/archives/1644/</link>
      <pubDate>Mon, 21 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1644/</guid>
      <description>&lt;p&gt;我之前都是看育儿方面的书籍，注重的是通用性的知识，即如何把孩子抚养长大，这段时间读了几本不一样的书，侧重从心理成长方面指导如何养育女孩和男孩，这本书是澳大利亚的育儿研究机构的研究员史蒂夫·比达尔夫的作品，这本书是成长版，还有另外一本养育女孩的书。&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;**女儿的成长历程 你的女儿独一无二、举世无双。**她降临到这个世界上是有特殊原因的，她是为了发现生命的意义、实现人生的价值而来。在这个历程中，你起着巨大的作用，但这一切都要从你由衷地欣赏自己的女儿开始。和其他人相比，你对自己的女儿有更深的了解，并且无条件地爱着她。对她的优点，你要多加鼓励，对她的不足之处，你要想办法帮助她改正。&lt;/p&gt;
&lt;p&gt;我们可以从一个美好、恰当的角度来看待女孩的成长过程。它就像是一次“探索”，一次有目的地的旅途。在途中，女孩会一点点蜕变成为成熟的女性。而我们是她们年幼时的导师，是在她们成长岁月中给予她们帮助的守护者。在抚养孩子时，我们总是既关注眼下也着眼未来。一方面，我们因和她们度过的每一天而感到高兴，另一方面，也不免会预想将来——当我们不在她们身边时，还有什么重要的事情是她们必须事先经历和学习的。&lt;/p&gt;
&lt;h2 id=&#34;第一章-安全和充满爱的开端&#34;&gt;第一章 安全和充满爱的开端&lt;/h2&gt;
&lt;p&gt;父母若能注重帮助女儿建立安全感和价值感，哪怕不是时时刻刻都这样，那么即使在父母去世很久以后，温馨的记忆也会伴随孩子终生。当她长大遇到困难的时候，这些记忆就是她力量的源泉。当然，成年人可能会不以为然，毕竟成人的世界充满了紧张和压力，人们整天疲于奔命，力争上游。但和婴儿或幼童在一起时，重心一定要改变。我们能为孩子做的最宝贵的事情其实很简单：提供平和安宁的环境。&lt;/p&gt;
&lt;p&gt;**爱的奥秘是慢一点，再慢一点。**每次给父母们做演讲时，我总是注意观察，仔细聆听。**匆匆忙忙是爱的大敌。**你需要用语言和肢体接触使孩子感到安心。一旦他们感受到你内心的平静，他们也会变得平静下来。&lt;/p&gt;
&lt;p&gt;大脑成年期对人的一生影响巨大，在12~18岁（男孩子持续的时间更长），**孩子会重新经历成长的各个阶段。**这种情况给父母提供了绝佳的机会，来修复以前在孩子的这些成长阶段所犯的错误。父母可以借此机会好好呵护孩子，拥抱他们，为他们多做些好吃的，安抚他们，孩子很乐意接受父母这样的做法。&lt;/p&gt;
&lt;p&gt;不到两岁的小孩子最需要的是能够感受到爱和安全。为了让孩子真正安心，父母必须自己先拥有安全感。你若做到以下两点，就能给自己的女儿提供更多的爱：1.放慢生活节奏，让亲子之爱有足够的时间萌芽开花。 2.多花时间和对你友善的人待在一起，这样你的内心才能充满爱，你才能将更多的爱传递给你的孩子。&lt;/p&gt;
&lt;p&gt;即使女儿已经是个“大孩子”了，你也可以放慢生活节奏，温柔、充满爱心地对待她，给她带来安全感。而这种安全感是她以前没能得到的。&lt;/p&gt;
&lt;h2 id=&#34;第二章-让孩子成为孩子&#34;&gt;第二章 让孩子成为孩子&lt;/h2&gt;
&lt;p&gt;**女孩的童年可以是非常棒的，不要轻易降低你的期望值，这一点非常重要。**女孩的童年——在青春期到来之前的时光——可以是她整个人生中一段最精彩的篇章。在这个时期，她们可以不用为男孩的事情烦恼，甚至可以对男孩全然不顾，她们自由自在，勇于行动，富有创造力，不惧别人的眼光，热爱动物和大自然，和男孩子或女孩子都能在一起玩，和自己的父母也能愉快相处。&lt;/p&gt;
&lt;p&gt;培养快乐女孩最重要的是父母要给孩子一个真正的童年，不要拔苗助长，人为地限制和缩短她的童年时光。下面两点非常重要：&lt;/p&gt;
&lt;p&gt;1.从女儿两岁时起，无论是在室外玩耍方面，还是在思想和创造力方面，家长都要鼓励女儿勇于探索、充分释放她的天性。不要用任何类似“女孩子要整洁、可爱、有女孩子样、温顺”这样的观念束缚她。给孩子穿有利于她活动的衣服，让她自由自在、无拘无束地生活。&lt;/p&gt;
&lt;p&gt;2.不要让孩子在家里承受“外表很重要”这类信息的压力。这些信息通常来自那些不良媒体的宣传。父母要做出表率，不要过分看重外表。除非有特别的节目要看，否则不要开电视。在女儿十几岁真正成熟之前，不要总带着孩子一起逛街买衣服，或参与一切与外表有关的活动。在她成年后，也尽量别这样做。&lt;/p&gt;
&lt;p&gt;2~5岁是孩子应该玩耍的时光。女孩子应该在这个过程中汲取能量，建立自信，为进入更广阔的世界做好准备。&lt;/p&gt;
&lt;h2 id=&#34;第三章-交友之道&#34;&gt;第三章 交友之道&lt;/h2&gt;
&lt;p&gt;友谊很重要，也很复杂。虽然孩子对交友之道的学习会贯穿一生，但5~10岁这个阶段是孩子学习此道最关键的时期。实际上，我们中的大部分人，现在还在学习。&lt;/p&gt;
&lt;p&gt;**女孩天生性格各异，所以我们不能强求每个孩子都善于社交，这一点非常重要。**有些女孩喜欢独处，或者和一个密友安安静静待在一起。而有些孩子却喜欢热闹，和一群朋友吵吵闹闹、谈天说地时最快乐。有些女孩天生就有领导能力，还有些性格温顺。但有些时候，即使是最害羞的女孩也需要学习一些“和人打交道”的技巧。如果她们因为这些技巧顺利收获了友谊，就会变得更喜欢和人交往。&lt;/p&gt;
&lt;p&gt;《最好的朋友，最可怕的敌人》是一本非常好的书。心理学家迈克尔·汤普森列举了7个可以提升交友能力的技巧:&lt;/p&gt;
&lt;p&gt;1.对友谊的态度要积极（觉得友谊是珍贵且有趣的）。 2.树立分享理念，培养规则意识（许多游戏和活动都需要这个）。 3.顾及别人的感受（不要自私，要多关心朋友）。 4.控制过激行为（当愤怒、沮丧和悲伤的时候，不随意发泄）。 5.真心实意地道歉（愿意发自内心地承认错误）。 6.对别人的情感变化保持敏感（能从别人的言行举止中觉察到他们内心的波动）。 7.谨慎地信任别人（信任别人，但同时要有洞察力，不轻易上当）。&lt;/p&gt;
&lt;p&gt;看了这些，你会发现这些技巧对孩子来说要求很高，换句话说，需要孩子心理上相对成熟才能掌握。但这些技巧的确是拥有和别人愉快交往的能力的基石。&lt;/p&gt;
&lt;p&gt;当女儿将“友谊焦虑”带回家时，父母要成为她们的教练。这主要包括耐心倾听，在必要时提出建议，帮助孩子分析在交友的7个技巧中，哪一个她还需要进一步学习。针对女孩的欺凌一般不表现在肢体上，社交欺凌对女孩的伤害更大。如果这类事情反复发生，学校就需要介入，妥当处置。&lt;/p&gt;
&lt;h2 id=&#34;第四章-爸爸的爱和尊重&#34;&gt;第四章 爸爸的爱和尊重&lt;/h2&gt;
&lt;p&gt;有一个关心、体贴自己的爸爸对女孩来说意义重大。学会关心女儿不是一蹴而就的事情，因为她们的世界与父母的不同。本章提供了一些这方面的技巧，可以使这个过程变得轻松很多。**爸爸的角色对女孩来说非常重要。**父母都爱你，并能正确表达爱，是一件美妙的事情。但仅仅这样还不够，因为爸爸的爱和妈妈的爱不一样。爸爸身材高大、毛发浓密、有力量、有活力，他和妈妈的兴趣点也不一样。&lt;/p&gt;
&lt;p&gt;**大部分女孩会将自己的父亲视作自己心目中未来伴侣的样板。**如果父亲善良、关心别人、尊重母亲、肯花时间陪伴女儿、喜欢和女儿一起玩耍，而不是动不动就大声呵斥，让女儿担惊受怕，那这样的父亲会成为她衡量男孩和成年男性的标准。她会对男人抱有较高的期待值，不会轻易被男人打动。&lt;/p&gt;
&lt;p&gt;在养育女儿的过程中，有些常见的陷阱，爸爸们一定要注意。**第一种是对女儿青春期来临的恐惧。**有些爸爸在女儿青春期到来后感到非常不适，因为害怕引起性方面的误会而不太敢像原来那样表达对女儿的爱。这种担心不无道理，但爸爸也要注意不要和孩子太生分。过去，许多女孩在自己脱离少女期，开始成长为一个年轻女性的阶段，会感觉父亲突然变得很冷淡。她们会误以为是自己做错了什么事情以至于自己的爸爸不再爱她们了，对这些女孩来说，这是一件悲伤且痛苦的事情。&lt;/p&gt;
&lt;p&gt;**第二种是我称之为“供养者悲剧”的陷阱。**通常情况下，爸爸通过努力工作来表达对女儿的爱，但他们出门工作就意味着不能在家陪孩子了。虽然离开家去赚钱也是爸爸爱女儿的表达方式，但孩子会以为爸爸不在乎她们，爸爸太忙了或太累了。出现这种情况就不太好了。&lt;/p&gt;
&lt;p&gt;成为好爸爸的10条策略:策略一：和孩子“约会”;策略二：和孩子一起旅行；策略三：多动脑筋，抽空陪孩子；策略四：帮助女儿明白她的与众不同之处；策略五：学会聆听；策略六：谈论价值观的方式要灵活多变；策略七：不要以为孩子与染上毒瘾无缘；策略八：参与到女儿的教育中；策略九：明白女儿和儿子是不一样的；策略十：明白女孩更容易受到言语上的伤害。&lt;/p&gt;
&lt;h2 id=&#34;第五章-点燃孩子兴趣的火花&#34;&gt;第五章 点燃孩子兴趣的火花&lt;/h2&gt;
&lt;p&gt;**每个孩子的内心深处都藏着等待被发掘的兴趣爱好。**这也许会成为他们所有热忱的所在，是他们想要活着的意义。问题是我们该怎样发现它？我们如何让星星之火不断燃烧？它又为何重要？&lt;/p&gt;
&lt;p&gt;本森的研究团队发现，对于年轻人来说，在体育运动和文学艺术活动方面的兴趣（跳舞、戏剧、音乐、阅读、绘画和手工）是最常见的火花。对动物（如狗、马）的喜爱或想要保护动物的心愿本身，则排在第三常见的位置。但是兴趣的火花可以是任何事——岩石收集、定向越野赛、按中世纪的风格穿着打扮，甚至是用钝剑比武！&lt;/p&gt;
&lt;p&gt;要让火花烧得更旺而不是熄灭，&lt;strong&gt;需要两个条件&lt;/strong&gt;：其一，家庭内部至少有一个成年人对此感兴趣，并为孩子提供相关帮助（例如:开车带女儿去上竖琴课，买水族箱，找到一所好的舞蹈学校）；其二，要有一个或两个家庭外部的成年人知道孩子的兴趣爱好并且给予他支持。&lt;/p&gt;
&lt;p&gt;我们的任务是帮助孩子找到他们的兴趣的火花，并帮助他们进一步发展自己的兴趣爱好。一个拥有浓厚兴趣爱好的孩子在生活的各个领域都会表现得更好。 要提防竞争太激烈，压力过大，或必须做得完美的一些活动。如果孩子真的对某一活动感兴趣，它就会给孩子带来活力和乐趣。&lt;/p&gt;
&lt;h2 id=&#34;第六章-妈妈的姐妹和朋友&#34;&gt;第六章 妈妈的姐妹和朋友&lt;/h2&gt;
&lt;p&gt;老天赐给女孩（尤其是青春期的女孩）的最好的礼物之一，就是她们身边的那些女人。要想走向成熟，成为女人，女孩在生活中需要有阿姨或者类似的角色相伴。这可以追溯到史前时期——早在狩猎采集阶段，人类还处在以亲族为单位的氏族社会，成年女性就会陪在女孩子身边，教她们如何做女人，把日常生活中的技巧传授给她们。照顾女孩子是一项神圣的职责。&lt;/p&gt;
&lt;p&gt;**在女孩的青春期，告诉她你所知道的有关青春期的一切，告诉她，青春期是多么的美好。女孩子的青春期表现和男孩子大不相同。**女孩子的个子长得飞快，男孩子长得相对慢些；女孩子的青春期会早些到来，往往比男孩子早一年或者更长的时间；男孩子的青春期是个渐变的过程——他们可以慢慢适应，但是女孩子在青春期要经历一个生理突变。这个生理突变是指她的月经会不期而至——突然某一天，月经就来了，她性成熟了。从此，她成了女人。这令她很紧张、很有压力。&lt;/p&gt;
&lt;p&gt;月经初潮是体内激素发生剧变导致的，初潮体验因人而异。对于一些女孩子来说，这标志着一个崭新的、特殊身份的开始，对此，她们盼望已久；对于另一些女孩子来说，这可能令她们感到窘迫和恐惧。有些孩子默默接受了这件事，私下里觉得这很特别，有些孩子感到害怕和崩溃，有些孩子则与情绪不稳定、腹部绞痛、腹胀等身体不适相抗争，也有些孩子根本就不理解这一切都是为了什么。&lt;/p&gt;
&lt;p&gt;**成人礼很重要，可以让女儿有种强烈的仪式感。**如果不这样，她们就会用自己的方式来表明她们已不再是孩子了。糟糕的是，她们选择的方式往往是吸毒、饮酒、飙车、放纵自己甚至因此怀孕。各种触目惊心的冒险行为就是她们庆祝自己成人的鲁莽方式。所以，安排一些更为有意义的成人礼活动，可以改变孩子的生活，甚至可能挽救孩子的生命。这样做真的非常重要。&lt;/p&gt;
&lt;p&gt;父女之间的界限。作为异性，父亲需要重视女儿的隐私并小心对待。父亲要尊重她的私人空间！青春期早期或者更早些，她就有了强烈的私人空间的意识。虽然你的家庭可能对与孩子的身体接触和共同洗浴持有很开放的态度（譬如在她小的时候），可是等到孩子稍大一些，情形就不同了。下面是一些注意事项：&lt;/p&gt;
&lt;p&gt;1.未经允许，不要闯入女儿所在的卫生间。 2.进入她的卧室前，永远先敲门，未经允许，不要进入。对于女孩子来说，知道自己有一个安全、私密的空间是很重要的。 3.当拥抱或搂抱孩子的时候，对她的反应要敏感，无论她接受了你的身体接触还是身体紧绷或后退。处于不同成长阶段的孩子会有不同的反应。 4.如果作为父亲，你觉得女儿的状况有些不对，你需要检查她的房间，那你一定要让孩子的妈妈代劳。妈妈这么做，也许女儿会感到被侵扰而小有怒气；但是如果爸爸这样做，她会感到被冒犯、被出卖。&lt;/p&gt;
&lt;p&gt;在过去的蒙昧岁月里，父亲往往认为自己根本就不该与女儿有身体接触，尤其是在孩子的青春期。很多女性每当谈起父亲在自己青春期时表现出来的尴尬和疏离就很伤感。父亲的这些表现让女儿觉得自己做错了什么，觉得父亲不再喜欢自己了，觉得父亲根本就不喜欢她长大。在青春期，依旧与女儿保持亲密很重要，只要这是她想要的。与和他人相处一样，你只要确保女儿喜欢你与她相处的方式就可以。不仅在青春期，在孩子的每一个年龄段，你都可以向孩子，无论男孩还是女孩，持续表达温情与爱意。&lt;/p&gt;
&lt;h2 id=&#34;第七章-和异性愉快相处&#34;&gt;第七章 和异性愉快相处&lt;/h2&gt;
&lt;p&gt;**世界上的很多事情都在向有利于女孩子的方向发展，性教育却不在其列。**大量的色情产品充满暴力并把女人当作玩物，这些内容正在误导男孩子。不仅男孩子需要接受更好的性教育，女孩子也需要大人告诉她们性是美好的，她们在性方面理应受到更好的对待。&lt;/p&gt;
&lt;p&gt;关于孩子的性，大多数父母有两个目标。首先，我们希望孩子长大后，他们的爱情生活是幸福美满和激动人心的，他们与自己的爱人是彼此信赖和亲密无间的。其次，我们希望他们在爱情的道路上慢慢地（更确切地说要“很慢地”）安全健康地前行，不会遭遇太多的痛苦或失望。当然，我们也不希望孩子在性方面被他人利用。作为过来人，我们知道性的潜在风险和灰暗的一面，也深知性的美好。&lt;/p&gt;
&lt;p&gt;针对这种雪崩般的色情信息的危害，教育工作者和教育活动家为女孩子提供了多重应对方案，其中的核心策略就是梅琳达在宣讲中提到的，女孩子要强化自我意识，捍卫自己的个人感受。女孩子需要认识到，你不是一定要按男孩子的要求做，你有权利维护个人的性喜好、性快乐、性价值观和性选择权，你来到这个世界不是为了取悦男孩子的。&lt;/p&gt;
&lt;p&gt;这里缺少的是对女孩子情感的关注，最为重要的是，忽略了向孩子们描绘性的美好。近百年来，我们的性教育工作者一直只讲与性有关的事实，对性这一过程中的情感避而不谈，而性教育需要的恰恰是关于情感的教育。有确凿的证据表明，从妈妈、阿姨、老师或其他榜样那里学到“性是浪漫的、融化内心的、强烈的、重要的、美好的人生体验”的女孩子会拥有更美好的性生活。&lt;/p&gt;
&lt;p&gt;妈妈、阿姨、老师或其他被孩子视为榜样的成年女性应向女孩子强调以下三点：1.&lt;strong&gt;不要过早与他人发生性行为&lt;/strong&gt;。 2.&lt;strong&gt;严格筛选交往对象&lt;/strong&gt;，即使你不打算与他发生实质上的性关系。 3.在条件和环境允许的情况下与对方发生性关系，&lt;strong&gt;绝不是在酒后或在自己还迟疑不定的情况下&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;简而言之，一旦女孩子掌握对自己身体的控制权，情况自然就会变好。这不正是你希望发生在自己女儿身上的事吗？&lt;/p&gt;</description>
    </item>
    <item>
      <title>《美国儿科学会育儿百科》： 婴儿睡眠</title>
      <link>https://dodoro.chouxiangpai.com/archives/1641/</link>
      <pubDate>Fri, 10 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1641/</guid>
      <description>&lt;h2 id=&#34;一睡眠规律&#34;&gt;一、睡眠规律&lt;/h2&gt;
&lt;p&gt;睡眠是孩子健康生活中必不可少的一部分。就如同营养对孩子身体的发育很重要一样，**睡眠对孩子大脑的发育至关重要。**如果孩子形成和保持固定的睡眠时间表，他就可能睡更长时间，晚上也不太可能醒，也能享受这种酣睡给他健康带来的益处。孩子睡觉时，大脑并没有在休息，它只不过是以另外一种方式在运作。让孩子正在发育的大脑有足够的睡眠时间，他的注意力将能更好地集中，性情也会更加平和。&lt;/p&gt;
&lt;p&gt;有些孩子能在出生后的6～8周建立固定的睡眠节奏，并且一次睡好几个小时；但是另一些孩子可能持续几个月或者更长都保持着难以预测的睡眠行为。一些孩子在婴儿床睡觉的时候，每天晚上都会哭闹，有一些却从来不哭。**对很多父母来说，孩子长时间在婴儿床上哭闹真是特别烦心。**当孩子嚎哭的时候，你心碎，当你远离他等他睡着的时候也很痛苦。或者你对他明显地不愿意或者不能安静下来睡觉感到很沮丧或者很恼火，即使几分钟的眼泪也感觉就像永远。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;孩子诞生之后的前几周里，可能产生另外一个问题，那就是父母可能感觉睡眠不足&lt;/strong&gt;。各种睡眠计划可能让你和你的配偶感到颇为焦虑且力不从心。特别是当母亲感觉睡眠缺乏且筋疲力尽，而自己的生活中一下子又增加了这么多责任时，更是如此。&lt;/p&gt;
&lt;p&gt;你怎样准备和安抚孩子睡觉？安抚的技术要根据孩子而不同。轻轻抚摸后背基本上能帮助任何年纪的孩子。&lt;strong&gt;对年幼的婴儿，随着他呼吸的节奏用你的脸颊摩擦他的脸颊，就能安抚他。拍拍他、吻他的前额、用奶嘴或手指鼓励他吮吸，也对年幼的婴儿有用&lt;/strong&gt;。睡觉的例行程序可以在4～6个月的时候开始培养，这会帮助孩子为休息做好准备，特别是他开始把例行程序和睡眠联系在一起时。试着给他讲个故事、给他洗个热水澡、给他按摩、给他唱个催眠曲，或者播放安神的音乐。睡眠前，停止和他的玩耍、拉上窗帘、调暗灯光、拔掉电话线。&lt;/p&gt;
&lt;h2 id=&#34;二睡眠圣经&#34;&gt;二、睡眠圣经&lt;/h2&gt;
&lt;h4 id=&#34;第一个月&#34;&gt;&lt;strong&gt;第一个月&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;这个阶段孩子&lt;strong&gt;大部分的时间都在睡觉&lt;/strong&gt;。不管他在婴儿床上或醒着时，尽量避免让他哭闹。相反，你要对这些眼泪做出反应，做任何能够安慰孩子的事，例如轻轻地唱歌、播放柔和的音乐、把灯光调暗、轻轻地摇他。**如果需要的话，把他抱起来，5～10分钟后把他放回婴儿床里。**通过各种方法让他更舒服，你能将他睡觉的时间和质量最大化。&lt;/p&gt;
&lt;p&gt;这个年纪的婴儿什么时候该睡觉，是在他哭还是不哭的时候呢？通常来说，&lt;strong&gt;他清醒1～2个小时后，就需要睡觉了&lt;/strong&gt;。有时候1个小时还没过，他就想睡觉了，但是他&lt;strong&gt;很少能连续3个小时保持清醒&lt;/strong&gt;。如果他有点烦躁或者低声哭闹，看看把他放回婴儿床里，哭闹程度是不是变得严重了，如果是的话，那么当然要把他抱起来。不过他也有可能渐渐进入梦乡。&lt;/p&gt;
&lt;p&gt;不管在何种环境之下，如果他在需要睡觉的时候不能睡觉，他就会表现出劳累和暴躁的迹象。这时你就要开始哄他睡觉。他清醒了1～2个小时后，你就要哄他睡觉。&lt;/p&gt;
&lt;h4 id=&#34;出生6周后&#34;&gt;&lt;strong&gt;出生6周后&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;这时孩子的&lt;strong&gt;睡眠清醒时间表开始渐渐固定下来&lt;/strong&gt;。他会在夜间睡得长一些，在晚上更早地显示昏昏欲睡的迹象（有时是哭闹）。例如，如果他曾经在21：00～23：00准备睡觉，现在他开始需要睡得早一些——可能是18：00～20：00。他最长的睡眠时间会在晚上，持续3～5个小时。&lt;/p&gt;
&lt;p&gt;当然还是有变化的，所以要对孩子的需求敏感，预测到他可能需要更早睡觉，比如说不再是23：00，而是20：00。为了尽量减少孩子的哭闹，可以花时间哄哄他（此时如果孩子有点烦躁，并不会带来什么害处），让他的生物节奏决定他是要睡30分钟还是4个小时。&lt;/p&gt;
&lt;h4 id=&#34;3个月之后&#34;&gt;&lt;strong&gt;3个月之后&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;这个年龄段的一些孩子&lt;strong&gt;晚上能连睡6～8个小时&lt;/strong&gt;，中间不会把父母吵醒。如果他醒得太早，你可以哄哄他，把灯关着，把帘子拉上，就能&lt;strong&gt;让他再次入睡&lt;/strong&gt;。如果可能的话，不要把他抱起来或者给他喂奶。&lt;/p&gt;
&lt;h4 id=&#34;4到12个月&#34;&gt;&lt;strong&gt;4到12个月&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;对4个月大的孩子来说，在未来的几周和几个月内，你仍然&lt;strong&gt;要对他的生物节奏保持敏感，这样能减少哭闹&lt;/strong&gt;。从4个月大到1岁之前，大部分婴儿每天至少&lt;strong&gt;需要两次小睡&lt;/strong&gt;：一次是在半上午，另一次是在中午。有些孩子在下午的时候会有第三次小睡。试着培养他在9：00和13：00小睡的习惯，如果他需要的话，最后还有一个傍晚的小睡。大多数家长都不愿意把孩子从小睡中叫醒过来，因为睡眠对于孩子而言是很宝贵的。他小睡的时候想睡多久就睡多久，除非小睡使他晚上难以入睡。&lt;/p&gt;
&lt;p&gt;如果孩子在傍晚的时候睡到很晚，睡得很长，这可能是因为他晚上上床的时间很晚，通过较长的小睡时间，可以部分地补偿失去的睡眠时间。不妨跳过第三次小睡，而让孩子早点入睡。&lt;strong&gt;到9个月大的时候，试着取消傍晚的小睡&lt;/strong&gt;，因为如果傍晚的小睡继续的话，他晚上睡觉的时间就会推后。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;晚上是孩子一天中最长的睡眠时间，8个月左右的时候，如果晚上不给他喂奶的话，晚上睡眠应该持续10～12个小时&lt;/strong&gt;。但是如果这个年纪的孩子显得特别累，而且一看到自己的床就会哭，那么他的小睡时间可能太短了（小于30分钟），小睡的时间可能不与他的睡眠节奏相吻合，或者你晚上太晚让他睡觉了。如果是后一种情形，早点把他放到床上睡觉，至少暂时这样做（17：30或者18：00）来缓解他的过度劳累。&lt;/p&gt;
&lt;p&gt;如果他哭闹，查看一下，用几句安慰的话哄哄他。如果需要的话，给他换纸尿裤，确保他是舒服的，但是保持灯光昏暗，&lt;strong&gt;不要让他起身，不要抱起他并走来走去&lt;/strong&gt;。然后悄悄地离开房间。几天或者几周之后，&lt;strong&gt;渐渐减少晚上给他的关注&lt;/strong&gt;，这样能消除他的期望——他哭闹或者需要你的时候，你就会出现——他就更可能学会自己平静下来，例如，吮吸自己的手指、左右摇摇头，或者摩擦一下床单。&lt;/p&gt;
&lt;p&gt;**重要的一点需要谨记：有时候你可能需要让孩子自己哭着睡觉，这不会有任何伤害，你也不需要担心。**记住你有一整天向孩子表明你有多么爱他、多么关心他。晚上他需要知道这是睡觉的时间。在那些你让他哭的晚上，其实你正在帮助他学会自己平静下来。他不会认为你抛弃了他或者你不再爱他，他从你白天的行为知道根本不是这么回事。换句话说，根本没有必要担心。&lt;/p&gt;
&lt;h4 id=&#34;10到12个月&#34;&gt;&lt;strong&gt;10到12个月&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;这个时候少数孩子&lt;strong&gt;上午的小睡会逐渐减少&lt;/strong&gt;。12个月大的时候，有些孩子就不在上午小睡了。如果是这样，你可以开始把他晚上的上床时间提前一些（可能提前20～30分钟），下午的小睡也可以早点开始。孩子晚上上床的时间可能稍微不太一样，这取决于孩子劳累的程度、白天小睡的质量等因素。&lt;/p&gt;
&lt;h4 id=&#34;13到23个月&#34;&gt;&lt;strong&gt;13到23个月&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;这个阶段，孩子小睡的时间会发生改变。15个月大的时候，大约一半（当然不是全部）的孩子&lt;strong&gt;每天都只会进行一次小睡，典型的是在下午&lt;/strong&gt;。上午的小睡会自然地消失，但是向每天一次小睡的转变可能遇到困难。即使这样，对大多数孩子来说，上午的小睡会逐渐消失。当这一切发生的时候，如果你晚上早点把孩子放到床上，他实际上更不可能想在上午小睡，而且他醒过来时，可能获得了更好的休息。&lt;/p&gt;
&lt;h4 id=&#34;24个月大&#34;&gt;&lt;strong&gt;24个月大&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;**几乎所有的孩子都只在下午的时候进行一次小睡，**从生物角度来看，这次小睡对他们在一天的其他时候良好地活动很重要。&lt;/p&gt;
&lt;h4 id=&#34;2岁到3岁&#34;&gt;&lt;strong&gt;2岁到3岁&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;大多数的孩子&lt;strong&gt;仍然需要每天一次的小睡，这样他们在傍晚的时候不会太暴躁、太难哄&lt;/strong&gt;。到了大约3岁的时候，正常的孩子白天要睡大约2小时。但是有些孩子睡得多，有些睡得少（有时只有1小时）。试着让孩子小睡时间和晚上睡觉的时间固定下来，即使一些灵活性的调整是不可避免的。直到孩子3岁之前，每天下午他都需要1～2小时的小睡，之后小睡的时间会缩短。研究表明，3岁的孩子90%仍然进行小睡。&lt;/p&gt;
&lt;p&gt;关于小睡时间长短最好的经验法则就是：孩子的小睡应该足够他恢复体力。有证据表明，较长的小睡能提高孩子注意力持续时间和学习能力。相反地，如果他只进行短短几分钟的“迷你”小睡，那就通常不足以支撑他一整天。&lt;/p&gt;
&lt;h4 id=&#34;3岁到5岁&#34;&gt;&lt;strong&gt;3岁到5岁&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;这个年龄段的大多数孩子&lt;strong&gt;晚上都会在19：00～21：00睡觉&lt;/strong&gt;，如果小睡很短或者没有的话，他们会睡早一些。而且他们一直能睡到早上6：30～8：00。在3～4岁的孩子中，小睡不那么普遍了。在这个年龄，你要与孩子的睡眠保持一致，要制订固定的睡眠时间。孩子小睡的时间少了，身体活动量大了，所以一些孩子晚上睡眠的需要实际上增加了。&lt;/p&gt;
&lt;h2 id=&#34;三尽力而为&#34;&gt;三、尽力而为&lt;/h2&gt;
&lt;p&gt;关于孩子的睡眠问题，&lt;strong&gt;你要尽自己最大的努力，但是如果事情有时不太顺利的话，你也不要沮丧&lt;/strong&gt;。为了让孩子准时地小睡和晚上睡觉，你要做出坚持不懈的努力。如果孩子在幼儿园或者被保姆带着，你不在他身边，所以没在小睡的时间让他上床睡觉，那么应该确保他的保姆理解你关于孩子睡眠时间表的意愿，并且试着遵循这个时间表。但是作为父母，如果你没有把所有的事都做得很完美，也需要把内心的焦虑和抱怨放在一边。不可避免地，有时候孩子可能没有睡好。满足你自己的（还有你伴侣的）睡眠需要对有效地照顾孩子和其他家人很重要。&lt;strong&gt;长期劳累过度的父母患抑郁症的风险较大。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;记住，&lt;strong&gt;帮助孩子睡觉是父母最大的挑战之一，但是这对孩子的健康有很大的回报，不管是现在还是将来&lt;/strong&gt;。很多成年人长期睡眠不好，那是因为儿童时期养成的模式持续到了后来。睡眠不好是一种习得行为，如果一个孩子得不到高质量的睡眠，他可能就不知道怎样才能睡得好。在很多情况下，睡眠问题可能很多年里都是他生活的一部分。&lt;strong&gt;越早开始处理孩子的睡眠问题，你就越可能解决这些问题&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《美国儿科学会育儿百科》： 妊娠期和分娩</title>
      <link>https://dodoro.chouxiangpai.com/archives/1622/</link>
      <pubDate>Thu, 09 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1622/</guid>
      <description>&lt;h2 id=&#34;一妊娠期准备&#34;&gt;&lt;strong&gt;一、妊娠期准备&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;妊娠期间你吃下的、喝下的以及吸入的所有物质，都会进入胎儿体内。这种母婴之间的“分享”早在受孕后就开始了。妊娠期的前2个月胚胎最脆弱，这个阶段孩子身体的主要部分（胳膊、腿、手、脚、肝脏、心脏、生殖器、眼睛以及大脑）都刚刚开始形成**。香烟、酒精、毒品以及某些药物中的化学成分都会影响胎儿的发育过程，有些可能造成胎儿的发育迟缓，有些甚至会引起胎儿先天畸形。**&lt;/p&gt;
&lt;p&gt;弓形虫感染可能发生于养猫的人群。**弓形虫感染的病原体是一种常为猫所携带的寄生虫，但它更多地出现在未烹熟的肉类和鱼类中。**请务必确保在食用前彻底煮熟肉类和鱼类，切勿在烹制前尝味。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;确保获得最好的产前护理在整个妊娠期&lt;/strong&gt;，你都应该和产科医生通力合作以保持健康状态。在孩子出生前，规律地拜访医生、接受产检，能够明显地提高生出健康孩子的概率。每一次产检，医生都会为你称体重、量血压、测量子宫大小以判断胎儿的发育程度。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;叶酸&lt;/strong&gt;是一种可以降低胎儿某些出生缺陷风险（如脊柱裂）的B族维生素，孕妇对其的需要剂量可能多于其他维生素，一定要确保摄入足够的叶酸——每天400微克左右。&lt;/p&gt;
&lt;p&gt;**孕期的运动同样非常重要。**如果之前并没有规律地锻炼，医生很可能建议你从一些强度适中的运动开始，比如散步、游泳、产前瑜伽、普拉提等。即使每天只运动5～10分钟也是有利的，这将是一个很好的开端。运动结束后，要喝足量的水。切勿过度运动，要避免带有跳动或震动的运动。&lt;/p&gt;
&lt;p&gt;**超声检查是妊娠期妇女最常接受的检查之一，它是一种安全的检查方法。**借助超声，可以监测胎儿的生长情况。通过拍摄B超图，还可以看到胎儿内脏器官的发育情况，这样，你可以确认胎儿是否发育正常，如果孩子不幸有什么问题或可能存在出生缺陷，都可以通过超声得到辅助诊断。&lt;/p&gt;
&lt;p&gt;**血糖筛查可以检查出孕妇血糖水平是否正常。**如果孕妇血糖过高，很有可能患有妊娠糖尿病：一种发生于妊娠期的糖尿病。羊水穿刺或者无创DNA技术可以排除常见遗传缺陷：&lt;strong&gt;三体综合征&lt;/strong&gt;，这是一种会造成智力障碍的染色体缺陷。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;坚定母乳喂养的决心：最实际的好处在于方便和经济，同时还有很多医学方面的好处&lt;/strong&gt;。母乳可以给孩子提供一些天然的抗体，帮助他抵御某些疾病（包括中耳炎、呼吸系统疾病和肠道疾病）。另外，配方奶喂养的孩子偶尔会发生过敏反应，而母乳喂养的孩子就不太可能出现这样的问题。&lt;/p&gt;
&lt;p&gt;**尿布台很有用。**符合所有安全标准的换尿布台。换尿布台需要放置在地毯或软垫上，并且要紧靠墙壁，注意不能紧靠窗户，避免孩子从窗户摔出去。将放置有纸尿裤、尿布及其他所需物品的架子或桌子放在换尿布台附近。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;儿童汽车安全座椅&lt;/strong&gt;，这样在出院时可以把孩子安全地带回家（或者使用汽车安全提篮）。确保这套座椅允许通常体重的新生儿使用，把它安装在车后座上，面朝后（千万不要将后向式的儿童安全座椅安装在安全气囊的前面）。所有婴儿和学步幼儿在至少满两岁并且长到座位所能承受的最大重量和高度前，搭乘汽车时都应该使用这种后向式的汽车座椅。&lt;/p&gt;
&lt;p&gt;**孩子睡在婴儿床里的时候是无人陪伴的，所以婴儿床必须是一个完全安全的环境。**新生儿应该睡在紧邻其父母的地方，让孩子睡在独立的睡具里，如符合安全标准的摇篮。婴儿床安全强制标准：床缘栅栏间距必须小于6厘米，孩子喜欢把头从栅栏中间伸出来，间距大的话，头容易被卡住；床头和床尾的隔板不应该有镂空、雕饰，以防止它们勾住或刮伤孩子的头部；床四个角上的角柱应与床头板平齐，或者非常非常高（就像带顶蓬的床上的角柱），否则它们很容易挂到宽松的衣物，可能造成婴儿窒息。&lt;/p&gt;
&lt;p&gt;宝宝即将出生。&lt;strong&gt;真正的真临盆的过程中&lt;/strong&gt;，你可能出现：&lt;strong&gt;规律重复的宫缩&lt;/strong&gt;，下腹部痉挛，随着宫颈逐渐打开而程度加剧的疼痛，感觉到胎儿正沿着产道逐渐下降；&lt;strong&gt;略微呈血红色&lt;/strong&gt;、粉色或透明的阴道分泌物，即宫颈的黏液栓；羊水涌出，通常人们所说的“羊水破了”（或“破水”），其实是&lt;strong&gt;羊膜破&lt;/strong&gt;了，包裹在其中的羊水，原来一直都存在于胎儿周围，起到保护胎儿作用，现在喷薄涌出。&lt;/p&gt;
&lt;h2 id=&#34;二分娩前后&#34;&gt;&lt;strong&gt;二、分娩前后&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;**分娩是女性一生中最不寻常的经历之一。**即使已经过几个月的精心筹备，心中也有过各种想象，但你永远想象不到分娩那一刻的真实情景。分娩过程可能比你想象的简单，也可能比你想象的艰辛。&lt;/p&gt;
&lt;h3 id=&#34;1自然分娩&#34;&gt;&lt;strong&gt;1、自然分娩&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;如果没有特殊的情况，&lt;strong&gt;尽量都采用自然分娩&lt;/strong&gt;。自然阴道分娩中，你第一眼通常会看到胎儿的头顶，当然你要借助镜子才能自己亲眼看到这一过程。胎儿的头娩出后，产科医生会立刻吸净他的鼻腔和口腔，让他尽快吸入人生第一口新鲜空气。新生儿不需要被拍打或打屁股就可以开始自己呼吸，也不一定非要哭，其实很多新生儿都是很安静地开始了呼吸。&lt;/p&gt;
&lt;p&gt;刚刚经历过的分娩过程让他对你的抚摸、你的声音和你的体温都非常敏感，反应度极高。这种特别反应顶多只会持续最初的几小时，千万要好好利用。给他爱抚、跟他说话，仔细看看你创造的这个小天使。看着孩子努力向你的乳房挪动，&lt;strong&gt;寻找第一口乳汁，这将成为你和孩子人生中重要的时刻。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个神奇的时刻不应被打扰，更不应被剥夺。护工不该急着帮你清洗身体，也不该急着给孩子洗澡或打扰你们，因为在这个关键时刻，孩子就是靠着气味和感觉去寻找第一口乳汁。你会和很多妈妈一样，&lt;strong&gt;发现当孩子被放在你胸前的那一刻，你和他之间就立刻产生了一道非常亲密的感情纽带。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;2剖宫分娩&#34;&gt;&lt;strong&gt;2、剖宫分娩&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;选择剖宫产的常见原因有：孕妇曾有剖宫产史；胎儿是臀位；宫口未充分打开到10厘米，以使胎儿娩出开始；或者尽管孕妇已经充分用力试图娩出，胎儿仍未能顺产道而娩出；产科医生认为自然阴道分娩可能威胁胎儿的健康；胎心率过慢或胎心率不规则（这种情况下，继续等待分娩过程自然开始会有很大风险，产科医生会立刻进行紧急剖宫产手术）。&lt;/p&gt;
&lt;p&gt;剖宫产分娩的过程与自然阴道分娩截然不同。一个重要区别是，整个手术通常不超过1小时，而且根据具体情况产妇可能完全不需经历分娩过程；另一个重要区别是手术中需要用到一些不仅对母体有影响，还可能影响胎儿的药物。&lt;/p&gt;
&lt;p&gt;假如你在手术过程中神志清醒，医生给婴儿做完检查并宣布一切正常后，你应该可以立刻见到婴儿。然后他可能被送到育婴室，在恒温箱或新生儿保温箱里躺几个小时，在医院工作人员的看护下等待麻药效果退去并逐渐适应新环境&lt;/p&gt;
&lt;h3 id=&#34;3分娩之后&#34;&gt;&lt;strong&gt;3、分娩之后&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;分娩后即刻开始哺乳可促进子宫收缩&lt;/strong&gt;，减少产后出血，因此对母亲也有益处（负责催发喷乳反射的激素同时也会刺激子宫收缩）。**分娩后1小时左右是开始母乳喂养的黄金时期，因为这时婴儿反应机敏，非常想吃奶。**将婴儿放到胸前，开始他可能只会舔一舔。然后，稍微给他一点帮助，他就会领悟该怎么做，连乳头带乳晕部分都含在嘴里用力吸吮起来。&lt;/p&gt;
&lt;p&gt;阿氏评分系统（以其发明者维吉尼亚·阿普伽的名字命名）可帮助医生评估新生儿出生时的大致健康状况。测试中会测量新生儿的心率、呼吸、肌张力、肤色以及对刺激的反应。阿氏评分无法预测新生儿长大后的健康状况和发育情况，也无法看出他以后多聪明或是什么性格。它只是提示医院工作人员，新生儿是否比正常情况下更嗜睡或反应更慢，是否需要有人帮他适应子宫外的新世界。&lt;/p&gt;
&lt;h3 id=&#34;4早产胎儿&#34;&gt;&lt;strong&gt;4、早产胎儿&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;美国早产儿的比率为11%～13%。双胞胎、三胞胎和多胞胎的早产率在60%左右。早产是指胎儿在母亲怀孕满37周之前降生，可分为晚期早产（34～37周）、中期早产（32～35周）和早期早产（不足32周）。&lt;/p&gt;
&lt;p&gt;一定要记住：任何时候都不能为了母亲或医生的方便而让孩子早产，即使是晚期早产也不可以。研究表明，早产儿出现健康问题的风险远远超过足月胎儿，因此，应尽一切努力让胎儿足月分娩。&lt;/p&gt;
&lt;h2 id=&#34;三调整心态&#34;&gt;&lt;strong&gt;三、调整心态&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;经过人生最初几小时的忙碌，婴儿进入梦乡，让你有时间休息，有时间去回忆分娩开始后所有激动人心的场面。假如婴儿正躺在你身边，你会一直看着他，不敢相信自己竟然完成了这样一个壮举。激动的心情会让你暂时无暇顾及身体的疲惫，但不要骗自己，你需要休息，需要睡眠，需要恢复体力。前方有一个非常重要的任务正等着你——你已经是一个母亲了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《美国儿科学会育儿百科》： 婴儿护理</title>
      <link>https://dodoro.chouxiangpai.com/archives/1626/</link>
      <pubDate>Thu, 09 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1626/</guid>
      <description>&lt;h2 id=&#34;一基本护理&#34;&gt;&lt;strong&gt;一、基本护理&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;看着刚刚降生的婴儿，没有接触过小婴儿的新手父母可能有些不知所措，不知道该如何照顾这个小家伙，连换尿片和穿衣服这样的日常小事都会让你如临大敌。&lt;strong&gt;不过你的自信心很快会建立起来，能够泰然自若地处理好一切，成长为成熟稳重的好父母。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;1婴儿哭闹&#34;&gt;&lt;strong&gt;1、婴儿哭闹&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;婴儿刚出生的几个月，&lt;strong&gt;只要一哭你就应该立刻做出回应&lt;/strong&gt;。这么小的婴儿不会被宠坏，应给予足够的关注。&lt;/p&gt;
&lt;p&gt;哭泣对婴儿有多重实用意义。感到饥饿或不适时，他用哭泣来寻求帮助。哭泣可以帮他舒缓过于强烈的视觉、声音和其他感官刺激，还可以帮他减压。&lt;/p&gt;
&lt;p&gt;你可能发现孩子每天有一些烦躁阶段，既不是因为肚子饿，也不像是身体不舒服或疲倦。这期间不管你做什么都无法让他安静下来，但烦躁阶段过去后，孩子可能看起来更加精神，而且之后很快会进入比平时更深沉的熟睡中。这种哭闹现象似乎是在帮助婴儿消耗过剩的精力，好让他们恢复安逸的状态。&lt;/p&gt;
&lt;p&gt;仔细体会婴儿不同的哭声，你很快可以分辨出他什么时候想要人抱、什么时候想要人哄、什么时候需要照顾、什么时候最好不要理他。你甚至可以从他的哭泣方式判断出各种特殊需求。&lt;/p&gt;
&lt;p&gt;假如这些全都不管用，**有时最好的处理方法就是让婴儿自己独处一会儿。**很多婴儿不哭一下就睡不着，让他们哭一会儿反而可以更快入睡。如果婴儿真是因为疲劳很想睡才哭闹，通常不会持续很久。假如不管做什么孩子都无法安静下来，那他可能生病了。&lt;/p&gt;
&lt;p&gt;**你自己的状态越放松，婴儿就越容易哄。**即使很小的婴儿也会对周围的紧张气氛很敏感，而他们唯一的回应方式就是哭泣。听着新生儿不停哭闹会令人烦躁，但因沮丧而恼怒或慌乱只会让婴儿哭得更厉害。&lt;/p&gt;
&lt;p&gt;**不要因为婴儿的哭闹有心理负担。**婴儿哭闹并不是因为你不是好父母，也不是因为他不喜欢你。每个婴儿都会哭，而且时常根本找不到明显的原因。新生儿每天平均要哭1～4小时，这是他适应子宫外光怪陆离的新世界的方式。&lt;/p&gt;
&lt;h3 id=&#34;2婴儿睡觉&#34;&gt;&lt;strong&gt;2、婴儿睡觉&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;起初婴儿并不知道白天和黑夜的区别。&lt;strong&gt;他的胃容量很小，不论白天还是晚上，一餐吃饱后最多只能坚持3～4小时&lt;/strong&gt;，所以出生头几周必然会昼夜不停地经常醒来吃奶，没有什么好办法可以解决。但即使在这一阶段，你还是可以开始培养他晚上睡觉白天玩耍。夜间喂奶时尽量保持安静，不要开灯，或尽量减少入夜后更换尿片的频率。喂奶或换完尿片后不要跟他玩，立刻将他放回去睡觉。&lt;/p&gt;
&lt;p&gt;美国儿科学会建议&lt;strong&gt;健康的婴儿应尽量仰卧（背部平躺）&lt;/strong&gt;，因为这种睡姿对婴幼儿最为安全。让婴儿仰卧可以减少“婴儿猝死综合征”的风险，而婴儿猝死综合征是美国1岁以下婴儿（新生儿阶段以后）死亡的首要原因。&lt;/p&gt;
&lt;p&gt;安抚奶嘴也有助于降低婴儿猝死的风险。假如孩子不喜欢安抚奶嘴，或者安抚奶嘴从孩子嘴里掉了出来，不要强迫他接受。如果你是母乳喂养，最好等到孩子可以熟练吃奶之后再用安抚奶嘴，通常在3～4周。&lt;/p&gt;
&lt;p&gt;婴儿长大后，胃容量有所增长，两餐之间的间隔时间拉长。事实上，&lt;strong&gt;90%以上的婴儿3个月大时就可以睡一整夜&lt;/strong&gt;（一次性睡6～8小时）。这个消息听起来令人相当振奋，但千万不要指望婴儿的睡眠问题能一次彻底解决。&lt;/p&gt;
&lt;h3 id=&#34;3日常护理&#34;&gt;&lt;strong&gt;3、日常护理&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;纸尿裤问世来，迎合了大部分父母的需求，效果也能达到他们的期望。**大部分新生儿每天要消耗约10块尿布。**现在大部分纸尿裤最内层贴近婴儿皮肤的部分是隔水无纺布，可保持肌肤干爽，纸尿裤中间是吸水层，最外层是防水材料。&lt;/p&gt;
&lt;p&gt;排尿：多的婴儿每天可达到平均1～3小时1次，排尿不太频繁的婴儿每天可能只有4～6次。婴儿的日常排尿量在生病、发热或者气温非常高时可能骤然减半，但仍在正常范围内。&lt;strong&gt;排尿不应有痛感，假如你发现婴儿排尿时有任何不舒服的表现&lt;/strong&gt;，请咨询儿科医生。因为这可能代表婴儿的尿道受到感染或有其他问题。&lt;/p&gt;
&lt;p&gt;排便：婴儿出生后会在几日内排空肠道内积攒的第一批粪便，通常称为胎粪。这种黏稠的黑色或深绿色物质在婴儿出生前就积聚在他的肠道中，胎粪完全排空后，婴儿的粪便会转为黄绿色。**母乳喂养的婴儿的粪便会很快变成淡黄色的黏稠状，中间夹杂着一些细小的颗粒。**婴儿的排便规律差异极大。有些婴儿每次进食后不久就会排便，这是胃结肠反射造成的，每当胃部有食物进入时就会刺激消化系统活动。3～6周以后，有些母乳婴儿甚至1周才大便1次，但仍属于正常，因为母乳在婴儿消化系统里留下的固体残渣很少。&lt;/p&gt;
&lt;p&gt;洗澡：如果你每次换尿布时都彻底清洁尿布区，婴儿就不需要经常洗澡。&lt;strong&gt;1岁以内每周洗3次就足够了&lt;/strong&gt;。频繁地洗澡会导致婴儿皮肤干燥，特别是洗澡时使用肥皂或让水分从皮肤蒸发。新生儿的皮肤很敏感，可能对新衣服上的化学物质或残留的肥皂、洗衣粉过敏。为避免出现此类问题，婴儿的所有衣服、寝具、毯子和其他可洗物品都应反复漂洗后使用。出生头几个月，婴儿的物品应与家里其他人的分开洗涤。&lt;/p&gt;
&lt;p&gt;疫苗接种：&lt;strong&gt;孩子2岁之前，他需要接种大部分必需的疫苗&lt;/strong&gt;。这些疫苗将保护他免受13种疾病的侵袭：乙肝、百日咳、白喉、破伤风、脊髓灰质炎（小儿麻痹症）、B型流感嗜血杆菌（Hib）感染、肺炎链球菌感染、轮状病毒感染、麻疹、腮腺炎、风疹、水痘，以及甲型病毒性肝炎。婴儿将在6个月之后接种一年期的流感疫苗&lt;/p&gt;
&lt;p&gt;给婴儿穿衣服时，可以将他放在腿上，撑开衣服的领子从他头上套进去。用手指撑开衣服以免挂住孩子的脸和耳朵。**不要抓着婴儿的手臂往袖子里插。**将你的手从袖口向内伸进去，握住婴儿的手，然后慢慢拉出来。给婴儿脱衣服时，先托住婴儿的后背和头部，将两个袖子分别脱下。然后撑开领口，从婴儿的下巴和面部穿过，将整件衣服轻轻脱下。&lt;/p&gt;
&lt;h2 id=&#34;二婴儿的喂养&#34;&gt;二、婴儿的喂养&lt;/h2&gt;
&lt;p&gt;哺育婴儿的过程不仅能为他提供良好的营养，也让你有机会亲近他，如将他抱在怀里，与他进行视线交流。&lt;strong&gt;这是母子双方都放松身心的愉快时刻，可增进亲子之间的感情&lt;/strong&gt;。婴儿阶段的发育速度极快，是孩子一生中营养需求最大的时候。他的体重在满1岁时就可以达到出生时的3倍左右。&lt;/p&gt;
&lt;p&gt;全球大型医学组织一致认为，&lt;strong&gt;母乳喂养是对母亲和孩子最好的选择&lt;/strong&gt;。由于其特有的养分构成，人奶是人类婴儿最理想的食物。吃配方奶的婴儿出现中耳炎、湿疹、哮喘、呕吐和严重腹泻的肠胃感染，以及产生过敏反应的风险高于吃母乳的婴儿。母乳喂养可帮助母亲恢复孕前体重，避免心血管疾病和糖尿病，并降低日后罹患某些癌症的概率。&lt;/p&gt;
&lt;p&gt;乳房最早在怀孕16周时就可以做好准备，只要婴儿一降生就可以开始供应乳汁。最初几天分泌的乳汁叫“初乳”，&lt;strong&gt;是一种营养丰富、看起来有些黏稠的淡黄色物质&lt;/strong&gt;。初乳只在刚分娩后的几日才有，比后来分泌的成熟母乳含有更多的蛋白质、盐分、抗体和免疫物质，但脂肪含量和热量却较低。&lt;/p&gt;
&lt;p&gt;**母乳喂养会产生催产素，催产素可以带来很多奇妙的变化，例如令人产生愉悦感，减轻分娩后的痛苦，有助于增强母亲和孩子之间的感情。**催产素会刺激子宫肌肉收缩，因此分娩后几天内甚至几个星期内都可能在喂奶时有“产后宫缩痛”或者子宫绞痛。尽管这会令人有些不舒服，有时甚至痛感比较强烈，但它可以帮助子宫尽快恢复到正常大小和状态，减少产后出血。&lt;/p&gt;
&lt;p&gt;当乳汁和多余体液在乳房中过度充盈后会出现涨奶。这令人感到非常不适，有时会很痛。最好的解决办法是只要婴儿感到饥饿就喂奶，大约每隔2小时或者在你的乳房变得肿胀、坚实或者疼痛之前，就用两侧乳房喂奶一次。&lt;strong&gt;母乳喂养的新生儿通常每24小时吃8～12次奶&lt;/strong&gt;，有的甚至更多。当他们长大一些后，一些母乳喂养的婴儿两餐间隔的时间会加长。除维生素D之外，母乳可以为婴儿提供其他所需的所有维生素。&lt;/p&gt;
&lt;p&gt;乳头皲裂。母乳喂哺过程可能带来一些轻微的疼痛，尤其在第1周左右的磨合阶段。但喂母乳不会造成长期疼痛、不适或破损。**正确的含乳方式是防止乳头疼痛和皲裂的最重要因素。**如果你感到乳头或乳房其他部分很痛，应向哺乳专家寻求建议。浸浴或淋浴时，只需用水清洗乳房，不要用肥皂。乳霜、乳液和用力摩擦事实上可能使问题加重。此外，试着每次喂奶时变换婴儿的姿势。&lt;/p&gt;
&lt;p&gt;如果不能进行母乳喂养，就得选择婴儿配方奶喂养，&lt;strong&gt;配方奶分为液体即食型、浓缩液型和奶粉型&lt;/strong&gt;。液体即食型的配方奶非常方便，但价格较昂贵。由浓缩液体奶冲调的配方奶需要混合等量的浓缩液体奶和水。&lt;/p&gt;
&lt;p&gt;对亲子双方来说，&lt;strong&gt;喂奶应该是放松、舒适且愉快的时刻&lt;/strong&gt;。让你有机会表达你的爱，也让你们更加熟悉对方。如果你表现得平静而安详，孩子也会有同样的回应。如果你很紧张或心不在焉，他也可以感觉到这些负面的情绪，有可能造成喂养不顺利。&lt;/p&gt;
&lt;p&gt;婴儿吃奶时常会吞入一些空气，这会让他感到不适，变得烦躁不安，**这时候就需要给婴儿拍嗝。**虽然母乳喂养和配方奶喂养的婴儿都会出现这种情况，但更常见于吃奶瓶的婴儿。这种情况发生时，最好停止喂奶，不要让婴儿继续一边哭闹一边吃。&lt;/p&gt;
&lt;p&gt;**吐奶也是婴儿阶段的普遍现象。**有时是因为婴儿吃的东西超出了胃容量，有时是因为打嗝或流口水引发吐奶。虽然可能有点麻烦，但一般没有必要担心。吐奶通常不会造成窒息、咳嗽、身体不适或严重危险，即使是在婴儿睡着时发生。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《美国儿科学会育儿百科》：引言部分</title>
      <link>https://dodoro.chouxiangpai.com/archives/1613/</link>
      <pubDate>Thu, 09 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1613/</guid>
      <description>&lt;h2 id=&#34;读后感&#34;&gt;读后感&lt;/h2&gt;
&lt;p&gt;这段时间又认真读完《美国儿科学会育儿百科》，如果只能推荐一本育儿书籍的话，那么我一定选择这本书，这本大部头才是每一位爸爸妈妈必备的手册。之前读过《西尔斯育儿百科》和《定本育儿百科》，这两本书也不错，但是我认为：西尔斯的书还是过于主观性，而且这种亲密性要求父母必须有一方为小孩全面“牺牲”(或者愿意并且有能力请到合格的全职保姆)；定本的书年代比较久远，一些育儿观点有些过时，更偏重东方（特别是日本）。&lt;/p&gt;
&lt;h2 id=&#34;引言&#34;&gt;引言&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;孩子是上天赐给你的最好的礼物。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;从你第一次抱起这个生命的奇迹的那一刻起，你的世界就变得更加广阔和丰富。你将产生各种各样的心情：惊奇掺杂着些许兴奋，迷惑伴随着几分疲惫，此外，你还会怀疑自己能否成为一位称职的父母。&lt;/p&gt;
&lt;h2 id=&#34;一孩子给予父母&#34;&gt;&lt;strong&gt;一、孩子给予父母&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;**无条件的爱。**从孩子出生开始，你就成为他整个宇宙的中心。他把他的爱奉献给你，没有疑问，也不求回报。在他的成长过程中，他还将用无数的方式表达这样的爱：从用第一次微笑让你如沐春风，到双手奉上亲手制作的节日礼物。他的爱充满崇敬、热情和取悦你的急切期待。&lt;/p&gt;
&lt;p&gt;**绝对的信任。**孩子绝对地信任你。在他的眼里，你是那么强大、聪明、有能力。久而久之，孩子在你身边时会格外放松、遇到难题会向你求助、会在人群中骄傲地指出你，通过这些行为，你可以感受到孩子对你的信任。有时候，孩子遇到害怕的东西时，会到你的身边寻求保护；在你面前，他敢于尝试他不敢单独或在陌生人面前做的事情。总之，孩子相信你可以保护他。&lt;/p&gt;
&lt;p&gt;**情感的巅峰。**由于孩子的出现，你会经历情感的新巅峰，比如欣喜、关爱、骄傲、激动等。同样，你也会经历紧张、生气、受挫。会有这样的时刻：你紧紧抱着你的孩子，孩子用他充满爱意的胳膊环绕着你的脖子；当然你也一定会有被气得说不出话的时刻。当孩子一天天长大，一天天想独立，你将更深刻地体会这种极端的感情。&lt;/p&gt;
&lt;h2 id=&#34;二父母给予孩子&#34;&gt;&lt;strong&gt;二、父母给予孩子&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;作为父母，你可以给孩子提供许多重要的礼物作为回报。&lt;strong&gt;一些礼物很微妙，但是所有礼物都会让孩子受益匪浅。给孩子提供这些礼物将使你成为出色的父母，而孩子接受你的礼物后，会变成一个&lt;/strong&gt;更加健康、快乐、有能力的人&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;**爱：爱是你与孩子关系的核心，它需要自由地双向流通。**正如孩子无条件地爱你一样，你也要给予孩子无条件的爱和赞赏。你对孩子的爱不应取决于孩子的相貌和行为，也不应该被当作给孩子的奖励，或是将不爱作为对其的惩罚。你对孩子的爱应该是持久且不容置疑的，特别是在孩子行为不当，需要你来限制或纠正时。由于孩子的某些行为，你可能产生一些短暂的情绪，比如生气、沮丧等，爱应该与这些情绪区分开来，且要超越这些短暂的负面情感。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;自尊心：作为父母，你给孩子一个最重要的礼物是自尊心&lt;/strong&gt;。建立自尊心不是一个简单且快速的过程。自我尊重、相信自己是自尊的重要组成部分，需要花费几年的时间才能牢固地建立起来。孩子需要你持续的支持和鼓励来发现自己的长处。在他学习相信自己的过程中，他需要你的信任。爱他、花时间与他在一起、倾听他的讲述、称赞他的成就，都是这个过程中的重要部分。此外，用建设性的而非处罚性、非伤害性的方法帮助他改正一些错误行为，对孩子建立自尊心也同样重要。如果孩子对你给他的爱、称赞、尊重有信心，那么他可能更加容易建立起自尊心，而他建立起来的自尊心将帮助他快乐健康地成长。&lt;/p&gt;
&lt;p&gt;**价值观和传统：**无论你是否积极地将你的价值观和信仰传递给你的孩子，他都必然会因为和你生活在一起而吸收一部分。他会注意你如何在工作中自律、如何坚定你的信仰、是否言出必行。他会融入家庭仪式和传统并思考它们的重要性。&lt;/p&gt;
&lt;p&gt;**快乐：**孩子不需要你教给他如何快乐，但是他需要你鼓励和支持，以使他本性中的热情自由飞翔。特别是当你和他在一起的时候，你越有趣，生活对于他来说就越让人愉快，他也就越迫不及待地去拥抱它。&lt;/p&gt;
&lt;p&gt;**健康：**孩子的健康在很大程度上依赖于早期你给予他的关爱和引导。&lt;/p&gt;
&lt;p&gt;**安全的环境。**任何人都想给孩子提供一个安全且舒适的家。&lt;/p&gt;
&lt;p&gt;**技能与能力。**随着孩子的成长，他将在生活中各个领域花费大量时间掌握或改进不同的技能和能力。你应该鼓励他，并提供给他所需的各种设备和工具以便尽可能地帮助他。&lt;/p&gt;
&lt;h2 id=&#34;三共同成长&#34;&gt;&lt;strong&gt;三、共同成长&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;**共度时光。**如果你每天只和孩子在一起几分钟，那么你肯定不能给予他需要的一切。每天为孩子专门腾出一段时间来开展他喜欢的活动，同时还要尽量让他融入一些家庭活动中，如做饭、进餐等。&lt;/p&gt;
&lt;p&gt;**给孩子做榜样。**孩子表达对你的爱意的一个方式就是模仿你，这也是孩子学习做事、培养自己新技能、照顾自己的一种方式。&lt;/p&gt;
&lt;p&gt;随着社会中不同国家、不同文化的接触日益加深，你需要教育孩子，在与不同种族、不同宗教、不同民族、不同生活习惯的人打交道的时候，学会容忍与包容。&lt;strong&gt;你要努力帮助孩子理解并接受多样性。没有人生来就对别人带有偏见，却能在很小的年龄学会偏见。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;**每个孩子生来就具有一定的处理压力和挫折的能力，并且都可以在父母的帮助下加强他的韧性。**一个有韧性的孩子，确信自己将会得到所需要的帮助以渡过有压力的境况。他知道其他人会保护和支持他，并且他自己也有办法解决问题。&lt;/p&gt;
&lt;p&gt;长远来看，从小就承受着学习压力的孩子并不一定比其他的孩子学习更出色、技能更高超。如果一个孩子真的有天赋，他也许能够承受这种学习压力，正常发展下去，但是很多有天赋的孩子需要更少而非更多的压力。&lt;strong&gt;孩子需要理解、安全以及适应其天赋、需要、发育阶段的机会。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;**赞扬孩子的长处，增强他的信心。**当孩子做了好的事情，你要表扬他。当孩子在家中或者学校里取得了成绩，一定要表扬他。&lt;/p&gt;
&lt;p&gt;在孩子小的时候，&lt;strong&gt;告诉他一些价值观和道德观，会帮助孩子明辨是非、关爱他人&lt;/strong&gt;。你要时刻提醒孩子，他的行为会给别人带来正面或者负面的影响。当孩子善意公平地处理一些情况的时候，你要告诉他你是多么的高兴，并告诉他关爱他人的重要性。&lt;/p&gt;</description>
    </item>
    <item>
      <title>https请求报错block:mixed-content</title>
      <link>https://dodoro.chouxiangpai.com/archives/1608/</link>
      <pubDate>Fri, 03 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1608/</guid>
      <description>&lt;p&gt;我的wordpress域名都换成了https，今天发现用的一个插件加载css和js的时候报错了，原来是因为https页面去发送http请求报错，因为浏览器阻止https发送http请求。我一开始打算改插件的源码，折腾好一两个小时都不成功，最后用了最简单、最粗暴的办法，一行代码解决了。&lt;/p&gt;
&lt;p&gt;浏览器不允许在https页面里嵌入http的请求，现在高版本的浏览器为了用户体验，都不会弹窗报错，只会在控制台上打印一条错误信息。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决办法：&lt;/strong&gt; 在主页面的head中加入下面代码（将调用的http请求升级成https请求并调用）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;meta&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http-equiv&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Security-Policy&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;upgrade-insecure-requests&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;wordpress的话，就改admin-head.php&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1608/images/image-1638500834130.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]NLP模型与深度学习</title>
      <link>https://dodoro.chouxiangpai.com/archives/1599/</link>
      <pubDate>Thu, 02 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1599/</guid>
      <description>&lt;h2 id=&#34;1自然语言处理简介&#34;&gt;1、自然语言处理简介&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;根据工业界的估计，仅有21% 的数据是以结构化的形式展现的[1]。在日常生活中，大量的数据是以文本、语音的方式产生（例如短信、微博、录音、聊天记录等等），这种方式是高度无结构化的。如何去对这些文本数据进行系统化分析、理解、以及做信息提取，就是自然语言处理（Natural Language Processing，NLP）需要做的事情。&lt;/p&gt;
&lt;p&gt;在NLP中，常见的任务包括：自动摘要、机器翻译、命名体识别（NER）、关系提取、情感分析、语音识别、主题分割等。&lt;/p&gt;
&lt;p&gt;在NLP与深度学习系列文章中，不会逐一解释各个NLP任务，而是主要介绍深度学习模型在NLP中的应用。整体分为以下几点：&lt;/p&gt;
&lt;p&gt;首先介绍NLP基本流程以及在数据预处理方面的技术；而后会介绍最初期使用的神经网络：SimpleRNN、LSTM；继而引入使得文本处理性能得到很大提升的Attention机制以及Transformer模型；最后介绍近几年非常热门的预训练模型BERT，以及如何使用BERT预训练模型的例子&lt;/p&gt;
&lt;p&gt;下面首先介绍的NLP任务的一个基本工作流程。&lt;/p&gt;
&lt;h2 id=&#34;2nlp-任务流程&#34;&gt;2、NLP 任务流程&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;典型的NLP任务分为以下几步：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;数据收集&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;数据标注&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;文本标准化（&lt;/span&gt;Normalization&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;文本向量化&lt;/span&gt;/&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;特征化（&lt;/span&gt;Vectorization/Featuring&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;建模&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;前期主要是数据收集，并根据任务类型对数据做标注（例如情感分析中，对好、坏评价做标注）。接下来的2个步骤均是对文本进行预处理的步骤，为了提取文本中隐含的信息，最后通过机器学习建模，达到任务目标。其中 3 – 5 这几步是迭代的流程，为了模型的精度更准确，需要迭代这个过程，进行不断尝试。&lt;/p&gt;
&lt;p&gt;数据收集以及标注并非在本文讨论范围内，接下来介绍文本标准化的目标与方法。&lt;/p&gt;
&lt;h2 id=&#34;3文本标准化&#34;&gt;3、文本标准化&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;由于文本数据在可用的数据中是非常无结构的，它内部会包含很多不同类型的噪点。所以在对文本进行预处理之前，它暂时是不适合被用于做直接分析的。&lt;/p&gt;
&lt;p&gt;文本预处理过程主要是对 文本数据进行清洗与标准化。这个过程会让我们的数据没有噪声，并可以对它直接做分析。&lt;/p&gt;
&lt;p&gt;而文本标准化是NLP任务里的一个数据预处理过程。它的主要目标与常规数据预处理的目标一致：提升文本质量，使得文本数据更便于模型训练。&lt;/p&gt;
&lt;p&gt;文本标准化主要包含4个步骤：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;大小写标准化（&lt;/span&gt;Case Normalization&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;分词（&lt;/span&gt;Tokenization&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）与&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;停止词移除（&lt;/span&gt;stop word removal&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;词性（&lt;/span&gt;Parts-of-Speech&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;POS&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）标注（&lt;/span&gt;Tagging&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;词干提取（&lt;/span&gt;Stemming&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;31-大小写标准化&#34;&gt;3.1 大小写标准化&lt;/h3&gt;
&lt;p&gt;大小写标准化是将大写字符转为小写字符，一般在西语中会用到。但是对于中文，不需要做此操作。而且Case Normalization 也并非是在所有任务场景中都有用，例如在英文垃圾邮件分类中，一般一个明显的特征就是充斥着大写单词，所以在这种情况下，并不需要将单词转为小写。&lt;/p&gt;
&lt;h3 id=&#34;32-分词&#34;&gt;3.2 分词&lt;/h3&gt;
&lt;p&gt;文本数据一般序列的形式存在，分词是为了将文本转为单词列表，这个过程称为分词（tokenization），转为的单词称为token。根据任务的类别，单词并非是分词的最小单位，最小单位为字符。在一个英语单词序列中，例如 ride a bike，单词分词的结果为 [ride, a, bkie]。字符分词的结果为[r, i, d, e, a, b, k, e]。&lt;/p&gt;
&lt;p&gt;在中文中，分词的最小单元可以不是单个字，而是词语。&lt;/p&gt;
&lt;h3 id=&#34;33-停止词移除&#34;&gt;3.3 停止词移除&lt;/h3&gt;
&lt;p&gt;停止词移除是将文本中的标点、停顿词（例如 is，in，of等等）、特殊符号（如@、#等）移除。大部分情况下，此步骤能提升模型效果，但也并非在任何时候都有用。例如在骚扰邮件、垃圾邮件识别中，特殊字符相对较多，对于分辨是否是垃圾邮件有一定帮助。&lt;/p&gt;
&lt;h3 id=&#34;34-词性标注&#34;&gt;3.4 词性标注&lt;/h3&gt;
&lt;p&gt;语言是有语法结构的，在大部分语言中，单词可以被大体分为动词、名词、形容词、副词等等。词性标注的目的就是就是为了一条语句中的单词标注它的词性。&lt;/p&gt;
&lt;h3 id=&#34;35-词干提取&#34;&gt;3.5 词干提取&lt;/h3&gt;
&lt;p&gt;在部分语言中，例如英语，一个单词会有多种表示形式。例如play，它的不同形式有played，plays，playing等，都是play的变种。虽然他们的意思稍微有些区别，但是大部分情况下它们的意思是相近的。词干提取就是提取出词根（例如play 就是它各种不同形式的单词的词根），这样可以减少词库的大小，并且增加单词匹配的精度。&lt;/p&gt;
&lt;p&gt;这些文本标准化的步骤，可以用于对文本进行预处理。在进一步基于这些文本数据进行分析时，我们需要将它转化为特征。根据使用用途不同，文本特征可以根据各种技术建立而成。如：句法分析（Syntactical Parsing），N元语法（N-grams），基于单词计数的特征，统计学特征，以及词向量（word embeddings）等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书笔记——洛克和《政府论》</title>
      <link>https://dodoro.chouxiangpai.com/archives/1566/</link>
      <pubDate>Tue, 30 Nov 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1566/</guid>
      <description>&lt;p&gt;著名英国哲学家洛克是启蒙运动时期最有影响的哲学家之一，并被广泛形容为自由主义之父。&lt;strong&gt;启蒙运动作为一场人类影响最深刻的思想变革，引导人类从宗教、群体、专制中逐渐走了出来，并认识到人作为个体的自由和权利。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;人类自诞生之后，原始社会中，由于自身能力和恶劣的自然环境，独立的个体无法对抗恶劣的环境，所以团结在一起，形成宗教群体和社会群体，经过上几万年的逐步演化慢慢走向文明。这个无比漫长而艰辛的过程中，人类获得极大的成功，并成为地球上最具有优势的物种，当然也付出了巨大的代价，历史上的宗教冲突、种群群体冲突、国家社会间的冲突酿成各种大灾难，无数的个体生命死去。直至启蒙运动，人类才意识到天赋人权，个体的自由和利益不能无条件让位给群体和社会，在这样的历史背景下，约翰.洛克继承了前期启蒙思想家的精神，提出了基于自然权利的《政府论》，开启了人类现代文明的序幕。&lt;/p&gt;
&lt;p&gt;洛克发展出了一套与霍布斯的自然状态不同的理论，&lt;strong&gt;他主张政府只有在取得被统治者的同意，并且保障人民拥有生命、自由、和财产的自然权利时，其统治才有正当性&lt;/strong&gt;。洛克相信必须先建立契约政府，而且只有在取得被统治者的同意时，社会契约才会成立，如果缺乏了这种同意，那么人民便有推翻政府的权利。&lt;strong&gt;他将国家权力分为立法权、行政权和对外权，并主张立法权与行政权的分立，行政权与对外权的统一；立法权是国家最高权力。只有在这样的政府下，才可能建立一个自由而又公平的现代文明社会，国家也只有由这样的政府来统治，才能看算是现代文明国家。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一父权和君权&#34;&gt;一、父权和君权&lt;/h2&gt;
&lt;p&gt;“奴隶制是一种可恶而悲惨的人类状态。父权和君权都不是天生就合理。”&lt;/p&gt;
&lt;p&gt;“第一、亚当并不基于父亲身份的自然权利或上帝的明白赐予，享有对于他的儿女的那种权威或对于世界的统辖权，如同有人所主张的。”&lt;/p&gt;
&lt;p&gt;“第二、即使他享有这种权力，他的继承人并无权利享有这种权力。”&lt;/p&gt;
&lt;p&gt;“第三、即使他的继承人们享有这种权力，但是由于没有自然法，也没有上帝的明文法，来确定在任何场合谁是合法继承人，就无从确定继承权因而也无从确定应该由谁来掌握统治权。”&lt;/p&gt;
&lt;p&gt;“第四、即使这也已被确定，但是谁是亚当的长房后嗣，早已绝对无从查考，这就使人类各种族和世界上各家族之中，没有哪个比别的更能自称是最长的嫡裔，而享有继承的权利。”&lt;/p&gt;
&lt;p&gt;“父母所享有的对于他们的儿女的权力，是由他们应尽的义务产生的，他们有义务要在儿童没有长成的期间管教他们。儿女所需要的和父母应该做到的，是培养儿女的心智并管理他们还在无知的未成年期间的行动，直到理性取而代之并解除他们的辛苦为止。”&lt;/p&gt;
&lt;p&gt;“每一个人一旦长大成人，就应当让他在他所受约束的法律范围内享有一种意志的自由和正当地属于意志的自由范围内的行动的自由。但是当他还处在缺乏悟性来指导他的意志的情况下，他就缺乏他自己的可以遵循的意志。谁替他运用智力，谁也就应当替他拿出主张；他必须规定他的意志并调节他的行动；但是当儿子达到那种使他父亲成为一个自由人的境界时，他也成为了一个自由人。”&lt;/p&gt;
&lt;p&gt;“另一方面，尊礼和赡养，作为儿女应该报答他们所得的好处的感恩表示，是儿女的必要责任和父母应享的特殊待遇。这是为了父母的好处，犹之另一种是为了儿女的好处一样。不过作为父母之责的教育似乎具有特别大的权力，因为孩童时期的无知和缺陷需要加以约束和纠正，这是一种看得见的统治权的行使，是一种统辖权。而尊礼一词所包涵的责任并不要求那么多的服从，但是这种义务对成年的儿女要求得比年幼的儿女高些。”&lt;/p&gt;
&lt;p&gt;“一个人为了尊礼和崇敬长者或贤人、保护他的儿女或朋友、救济和扶助受苦受难的人和感谢给他好处的人而负有种种义务，即使尽期间所有和尽期间所能也不足应付于万一；但是这一切并不能使那些要求他克尽义务的人享有权威，享有对他制订法律的权利。”&lt;/p&gt;
&lt;p&gt;“纵然父亲的命令权只在他的儿女的未成年期间行使，而且只以适合于那个期间的管束教训为限；纵然儿女在他们的一生中和在一切情况下，对于他们的父母必须尽到尊敬、孝顺和拉丁人所谓孝道以及对他们应尽的一切保护和赡养，而并不给予父亲以统治的权力——即制订法律和处罚他的儿女。”&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;二自然状态&#34;&gt;二、自然状态&lt;/h2&gt;
&lt;p&gt;“人类自诞生起，所有人都拥有自然状态，任何人都无权任意剥夺其生命权和维持生命的权利。”&lt;/p&gt;
&lt;p&gt;“自然状态有一种为人人所应遵守的自然法对它起着支配作用；而理性，也就是自然法，教导着有意遵从理性的全人类：人们既然都是平等和独立的，任何人就不得侵害他人的生命、健康、自由或财产。每一个人必须保存自己，不能擅自改变他的地位，所以基于同样理由，当他保存自身不成问题时，他就应该尽其所能保存其余的人类，而除非为了惩罚一个罪犯，不应该夺去或损害另一个人的生命以及一切有助于保存另一个人的生命、自由、健康、肢体或物品的事物。”&lt;/p&gt;
&lt;p&gt;“为了约束所有的人不侵犯他人的权利、不互相伤害，使大家都遵守旨在维护和平和保卫全人类的自然法，自然法便在那种状态下交给每一个人去执行，使每人都有权惩罚违反自然法的人，以制止违反自然法为度。自然法和世界上有关人类的一切其他法律一样，如果在自然状态中没有人拥有执行自然法的权力，以保护无辜和约束罪犯，那么自然法就毫无用处了。而如果有人在自然状态中可以惩罚他人所犯的任何罪恶，那么人人就都可以这样做。因为，在那种完全平等的状态中，根据自然，没有人享有高于别人的地位或对于别人享有管辖权，所以任何人在执行自然法的时候所能做的事情，人人都必须有权去做。”&lt;/p&gt;
&lt;p&gt;“财产权和生命权、自由权一样，不容任意侵犯。人类一出生即享有生存权利，因而可以享用肉食和饮料以及自然所供应的以维持他们的生存的其他物品。土地和一切低等动物为一切人所共有，但是每人对他自己的人身享有一种所有权，除他以外任何人都没有这种权利。他的身体所从事的劳动和他的双手所进行的工作，是正当地属于他的。”&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;三国家政府&#34;&gt;三、国家政府&lt;/h2&gt;
&lt;p&gt;“人类天生都是自由、平等和独立的，如不得本人的同意，不能把任何人置于这种状态之外，使受制于另一个人的政治权力。任何人放弃其自然自由并受制于公民社会的种种限制的唯一的方法，是同其他人协议联合组成为一个共同体，以谋他们彼此间的舒适、安全和和平的生活，以便安稳地享受他们的财产并且有更大的保障来防止共同体以外任何人的侵犯。无论人数多少都可以这样做，因为它并不损及其余的人的自由，后者仍然像以前一样保有自然状态中的自由。当某些人这样地同意建立一个共同体或政府时，他们因此就立刻结合起来并组成一个国家，那里的大多数人享有替其余的人作出行动和决定的权利。”&lt;/p&gt;
&lt;p&gt;“天生自由的人们根据他们自己的同意，顺从他们父亲的统治，或由不同的家族联合而成立一个政府，他们一般地把统治权交给一人掌握，自愿受一人治理，既认为权力在他的诚笃和精明的掌握下相当安全，就没有以明白的条件加以限制或控制，虽然他们从未梦想到君主政体是神授的权利这一说法，而这种说法在近代神学还没有把它向我们启示以前，人们是从来没有听见过的；他们也从来没有容许过父权可以享有一种统辖的权利或成为一切政权的基础。。”&lt;/p&gt;
&lt;p&gt;“服从一个国家的法律，在法律之下安静地生活和享受权利和保护，并不足以使一个人成为那个社会的成员，这只是对于那些不处在战争状态中的人们，在他们来到属于政府的领土之内，来到其法律效力所及的范围之内时，所应该给予的地方保护，以及他们对该政府所应尽的尊礼。”&lt;/p&gt;
&lt;p&gt;“如果人在自然状态中是如前面所说的那样自由，如果他是他自身和财产的绝对主人，同最尊贵的人平等，而不受任何人的支配，为什么他愿意放弃他的自由呢？为什么他愿意丢弃这个王国，让自己受制于其他任何权力的统辖和控制呢？对于这个问题，显然可以这样回答：虽然他在自然状态中享有那种权利，但这种享有是很不稳定的，有不断受别人侵犯的威胁。既然人们都像他一样有王者的气派，人人同他都是平等的，而大部分人又并不严格遵守公道和正义，他在这种状态中对财产的享有就很不安全、很不稳妥。这就使他愿意放弃一种尽管自由却是充满着恐惧和经常危险的状况；因而他并非毫无理由地设法和甘愿同已经或有意联合起来的其他人们一起加入社会，以互相保护他们的生命、特权和地产，即我根据一般的名称称之为财产的东西。”&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;四立法权&#34;&gt;四、立法权&lt;/h2&gt;
&lt;p&gt;“立法权，不论属于一个人或较多的人，不论经常或定期存在，是每一个国家中的最高权力，它对于人民的生命和财产不是、并且也不可能是绝对地专断的。它只是社会的各个成员交给作为立法者的那个个人或议会的联合权力，它不能多于那些参加社会以前处在自然状态中的人们曾享有的和放弃给社会的权力。”&lt;/p&gt;
&lt;p&gt;“一个人不能使自己受制于另一个人的专断权力；而在自然状态中既然并不享有支配另一个人的生命、自由或财产的专断权力，他所享有的只是自然法所给予他的那种保护自己和其余人类的权力；这就是他所放弃或能放弃给国家的全部权力，再由国家把它交给立法权，所以立法机关的权力也不能超出此种限度。他们的权力，在最大范围内，以社会的公众福利为限。这是除了实施保护以外并无其他目的的权力，所以决不能有毁灭、奴役或故意使臣民陷于贫困的权利。自然法所规定的义务并不在社会中消失，而是在许多场合下表达得更加清楚，并由人类法附以明白的刑罚来迫使人们加以遵守。”&lt;/p&gt;
&lt;p&gt;“自然法是所有的人、立法者以及其他人的永恒的规范。他们所制定的用来规范其他人的行动的法则，以及他们自己和其他人的行动，都必须符合于自然法、即上帝的意志，而自然法也就是上帝的意志的一种宣告，并且，既然基本的自然法是为了保护人类，凡是与它相违背的人类的制裁都不会是正确或有效的。”&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;五行政权&#34;&gt;五、行政权&lt;/h2&gt;
&lt;p&gt;“如果同一批人同时拥有制定和执行法律的权力，这就会给人们的弱点以绝大诱惑，使他们动辄要攫取权力，借以使他们自己免于服从他们所制定的法律，并且在制定和执行法律时，使法律适合于他们自己的私人利益，因而他们就与社会的其余成员有不相同的利益，违反了社会和政府的目的。因此，在组织完善的国家中，全体的福利受到应得的注意，其立法权属于若干个人，他们定期集会，掌握有由他们或联同其他人制定法律的权力，当法律制定以后，他们重新分散，自己也受他们所制定的法律的支配；这是对他们的一种新的和切身的约束，使他们于制定法律时注意为公众谋福利。”&lt;/p&gt;
&lt;p&gt;“行政权握有国家的实力，如果它利用这种力量来阻碍立法机关根据原来的组织法或公众要求进行集会和行使职权，这又怎么办呢？我可以说，滥用职权并违反对他的委托而施强力于人民，这是与人民为敌，人民有权恢复立法机关，使它重新行使权力。因为，人民设置一个立法机关，其目的在于使立法机关在一定的时间或在有需要时行使制定法律的权力，如果他们为强力所阻，以致不能行使这一对社会如此必要的、关系到人民的安全和保护的权力，人民便有权用强力来加以扫除。在一切情况和条件下，对于滥用职权的强力的真正纠正办法，就是用强力对付强力。越权使用强力，常使使用强力的人处于战争状态而成为侵略者，因而必须把他当作侵略者来对待。”&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;六父权政治权力专制权力&#34;&gt;六、父权、政治权力、专制权力&lt;/h2&gt;
&lt;p&gt;“父权或亲权，不外是父母支配儿女的权力，他们为了儿女的幸福而管理他们，直到他们达到能够运用理性或达到一种知识状态为止，在那种状态下，我们可以假定他们有能力懂得那种应该用来规范自己的准则。这种权力不能扩大到使父母在任何时间对儿女操有生杀之权，正如他们不能对别人操有这种权力一样；也不能用任何借口来证明，当儿童业已长大成人时，这个父权还应当使他受制于他的父母的意志，超过儿女由于受到父母的生育教养而负有尊敬和赡养父母的终身义务。由此可见，父权固然是一种自然的统治，但决不能扩展到政治方面的目的和管辖范围。父权更不能延伸至于儿女的财产，儿女的财产只有他们自己才能处理。”&lt;/p&gt;
&lt;p&gt;“政治权力是每个人交给社会的他在自然状态中所有的权力，由社会交给它设置在自身上面的统治者，附以明确的或默许的委托，即规定这种权力应用来为他们谋福利和保护他们的财产。这一权力既为每人在自然状态中所拥有，并由他就社会所能给他保障的一切方面交给社会，就应当使用他认为适当的和自然所许可的那些手段，来保护他的财产，并处罚他人违反自然法，以便最有助于保护自己和其余人类。因此，当这一权力为人人在自然状态中所有的时候，它的目的和尺度既然在于保护他的社会的一切成员——即人类全体。那么，当它为官吏所有的时候，除了保护社会成员的生命、权利和财产以外，就不能再有别的目的或尺度；所以它不能是一种支配他们的生命和财产的绝对的、专断的权力，因为生命和财产是应该尽可能受到保护的。它只是对他们制定法律的权力，并附有这样一些刑罚，以除去某些部分来保护全体，而所除去的只是那些腐败到足以威胁全体的生命和安全的部分；否则任何严峻的刑罚都不是合法的。而且这个权力仅起源于契约和协议，以及构成社会的人们的相互同意。”&lt;/p&gt;
&lt;p&gt;“专制权力是一个人对于另一人的一种绝对的专断的权力，可以随意夺取另一个人的生命。这不是一种自然所授予的权力，因为自然在人们彼此之间并未作出这种差别。它也不是以契约所能让予的权力，因为人对于自己的生命既没有这种专断的权力，自不能给予另一个人以这样的权力来支配他的生命。它只是侵犯者使自己与他人处于战争状态时放弃自己生命权的结果。他既然抛弃了人类作为人与人之间的准则的理性，脱离了使人类联结成为一个团体和社会的共同约束，放弃了理性所启示的和平之路，蛮横地妄图用战争的强力来达到他对另一个人的不义的目的，背离人类而沦为野兽，用野兽的强力作为自己的权利准则，这样他就使自己不免为受害人和会同受害人执行法律的其余人类所毁灭，如同其他任何野兽或毒虫一样，因为人类不能和它们共同生活，而且在一起时也不能得到安全。所以只有在正义和合法战争中捕获的俘虏才受制于专制权力，这种权力既非起源于契约，也不能订立任何契约，它只是战争状态的继续。因为同一个不能主宰自己生命的人怎能订立什么契约呢？他能履行什么条件呢？如果他一旦被许可主宰自己的生命，他的主人的专制的、专断的权力也就不再存在。凡能主宰自己和自己的生命的人也享有设法保护生命的权利；所以，一经订立契约，奴役就立刻终止。一个人只要同他的俘虏议定条件，就是放弃他的绝对权力和终止战争状态。”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“自然给予父母以第一种权力、即父权，使其在儿女未成年时为他们谋利益，以补救他们在管理他们的财产方面的无能和无知。自愿的协议给予统治者们以第二种权力、即政治权力，来为他们的臣民谋利益，以保障他们占有和使用财产。人权的丧失给予主人们以第三种权力、即专制权力，来为他们自己谋利益而役使那些被剥夺了一切财产的人们。”&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何用codesmith连接mysql</title>
      <link>https://dodoro.chouxiangpai.com/archives/1569/</link>
      <pubDate>Sun, 28 Nov 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1569/</guid>
      <description>&lt;p&gt;之前用的codesmith一直都是链接sql server，最近写新的模板需要用到mysql，居然发现无法使用，于是找了下原因，发现是没有添加mysql.data.dll的支持。&lt;/p&gt;
&lt;p&gt;网上提供这个办法（我没有成功，我甚至专门在nuget上下载了对应版本的MySql.Data.dll，依然不成功）：&lt;/p&gt;
&lt;p&gt;１、下载MySql.Data.dll：&lt;a href=&#34;https://dev.mysql.com/downloads/windows/visualstudio/&#34;&gt;https://dev.mysql.com/downloads/windows/visualstudio/&lt;/a&gt; 下载zip格式的即可，解压后将MySql.Data.dll复制到codesmith的bin文件夹下。&lt;/p&gt;
&lt;p&gt;２、修改DbProviderFactories：找到C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config 注意64位的，因为权限问题可能无法修改，将其复制到桌面做如下修改后替换回来。&lt;/p&gt;
&lt;p&gt;在DbProviderFactories节点下添加&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#66d9ef&#34;&gt;add&lt;/span&gt; name=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MySQL Data Provider&amp;#34;&lt;/span&gt; invariant=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MySql.Data.MySqlClient&amp;#34;&lt;/span&gt; description=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.Net Framework Data Provider for MySQL&amp;#34;&lt;/span&gt; type=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.10.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此处的版本号要与下载的dll版本一致， 可以右键查看dll的详细信息获取。&lt;/p&gt;
&lt;p&gt;3、重新打开codesmith配置数据源即可。&lt;/p&gt;
&lt;p&gt;我最终是新装了&lt;strong&gt;更高版本&lt;/strong&gt;的codesmith，&lt;em&gt;然后装了mysqlconnect之后&lt;/em&gt;，顺利链接上了，这里有各种版本的下载：&lt;a href=&#34;https://downloads.mysql.com/archives/c-net/&#34;&gt;https://downloads.mysql.com/archives/c-net/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书笔记——计划和《社会契约论》</title>
      <link>https://dodoro.chouxiangpai.com/archives/1557/</link>
      <pubDate>Fri, 26 Nov 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1557/</guid>
      <description>&lt;h2 id=&#34;关于计划&#34;&gt;关于计划&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;这几年来读了不少书，kindle里已经占据三分之一的空间，我读书都比较快，虽然一直觉得自己大部分情况下都能抓住书中的观点，可是时间过去很长之后总会忘记。为了不让自己曾经付出的时间浪费掉，打算从这周起，针对每一本自己读过的图书写一个读书笔记或者读书感想，我尽量做到每周写一篇。这么做基于两个考虑，&lt;em&gt;一方面算是复习自己度过的图书，另一方面也算是一种记录，希望能把知识内化为自己的思想、信念。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;今天要做的第一本书是卢梭的《社会契约论》，这本书其实很短，有人说卢梭是自由主义的典范，也有人说他是多数人暴政的祖师，但是无论如何，卢梭和《社会契约论》在人类历史、思想史、特别是政治哲学史上产生了巨大的影响。这本书也对我产生极大的影响，我因之而从近三十年的无数枷锁中逐渐解脱出来，形成自己真正的自由意志。&lt;/p&gt;
&lt;p&gt;卢梭的这本书的中心思想是：&lt;strong&gt;天赋人权；人是生来自由和平等的，国家是自由协议的产物；一切主权和立法权都属于人民的集合体，政府只是这个集合体事务的执行者，并不拥有主权；一旦政府滥权，人民就有资格推翻它。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第一卷&#34;&gt;第一卷&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;“人是生而自由的，却又无时不处在枷锁之中。人类向来认为自己是万物的主宰，但事实上，他们比其他任何事物所受的奴役都要多。这种情况是如何发生的呢？我无法解释。我所能解释的是，这种情况是如何被合法化的。”&lt;/em&gt; “生为一个自由国度中的公民和这个政权下的一员，我明白我的声音对公共事务的影响是极其微弱的，但我既然拥有投票权，我就应该承担起这一项微小权力赋予我的责任。我所能感到欣慰的是，每当我对政府进行思索，我总会在其中找到新的理由，使我更加热爱我们的国家。”&lt;/p&gt;
&lt;p&gt;“人类无数的社会形态中，最古老而又唯一自然的社会便是家庭，然而在这种关系中，只有在孩子需要父亲养育时，才会依附于父亲，一旦这种需要停止，其中的天然依附关系便结束了。孩子从缘于依附关系而产生的顺从关系中解脱出来，而父亲也从对孩子的养育负担中解脱出来，这时，两者都平等地恢复了独立状态。之后，如果他们还想继续保持原来的关系，这只是出于双方的自愿，就不再是自然的了。这时的家庭就只是靠约定来维持了。”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;说明：奴隶社会、君主皇权专制社会、独裁专制社会、极权专制社会和威权专制社会的国家，都不符合社会契约论的最基本要求，这一点卢梭做了概括的分析和论证，我认为没有问题。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“怎样才能找到这样一种形式的联合：它在能够用全体成员所结成的集体力量保护其联合者的人身和财产权利的同时，又可使每个成员在联合过程中不用听从于其他的人，而是仅仅服从于自己的意愿，并且可以像以前一样拥有自己的自由。”&lt;/p&gt;
&lt;p&gt;“社会契约在公民之间建立了一种平等，公民受同一条件制约，也享有同样的权利。也就是说，根据社会契约的本质，任何主权的约定，即真正属于公意的每个约定，都平等地约束或关怀着每个公民。”&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第二卷&#34;&gt;第二卷&lt;/h2&gt;
&lt;p&gt;“社会契约给政治体以存在和生命，接下来的问题就是通过立法为政治体带来意志和行为的力量，因为使政治体得以联合和形成的那种原始行为并没有决定政治体该如何保存自己和发展自己。”&lt;/p&gt;
&lt;p&gt;“社会契约远没有破坏自然的平等，相反，它把人类天生的身体上的不平等用道德的和法律的平等取而代之；从此，不管人与人之间在体力与智力上是如何不平等，人类通过社会契约和法律权利拥有了完全的平等。”&lt;/p&gt;
&lt;p&gt;“立法者在所有方面都是国家中非凡的人。他的非凡不仅表现在他的才华上，还因为他的职位。这种职位既不是行政的也不是主权的，它创建了整个国家的制度，却不在该国家机构中居于任何位置。这是一种超脱于人类权力的独立的高级的职能。因为，治人者不能立法，同样，立法者也不能治人。否则，法律就会被立法者的私人感情所左右，会将不公正地固定下来，立法这项神圣的事业就无法避免地被立法者的个人目的所玷污了。”&lt;/p&gt;
&lt;p&gt;“负责起草法律的人并不拥有立法权，而人民自己，就算有这种意愿，也不能放弃自己这种不可转移的权利；因为根据社会契约，只有公意才能约束个人行为，决定个人意志是否是公意，必须要通过全民自由投票表决之后。”&lt;/p&gt;
&lt;p&gt;“如果一个国家想拥有坚实的力量，它就必须为自己打下坚固的根基，这样才能够经受得住它必须要经历的种种动荡，并能维护为了自保而做的种种努力。因为所有的民族都有一种离心力，这种离心力使他们之间不断地产生摩擦，并试图牺牲别人的利益来满足自己，就如同笛卡尔所说的旋涡。因此，弱者总是处于被吞没的危险中，除非所有民族都能达到一种平衡状态，使任何地方的人们或多或少地一起承受压力，否则任何民族都不能保全自己。”&lt;/p&gt;
&lt;p&gt;“如果要探究全体人员的最大利益之所在——这原本也应是每个法律体系的宗旨，我们会发现它可被归结为两个主要目标：自由和平等。自由，是因为国家的力量是个体依赖的源泉；平等，是因为如果没有平等，自由亦不复存在。”&lt;/p&gt;
&lt;p&gt;“道德、习俗，尤其是信仰是最为重要的一种法律，它没被刻在石碑上，也没被刻在铜器上，而是刻在了公民心中。它形成了国家的真正体制，它每天都在积聚力量，当其他法律过时或消亡的时候，它激励或取代它们；它可以使一个民族保持创造精神，使习惯的力量逐渐代替权威的力量。这一种法律并不为我们的政治理论家所熟知，但其他一切法律的成败与否都取决于它。伟大的立法者们都懂得秘密关注它，尽管他们表面上只是在制定具体的规章条文，但他们明白这些个别的章节只是制度穹顶的拱架，而缓慢发展的道德与风尚才是形成制度的不可动摇的基石。”&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第三卷&#34;&gt;第三卷&lt;/h2&gt;
&lt;p&gt;“政府就是为了臣民和主权体相互沟通而建立在两者之间的中介体，负责实施法律、维护政治和社会自由。立法权力属于并只能属于人民,行政权力只在特定行为中实施，这种个别行为已经超出了法律的范畴，因此也不属于制定法律的主权范畴，行政权力不能像立法权和主权体一样属于全体人民。”&lt;/p&gt;
&lt;p&gt;“究竟什么是政府呢？政府就是为了臣民和主权体相互沟通而建立在两者之间的中介体，负责实施法律、维护政治和社会自由。统治者是主权体的代理人，他们以主权体的名义行使主权体赋予的权力，主权体可以在任何时候限制、更改或收回这种权力；如果放弃这种权力，就会与社会共同体的本质不相容，就是违背了社会契约的目的。”&lt;/p&gt;
&lt;p&gt;“&lt;strong&gt;民主制&lt;/strong&gt;:主权体可将政府置于全体人民或绝大多数人民的手中，作为政府官员的公民数量就会比作为普通个人的公民要多。我们把这种政府形式称为民主制。&lt;strong&gt;贵族制&lt;/strong&gt;:主权体将政府交付到少数人手中，使普通公民的数量多于行政官员。&lt;strong&gt;君主制&lt;/strong&gt;或皇室政府制:主权体可以把整个政府都集中于一个人手里，其他官员都从这个当权者手里获得权力。”&lt;/p&gt;
&lt;p&gt;“组成政府制度的不是一种契约行为，而是法律行为；行政权力的掌握者不是人民的主人，而是人民的雇员，人民可以在适当的时候随意任命或罢免他们，而这里并不存在一个与他们缔约的问题。在完成国家交给他们的职责时，他们只是在以公民的身份履行责任，并没有任何权利对条件进行讨价还价。”&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第四卷&#34;&gt;第四卷&lt;/h2&gt;
&lt;p&gt;“只要有一些人联合在一起，并认为他们是一个整体，那么他们就有了唯一的意志，这个意志指向他们的共同生存和公共福利。和平、团结、平等与政治阴谋是天敌。正直和纯朴的人难以被欺骗，正因为他们是单纯的。诱惑和花言巧语是骗不了他们的，因为他们不够工于心计，所以不会因诱惑而上当。”&lt;/p&gt;
&lt;p&gt;“公共事务的处理方式是观照公众道德和政治体健康与否的一个相当准确的标志。集会中达成协议的步调越是一致，就意味着人们的观点越是统一，公共意志也就越占主导地位；而长久的争论、分歧和吵嚷则意味着个人私利的盛行和国家的衰落。”&lt;/p&gt;
&lt;p&gt;“&lt;strong&gt;本质上只有一种法律是需要全体人民一致同意的，这就是社会契约。既然公民联合在一起是世界上最自愿的行为，每个人都是天生自由的，都天生是自己的主人，任何人不能以任何借口不经某人的同意强制他做任何事情。&lt;/strong&gt;”&lt;/p&gt;
&lt;p&gt;“统治者和行政官员的选举是一种相当复杂的行为，可以通过两种方式进行，即投票推选或抽签。这两种方式在不同的共和国中都被使用过。投票自然是现代社会最合理的一种方式。”&lt;/p&gt;
&lt;p&gt;“正像公共意志是由法律来申明一样，公众判断是由监察机构来阐明的；公共的意见即舆论是另一种法律形式，监察官就是这种法律的执行者。监察官只是人民舆论的发言人，而绝不是人民舆论的权威，一旦它偏离了这一点，它的决定就失去了效用。”&lt;/p&gt;
&lt;p&gt;“人类最初并没有国王，有的只是神祇，没有政府，而只有神权政治。既然现在不存在，也不能再存在一个唯一的民族宗教，所以教义中不包括任何违背公民责任的内容，所有容忍了其他宗教存在的宗教也应该被其他宗教所容忍。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书笔记——关于女孩性教育</title>
      <link>https://dodoro.chouxiangpai.com/archives/1593/</link>
      <pubDate>Sat, 30 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1593/</guid>
      <description>&lt;h2 id=&#34;父亲的影响&#34;&gt;父亲的影响&lt;/h2&gt;
&lt;p&gt;爸爸要时常告诉女儿她有多么美丽，而且是由内而外的美丽（不是只有外表漂亮，而是从内心到外表都很美丽）。女儿从爸爸那里得到信息，知道应该期待从男人那里得到怎样的待遇。如果爸爸尊重她们，那么她们对男人的要求就自然会高，绝不会接受“渣男”。而如果女儿从小就得不到爸爸的尊重，那长大后，她就比较惨了。&lt;/p&gt;
&lt;p&gt;在女儿长大后能否和男人保持良好的关系方面，爸爸的影响巨大。的确，影响女孩子长大后自信心的头号因素就是她与父亲的关系。女孩子需要爸爸喜欢和她待在一起，耐心听她说话，对她和她的妈妈说话温柔、行为尊重。&lt;/p&gt;
&lt;h2 id=&#34;从避孕到关注情感&#34;&gt;从避孕到关注情感&lt;/h2&gt;
&lt;p&gt;针对女孩子的性教育严重不足。问题不在于教错了，而是把教育的重心放错了。学校的性教育都是关于如何预防和应对性危害的，比如，如何避免怀孕，如何避免染上性传染病，等等。那些奇形怪状的卵巢和输卵管的图解，看上去像母牛的犄角，如何使用避孕套的教学也令孩子们咯咯傻笑。这里有什么问题吗？难道没有吗？&lt;/p&gt;
&lt;p&gt;这里缺少的是对女孩子情感的关注，最为重要的是，忽略了向孩子们描绘性的美好。近百年来，我们的性教育工作者一直只讲与性有关的事实，对性这一过程中的情感避而不谈，而性教育需要的恰恰是关于情感的教育。有确凿的证据表明，&lt;strong&gt;从妈妈、阿姨、老师或其他榜样那里学到“性是浪漫的、融化内心的、强烈的、重要的、美好的人生体验”的女孩子会拥有更美好的性生活。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;妈妈、阿姨、老师或其他被孩子视为榜样的成年女性应向女孩子强调以下三点：&lt;/p&gt;
&lt;p&gt;1.不要过早与他人发生性行为。&lt;/p&gt;
&lt;p&gt;2.严格筛选交往对象，即使你不打算与他发生实质上的性关系。&lt;/p&gt;
&lt;p&gt;3.&lt;strong&gt;在条件和环境允许的情况下与对方发生性关系，绝不是在酒后或在自己还迟疑不定的情况下。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;简而言之，&lt;strong&gt;一旦女孩子掌握对自己身体的控制权，情况自然就会变好&lt;/strong&gt;。这不正是你希望发生在自己女儿身上的事吗？&lt;/p&gt;
&lt;h2 id=&#34;如何与孩子谈性&#34;&gt;如何与孩子谈性&lt;/h2&gt;
&lt;p&gt;如何与孩子谈性？伊丽莎白认为，**一切要犹如和风细雨，家长应娓娓道来。**在孩子的各个成长阶段，家长以孩子那个年龄能接受的方式，不时向孩子讲解性、繁衍、爱、情感等问题，自然就会对孩子有帮助。最不可取的是那种令我们的父辈和我们这一代人都望而却步的所谓的“长谈”。&lt;/p&gt;
&lt;p&gt;性是人生的一部分。当孩子在操场上看到小动物交配、小动物生小宝宝时，当不良少年给我们的孩子看手机或者笔记本电脑上的不雅图片时，我们总是用各种莫名其妙的话语搪塞孩子。是时候与孩子讨论这个话题了，用一种自然的、绵绵细雨般的方式与孩子交流，而不是暴风骤雨似的狂轰滥炸。&lt;/p&gt;
&lt;p&gt;你要一点一点地慢慢询问，而不要一次讲太多。你们可以一边看电影或电视，一边讨论其中与性有关的内容，作为讨论对象的内容可以是正面的，也可以是负面的。你们还可以在去某处的车上交谈。当他讲述朋友在生活中的各种遭遇时，你要认真地倾听并询问。你们还可以讨论媒体上的色情图片。你可以问问孩子，当看到广告上那么性感热辣的女郎时，他感觉如何。你也可以推荐他读一些不错的书，或与他一起浏览网页，还可以随时随地将你的个人看法和你读到的一些相关信息用电子邮件发给他。&lt;/p&gt;
&lt;p&gt;**重要的是，通过这些交流，性成了你和孩子思考与讨论的话题。你让他明白，谈到性，他可以有自己的选择和独立的思考，而不是你在单方面立规矩。**你在向他说明：“性是一个敏感、重要的话题，而且它很复杂，但这对谁来说都一样。你可以把握自己，掌控一切，你可以选择自己认为合适的一切行为。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]开源框架Autofac使用入门</title>
      <link>https://dodoro.chouxiangpai.com/archives/1544/</link>
      <pubDate>Fri, 22 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1544/</guid>
      <description>&lt;h2 id=&#34;一autofac是什么&#34;&gt;一、Autofac是什么&lt;/h2&gt;
&lt;p&gt;说到Autofac，我们就要首先了解依赖注入（Dependency Injection，简称DI）。DI不是什么技术，而是一种设计模式，是用来降低计算机程序之间的耦合的。在.net平台，有很多依赖注入工具，比较于其他的IOC框架，如Spring.NET，Unity，Castle等等所包含的，Autofac是一款较为轻量级的、性能优异的、支持xml配置的依赖注入工具。这也是为什么我选择先学习Autofac的原因。&lt;/p&gt;
&lt;h4 id=&#34;11-依赖注入di和控制反转ioc&#34;&gt;1.1 依赖注入（DI）和控制反转（IOC）&lt;/h4&gt;
&lt;p&gt;依赖注入（Dependency Injection）DI是一种软件设计模式，用来允许我们开发松耦合代码。DI是一种很好的方式去减少软件模块之间的紧耦合关心。DI帮助更好的去管理软件中的功能更新和复杂度。DI的目的是让代码可维护。依赖注入模式使用构造器对对象初始化并提供需要的依赖给对象，也就意味着允许你从类外部注入一个依赖项。&lt;/p&gt;
&lt;p&gt;控制反转（IOC，Inversion Of Contrl）也是一种设计模式，它是对DIP(依赖倒置原则，Dependence Inversion Principle)的一种实现。IOC指的是一种框架或运行时的编程风格，用来控制程序流程。IOC意味着我们可以改变常规的控制方式。它在DIP下得以实现。许多基于.net框架的软件开发都使用IOC。IOC更多的是一个通用术语，不仅仅局限于DI。&lt;/p&gt;
&lt;h4 id=&#34;12-di和ioc在项目中起到什么作用&#34;&gt;1.2 DI和IOC在项目中起到什么作用&lt;/h4&gt;
&lt;p&gt;假设你的客户端类需要使用一个服务类组件，那么你能做的就是让你的客户知道一类IService接口而不是服务类。这样，你就可以随时改变Service类的实现而不会中断已经部署的代码。&lt;/p&gt;
&lt;h2 id=&#34;二autofac如何使用&#34;&gt;二、Autofac如何使用&lt;/h2&gt;
&lt;p&gt;首先你必须获取AutoFac，这里你可以通过各种方式加载它，我这里还是通过VS中的NuGet来加载AutoFac，不论是哪种方式，最终的目的就是将 Autofac.dll，Autofac.Configuration.dll 这两个程序集引用到你的项目中。这样在你的项目中，如果想使用AutoFac，只需添加其命名空间引用即可~　这里我用的是2.6版本的（PS：Autofac.Configuration.dll V4.1 已经没有ConfigurationSettingsReader 用法稍有改变，还没去研究）&lt;/p&gt;
&lt;h4 id=&#34;21-demo分析&#34;&gt;2.1 Demo分析&lt;/h4&gt;
&lt;p&gt;代码Demo，这里在控制台应用程序中使用，首先创建一个类&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/// 定义一个Animal接口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;IAnimal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; DogCall();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; CatCall();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后，写一个类继承此接口&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Call&lt;/span&gt;: IAnimal
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; CatCall()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Console.WriteLine(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;喵喵喵&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; DogCall()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Console.WriteLine(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;汪汪汪&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接着，用Autofac&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Main(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;[] args)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　　　　　&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; builder = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; ContainerBuilder();&lt;span style=&#34;color:#75715e&#34;&gt;//创建一个IOC容器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　　　　　builder.RegisterType&amp;lt;Call&amp;gt;().As&amp;lt;IAnimal&amp;gt;();&lt;span style=&#34;color:#75715e&#34;&gt;//通过AS可以让Call类中通过构造函数依赖注入类型相应的接口。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　　　　　&lt;span style=&#34;color:#75715e&#34;&gt;//Build()方法生成一个对应的Container实例，这样，就可以通过Resolve解析到注册的类型实例。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　　　　　&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; container = builder.Build())
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　　　　　{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　　　　　　　&lt;span style=&#34;color:#75715e&#34;&gt;//当注册的类型在相应得到的容器中可以Resolve你的Call类中所有实例。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　　　　　　　&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; call = container.Resolve&amp;lt;IAnimal&amp;gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　　　　　　　call.DogCall();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　　　　　　　call.CatCall();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　　　　　}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　　　　　Console.ReadLine();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;　　　　  }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用Autofac的步骤：第一步，定义一个Container容器。第二步，创建builder，并在builder中注册类型。第三步，实例化容器。第四步，在需要使用接口的地方，通过container来解析得到一个借口的实例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用python的opencv库来移除黑色背景图</title>
      <link>https://dodoro.chouxiangpai.com/archives/1539/</link>
      <pubDate>Fri, 22 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1539/</guid>
      <description>&lt;p&gt;前两天为了研究隐形数字水印技术，了解了一些OpenCV的用法，涉及到把黑色背景图去掉的方法，别的不多说，直接上代码吧！&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; os
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; cv2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;D:/build/utensilspictureNew&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;#文件夹目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 遍历文件夹及其子文件夹中的文件，并存储在一个列表中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 输入文件夹路径、空文件列表[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 返回 文件列表Filelist,包含文件名（完整路径）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_filelist&lt;/span&gt;(dir):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    newDir &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; dir
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isfile(dir):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        src  &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;imread(newDir,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        tmp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;cvtColor(src, cv2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;COLOR_BGR2GRAY)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        _, alpha &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;threshold(tmp, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;, cv2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;THRESH_BINARY)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        b, g, r &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;split(src)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        rgba &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [b, g, r, alpha]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        dst &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;merge(rgba, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        cv2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;imwrite(newDir, dst)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Done&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isdir(dir):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; s &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;listdir(dir):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            newDir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join(dir,s)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            get_filelist(newDir)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;get_filelist(path)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;代码还包括了如何递归遍历文件夹里的文件夹和文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>隐形数字水印技术</title>
      <link>https://dodoro.chouxiangpai.com/archives/1537/</link>
      <pubDate>Mon, 18 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1537/</guid>
      <description>&lt;p&gt;这两天需要给项目中的图片加水印，考虑到美观就放弃了显性的水印，而采用隐形的数字水印。利用数字水印的不可见性，在不影响作品的情况下，加入版权信息的数字水印，可抗击拷贝，剪切。&lt;/p&gt;
&lt;p&gt;数字水印（DigitalWatermarking）技术是将一些标识信息（即数字水印）直接嵌入数字载体（包括多媒体、文档、软件等）当中，但不影响原载体的使用价值，也不容易被人的知觉系统（如视觉或听觉系统）觉察或注意到，只有通过专用的检测器或阅读器才能提取。数字水印是一个崭新的信息隐藏技术，首次提出这个概念至今也不到20年。&lt;/p&gt;
&lt;p&gt;我采用的是github上面的一个开源库blind_watermark (&lt;a href=&#34;https://github.com/guofei9987/blind_watermark&#34;&gt;https://github.com/guofei9987/blind_watermark&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;这是基于小波变换的数字盲水印，用python来写的，效果还可以，不过通过通信软件截图或者发送之后，就无法获取到数字水印了，这个只能防那些直接拿来使用的盗用者。&lt;/p&gt;
&lt;p&gt;另外，如果图片上透明背景的png格式，转换之后会生成黑色底色，这个也很不好，我花了两天时间试图修改源码，还是没有完成。&lt;/p&gt;
&lt;p&gt;虽然没有能，但是学会了一些OpenCV的技术。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用python给图片添加半透明水印</title>
      <link>https://dodoro.chouxiangpai.com/archives/1541/</link>
      <pubDate>Fri, 15 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1541/</guid>
      <description>&lt;p&gt;我一直都是用C#来完成水印的生产，最近捣腾python脚本，查了一下，可以很方便地用python给图片添加半透明水印。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# coding:utf-8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; PIL &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Image, ImageDraw, ImageFont
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;add_text_to_image&lt;/span&gt;(image, text):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    font &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ImageFont&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;truetype(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;C:\Windows\Fonts\STXINGKA.TTF&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;36&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;# 获取字体&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 添加背景&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    new_img &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;RGBA&amp;#39;&lt;/span&gt;, (image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;size[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;size[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;), (&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    new_img&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;paste(image, image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;size)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 添加水印&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    font_len &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; len(text)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    rgba_image &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; new_img&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;convert(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;RGBA&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    text_overlay &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;RGBA&amp;#39;&lt;/span&gt;, rgba_image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;size, (&lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    image_draw &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ImageDraw&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Draw(text_overlay)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, rgba_image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;size[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;], font_len&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; j &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, rgba_image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;size[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;], &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            image_draw&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;text((i, j), text, font&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;font, fill&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    text_overlay &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; text_overlay&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rotate(&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;45&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    image_with_text &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;alpha_composite(rgba_image, text_overlay)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 裁切图片&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    image_with_text &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; image_with_text&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;crop((image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;size[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;], image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;size[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;], image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;size[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;size[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; image_with_text
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    img &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;open(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;test.jpg&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    im_after &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; add_text_to_image(img, &lt;span style=&#34;color:#e6db74&#34;&gt;u&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;test_output&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    im_after&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;save(&lt;span style=&#34;color:#e6db74&#34;&gt;u&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;test_output.png&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>第六届南宁市十大杰出中学生评选结果</title>
      <link>https://dodoro.chouxiangpai.com/archives/1734/</link>
      <pubDate>Sat, 25 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1734/</guid>
      <description>&lt;p&gt;&lt;strong&gt;第六届“南宁市十大杰出中学生“名单”和第六届“南宁市十大杰出中学生“提名奖名单”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;七县五城区团委、教育局，各开发区团委（团工委）、教育局，全市各中学团委、学生会：&lt;/p&gt;
&lt;p&gt;为了贯彻落实党的十六届三中全会和团十五大精神，全面推进素质教育，及时树立优秀中学生典型，展示新世纪我市中学生的聪明才智和青春风采，在全市中学生中再次掀起学习先进、求实创新、提高素质的新高潮。共青团南宁市委、南宁市教育局、南宁市学生联合会开展了第六届“南宁市十大杰出中学生“、“南宁市百名优秀中学生“评选活动，在各级党政领导和社会各界的重视和支持下，本次评选活动已圆满结束。一大批勤奋学习、品学兼优、积极进取、乐于助人、富有创新精神的优秀中学生脱颖而出，成为南宁市当代中学生中的佼佼者，以自己的行 动展现出了新世纪青少年的青春风采。&lt;/p&gt;
&lt;p&gt;为树立典型，表彰先进。经共青团南宁市委、南宁市教育局、南宁市学生联合会的认真审核，决定授予谢芳秋等10名同学第六届“南宁市十大杰出中学生“荣誉称号，授予苏铁晖等10名同学第六届“南宁市十大杰出中学生“提名奖，授予 宁晓等100名同学第六届“南宁市百名优秀中学生“荣誉称号，授予南宁市第二中学等10所学校第六届“南宁市十大杰出中学生“评选活动育英奖。&lt;/p&gt;
&lt;p&gt;希望受表彰的中学生珍惜荣誉，不懈努力，锐意进取，再创佳绩。号召全市中学生向受表彰的同学学习，以他们为榜样，努力学习，求实创新，崇尚科学，传播文明，努力成为社会主义现代化事业的合格建设者和接班人。&lt;/p&gt;
&lt;p&gt;共青团南宁市委员会 南宁市教育局 南宁市学生联合会&lt;/p&gt;
&lt;p&gt;2003年12月30日&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;附1:第六届“南宁市十大杰出中学生“名单&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;奉献星：谢芳秋(女) 宾阳县宾阳中学373班&lt;/p&gt;
&lt;p&gt;创造星：卓 越 广西大学附属中学初三(1)班&lt;/p&gt;
&lt;p&gt;博学星：张 远 南宁市第十四中学初三(13)班&lt;/p&gt;
&lt;p&gt;余 悦(女) 南宁市第三中学高三(2)班&lt;/p&gt;
&lt;p&gt;学干星：李 行 南宁市第二中学高2001(8)班&lt;/p&gt;
&lt;p&gt;韦英华(女) 邕宁县高级中学012班&lt;/p&gt;
&lt;p&gt;艺体星：黄国星 南宁市第五中学初02（1）班&lt;/p&gt;
&lt;p&gt;李 佳(女) 南宁沛鸿民族中学初01（5）班&lt;/p&gt;
&lt;p&gt;技能星: 农莉霞(女) 南宁市第一中等职业学校01旅游(1)班&lt;/p&gt;
&lt;p&gt;奋进星: 梁琪森 南宁市育才实验中学高二（1）班&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;附2:第六届“南宁市十大杰出中学生“提名奖名单&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;奉献星：李月娟(女) 邕宁县长塘镇第一初级中学011班&lt;/p&gt;
&lt;p&gt;创造星：玉丹妮(女) 南宁市第一中学高三（1）班&lt;/p&gt;
&lt;p&gt;博学星：赵 莉(女) 武鸣县武鸣高级中学武鸣八班 苏铁晖 南宁市第二中学高三（8）班&lt;/p&gt;
&lt;p&gt;学干星：张 弛 南宁市第三中学高三实验（2）班 许 媚(女) 南宁市第二十八中学高三（6）班&lt;/p&gt;
&lt;p&gt;艺体星：张 慧(女) 南宁市天桃实验学校中学部初一(10)班 夏 照(女) 南宁市五一中路学校初二（3）班&lt;/p&gt;
&lt;p&gt;技能星: 黄 龙 南宁市第二十六中学初三（七）班&lt;/p&gt;
&lt;p&gt;奋进星: 颜果中 横县第二高级中学（0111）班&lt;/p&gt;</description>
    </item>
    <item>
      <title>武鸣高中的那些老师们</title>
      <link>https://dodoro.chouxiangpai.com/archives/1727/</link>
      <pubDate>Fri, 10 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1727/</guid>
      <description>&lt;p&gt;二十年前的今天，我踏入武鸣高中的校门，不同于小熊，武高给我留下很多深刻的回忆——都是相对美好。对于武高我的印象和二十年前的感受，我在《光明之路》里写过：&lt;/p&gt;
&lt;p&gt;“我从三轮摩的跳下来，抬头就看见武鸣高中的校门，深红色的瓷砖镶嵌着门柱，闪闪发光的金字大招牌，这个景象和我预想中的差不多。这里就是我一直梦回牵绕的理想之地，这一个多月来我曾经无数次想象第一次看见它时的激动心情，然而此时此刻，我却似乎变得镇定和平静，我知道我还有更远的目标要去实现。”&lt;/p&gt;
&lt;p&gt;班主任阿家老师，他是班主任，我当年是这么描述：&lt;/p&gt;
&lt;p&gt;“班主任长得微胖，头形很圆，前额的头发已经秃了不少，他留部分后面的头发拨到前面挡住，讲话的过程中，我能感觉他的眼神一直在游走，偶尔我眼神和他触碰的那一刹那，我正要对他微笑，他却带着傲慢的神气把目光移走。这一节课是化学课，老师是班主任，他和前几天的表现没有太多变化，依然是一脸严肃认真的姿态，偶尔努力露出一丝微笑，我总觉得那是挤出来的笑容。”&lt;/p&gt;
&lt;p&gt;语文老师是阿能老师，他原来只是初中老师，经过自己的努力来到武高，并担任民族班的班主任，听说现在已经到市里教书了，我印象最深的是他胃病导致被切掉了半个胃——我们一直觉得他是因为太努力了：&lt;/p&gt;
&lt;p&gt;“第一节是语文课，铃声刚停住，我看见一位带着眼镜、留着边分头的人走进教室，他微微仰着头，手水平地端着课本，走上讲台后，他拿起粉笔转身用狂草写上自己的名字，字迹写得太像明星的签名，我没能马上认出来。他一边面带微笑说话，一边伸出食指在空中画一条弧线，他环顾四周，看见没有人举手他继续讲话。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于HTTP请求头中的Remote_Addr，X-Forwarded-For，X-Real-IP值</title>
      <link>https://dodoro.chouxiangpai.com/archives/1522/</link>
      <pubDate>Tue, 17 Aug 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1522/</guid>
      <description>&lt;p&gt;开发过程中，我们有时候需要获取用户的客户端机器的ip地址，在遥远的拨号上网年代，我们只需要通过很简单的Remote_Addr就能获得客户端的真是ip地址，可是随着代理服务器的普及，客户端的ip地址往往不那么容易拿到。&lt;/p&gt;
&lt;h1 id=&#34;一remote_addr&#34;&gt;一、Remote_Addr&lt;/h1&gt;
&lt;p&gt;这个值表示发出请求的远程主机的IP地址，remote_addr代表客户端的IP，但它的值不是由客户端提供的，而是服务端根据客户端的ip指定的，当你的浏览器访问某个网站时，假设中间没有任何代理，那么网站的web服务器（Nginx，Apache等）就会把remote_addr设为你的机器IP，如果你用了某个代理，那么你的浏览器会先访问这个代理，然后再由这个代理转发到网站，这样web服务器就会把remote_addr设为这台代理机器的IP。&lt;/p&gt;
&lt;h1 id=&#34;二x_forwarded_for&#34;&gt;二、x_forwarded_for&lt;/h1&gt;
&lt;p&gt;简称XFF头，它代表客户端，也就是HTTP的请求端真实的IP，只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项，正如上面所述,当你使用了代理时,web服务器就不知道你的真实IP了,为了避免这个情况,代理服务器通常会增加一个叫做x_forwarded_for的头信息,把连接它的客户端IP(即你的上网机器IP)加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP。&lt;/p&gt;
&lt;p&gt;设置格式：X-Forwarded-For: 127.0.0.1, 192.168.1.1, 202.19.89.64&lt;/p&gt;
&lt;p&gt;这个设置表示请求由127.0.0.1发出，经过三层代理，第一层是192.168.1.1，第二层是202.19.89.64，而本次请求的来源IP 1.1.1.1是第三层代理。&lt;/p&gt;
&lt;h1 id=&#34;三x-real-ip&#34;&gt;三、X-Real-IP&lt;/h1&gt;
&lt;p&gt;当有多个代理时候，可以在第一个反向代理上配置“proxy_set_header X-Real-IP $remote_addr” 获取真实客户端IP；&lt;/p&gt;
&lt;h1 id=&#34;四案例分析&#34;&gt;四、案例分析&lt;/h1&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1522/images/image-1629181586453.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;（一）、第一种情况&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Nginx Proxy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;202.19&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;89.64&lt;/span&gt; nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;location /test {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    proxy_pass http:&lt;span style=&#34;color:#75715e&#34;&gt;//192.168.108.1;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;108.1&lt;/span&gt; nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;location /test {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    proxy_pass http:&lt;span style=&#34;color:#75715e&#34;&gt;//192.168.108.2;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Nginx Proxy就是简单的把请求往后转发&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Nginx Backend
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;108.108&lt;/span&gt; nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;location /test {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    default_type text/html;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    charset gbk;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$remote_addr || $http_x_forwarded_for&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nginx Backend输出客户端IP（$remote_addr）和X-Forwarded-For请求头（$http_x_forwarded_for），当访问服务时输出结果：192.168.108.108 ||&lt;/p&gt;
&lt;p&gt;1.$remote_addr代表客户端IP，当前配置的输出结果为最后一个代理服务器的IP，并不是真实客户端IP；&lt;/p&gt;
&lt;p&gt;2.在没有特殊配置情况下，X-Forwarded-For请求头不会自动添加到请求头中，即Nginx Backend的$http_x_forwarded_for输出为空。&lt;/p&gt;
&lt;p&gt;（二）、第二种情况&lt;/p&gt;
&lt;p&gt;通过添加X-Real-IP和X-Forwarded-For捕获客户端真实IP。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Nginx Proxy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;202.19&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;89.64&lt;/span&gt; nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;location /test {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    proxy_set_header X-Real-IP &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;remote_addr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    proxy_set_header X-Forwarded-For &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;proxy_add_x_forwarded_for;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    proxy_pass http:&lt;span style=&#34;color:#75715e&#34;&gt;//192.168.108.1;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;108.1&lt;/span&gt; nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;location /test {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    proxy_set_header X-Forwarded-For &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;proxy_add_x_forwarded_for;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    proxy_pass http:&lt;span style=&#34;color:#75715e&#34;&gt;//192.168.108.2;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Nginx Backend
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;108.108&lt;/span&gt; nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;location /test {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    default_type text/html;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    charset gbk;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$remote_addr ||$http_x_real_ip  ||$http_x_forwarded_for&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当访问服务时，输出结果为：192.168.108.108 || 202.19.89.64 || 192.168.108.1, 192.168.108.2&lt;/p&gt;</description>
    </item>
    <item>
      <title>从WebForm到MVC，一直到Blazor</title>
      <link>https://dodoro.chouxiangpai.com/archives/1518/</link>
      <pubDate>Thu, 05 Aug 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1518/</guid>
      <description>&lt;p&gt;打算下一个项目用Blazor，学习了一个下午，这是一个很不错的全栈UI框架，基于WebAssembly技术，可以让开发人员直接用C#完成js的工作。&lt;/p&gt;
&lt;p&gt;学习过程中，我脑子里闪现了自己经历的那个ASP.NET的WebForm时代，那时候我们用UserControl的ascx文件布局网页。查了下，果然是一脉相承。 &lt;a href=&#34;https://docs.microsoft.com/en-us/dotnet/architecture/blazor-for-web-forms-developers/architecture-comparison&#34;&gt;https://docs.microsoft.com/en-us/dotnet/architecture/blazor-for-web-forms-developers/architecture-comparison&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我把消息发群里，大家开始回忆曾经用过的方法，包括ViewState，GridView，IsPostBack，masterpage，repeater，这些技术确实都是一代人的回忆。&lt;/p&gt;
&lt;p&gt;不过认真回想，微软的WwebFrom的理念是超前的， 只不过碍于当时的技术发展, 只能做成那样，后来的UI框架其实都给予它的思想。&lt;/p&gt;
&lt;p&gt;“技术会落后，思想传承”，微软的技术从WebForm到MVC，一直到一直到Blazor，使用的WebUI的组件技术一直都没有改变，果然是汇集世界一流软件工程师的公司。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]龙应台的《(不)相信》</title>
      <link>https://dodoro.chouxiangpai.com/archives/1515/</link>
      <pubDate>Wed, 21 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1515/</guid>
      <description>&lt;p&gt;二十岁之前相信的很多东西，后来一件一件变成不相信。&lt;/p&gt;
&lt;p&gt;曾经相信过爱国，后来知道“国”的定义有问题，通常那谆谆善诱要你爱国的人所定义的“国”，不一定可爱，不一定值得爱，而且更可能值得推翻。&lt;/p&gt;
&lt;p&gt;曾经相信过历史，后来知道，原来历史的一半是编造。前朝史永远是后朝人在写，后朝人永远在否定前朝，他的后朝又来否定他，但是负负不一定得正，只是累积渐进的扭曲变形移位，使真相永远掩盖，无法复原。说“不容青史尽成灰”，表达的正是，不错，青史往往是要成灰的。指鹿为马，也往往是可以得逞和胜利的。&lt;/p&gt;
&lt;p&gt;曾经相信过文明的力量，后来知道，原来人的愚昧和野蛮不因文明的进展而消失，只是愚昧野蛮有很多不同的面貌：纯朴的农民工人、深沉的知识分子、自信的政治领袖、替天行道的王师，都可能有不同形式的巨大愚昧和巨大野蛮，而且野蛮和文明之间，竟然只有极其细微、随时可以被抹掉的一线之隔。&lt;/p&gt;
&lt;p&gt;曾经相信过正义，后来知道，原来同时完全可以存在两种正义，而且彼此抵触，冰火不容。选择其中之一，正义同时就意味着不正义。而且，你绝对看不出，某些人在某一个特定的时机热烈主张某一个特定的正义，其中隐藏着深不可测的不正义。&lt;/p&gt;
&lt;p&gt;曾经相信过理想主义者，后来知道，理想主义者往往经不起权力的测试：一掌有权力，他或者变成当初自己誓死反对的“邪恶”，或者，他在现实的场域不堪一击，一下就被弄权者拉下马来，完全没有机会去实现他的理想。理想主义者要有品格，才能不被权力腐化；理想主义者要有能力，才能将理想转化为实践。可是理想主义者兼具品格及能力者，几希。&lt;/p&gt;
&lt;p&gt;曾经相信过爱情，后来知道，原来爱情必须转化为亲情才可能持久，但是转化为亲情的爱情，犹如化入杯水中的冰块——它还是冰块吗？&lt;/p&gt;
&lt;p&gt;曾经相信过海枯石烂作为永恒不灭的表征，后来知道，原来海其实很容易枯，石，原来很容易烂。雨水，很可能不再来，沧海，不会再成桑田。原来，自己脚下所踩的地球，很容易被毁灭。海枯石烂的永恒，原来不存在。&lt;/p&gt;
&lt;p&gt;二十岁之前相信的很多东西，有些其实到今天也还相信。&lt;/p&gt;
&lt;p&gt;譬如国也许不可爱，但是土地和人可以爱。譬如史也许不能信，但是对于真相的追求可以无止尽。譬如文明也许脆弱不堪，但是除文明外我们其实别无依靠。譬如正义也许极为可疑，但是在乎正义比不在乎要安全。譬如理想主义者也许成就不了大事大业，但是没有他们社会一定不一样。譬如爱情总是幻灭的多，但是萤火虫在夜里发光从来就不是为了保持光。譬如海枯石烂的永恒也许不存在，但是如果一粒沙里有一个无穷的宇宙，一刹那里想必也有一个不变不移的时间。&lt;/p&gt;
&lt;p&gt;那么，有没有什么，是我二十岁前不相信的，现在却信了呢？&lt;/p&gt;
&lt;p&gt;有的，不过都是些最平凡的老生常谈。曾经不相信“性格决定命运”，现在相信了。曾经不相信“色即是空”，现在相信了。曾经不相信“船到桥头自然直”，现在有点信了。曾经不相信无法实证的事情，现在也还没准备相信，但是，有些无关实证的感觉，我明白了，譬如李叔同圆寂前最后的手书：“君子之交，其淡如水，执象而求，咫尺千里。问余何适，廓尔忘言，华枝春满，天心月圆。”&lt;/p&gt;
&lt;p&gt;相信与不相信之间，彷佛还有令人沉吟的深度。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微分方程模型之传染病数学模型</title>
      <link>https://dodoro.chouxiangpai.com/archives/1485/</link>
      <pubDate>Mon, 05 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1485/</guid>
      <description>&lt;p&gt;关于传染病的数学模型，在许多年前数学界早已做过研究，根据传染病的传播速度不同，空间范围各异，传播途径多样，动力学机理等各种因素，对传染病模型按照传染病的类型划分为 SI，SIR，SIRS，SEIR 模型。如果是按照连续时间来划分，那么这些模型基本上可以划分为常微分方程（Ordinary Differential Equation），偏微分方程（Partial Differential Equation）等多种方程模型；如果是基于离散的时间来划分，那么就是所谓的差分方程（Difference Equation）。差分模型其实是微分模型的离散形式，所以我们只讨论微风方程模型。&lt;/p&gt;
&lt;p&gt;首先要介绍一些常用的符号：在时间戳 上，可以定义以下几种人群：&lt;/p&gt;
&lt;p&gt;•易感者（susceptible）：用符号&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625453813202.png&#34;&gt; 来表示；&lt;/p&gt;
&lt;p&gt;•感染者（infective）：用符号&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625453828064.png&#34;&gt;来表示；&lt;/p&gt;
&lt;p&gt;•康复者（Recoverd）：用符号&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625453839810.png&#34;&gt;来表示；&lt;/p&gt;
&lt;p&gt;其次，在时间戳t上，总人口是&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625453908961.png&#34;&gt; 。如果暂时不考虑人口增加和死亡的情况，那么N(t)是一个恒定的常数值。&lt;/p&gt;
&lt;p&gt;除此之外，&lt;/p&gt;
&lt;p&gt;•r表示在单位时间内感染者接触到的易感者人数；&lt;/p&gt;
&lt;p&gt;•传染率&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454075473.png&#34;&gt;：表示感染者接触到易感者之后，易感者得病的概率；&lt;/p&gt;
&lt;p&gt;•康复率&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454102127.png&#34;&gt;：表示感染者康复的概率，有可能变成易感者（可再感染），也有可能变成康复者（不再感染）。&lt;/p&gt;
&lt;p&gt;在进行下面的分析之前，先讲一个常微分方程的解。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454228538.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;一si-模型susceptible-infective-model&#34;&gt;一、SI 模型（Susceptible-Infective Model）&lt;/h2&gt;
&lt;p&gt;在 SI 模型里面，只考虑了易感者和感染者，并且感染者不能够恢复，此类病症有 HIV 等，模型如下：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454289174.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;其微分方程就是：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454297456.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;这个微风方程近似解法如下：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454334953.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;通过数值模拟的结果：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454442778.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;在SI模型的假设下，全部人群到最后都会被感染。&lt;/p&gt;
&lt;h2 id=&#34;二sis模型susceptible-infectious-susceptible-model&#34;&gt;二、SIS模型（Susceptible-Infectious-Susceptible Model）&lt;/h2&gt;
&lt;p&gt;除了HIV这种比较严重的病之外，还有很多小病可以恢复并且反复感染，例如日常的感冒，发烧等。在这种情况下，感染者就有一定的几率重新转化成易感者。如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454693584.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;其微分方程是：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454711536.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;初始值：&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454725862.png&#34;&gt;，&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454736674.png&#34;&gt;。&lt;/p&gt;
&lt;p&gt;这个方程的数值近似解：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454796370.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;三sir-模型susceptible-infectious-recovered-model&#34;&gt;三、SIR 模型（Susceptible-Infectious-Recovered Model）&lt;/h2&gt;
&lt;p&gt;很多时候，感染者在康复了之后就有抗体，于是后续就不再会获得此类病症，这种时候就需要考虑SIR模型。此类病症有麻疹，腮腺炎，风疹等。我们熟悉的SIR模型是基于疫情流行区域的总人数、感染人数、易感人数、病愈人数和时间之间的如下关系：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625454850995.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;其微分方程是：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625455036262.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;这些方程里的参数和为常数，反映了特定疫情的特征。这些方程貌似简单，但由于常数和是同一数量级，导致方程属于高度耦合的非线性类型，实际上无法求解析解，需要用数值解来提供预测结果。在疫情扩散过程中的早期，由于开始时易感人群也就是总人数，即 ≈ ，我们可以简化感染人数和时间的关系为：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625455018977.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;由此可得到感染人数的近似解为：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625455068252.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;这一关系表明，近似的感染人数总数是时间的指数函数。这里的常数和应该根据疫情的特点来确定，从而实现感染人数的估计。当然，疫情防控措施也会影响这些参数，反过来也反映了防控措施的效果。这些参数一般是根据流行病学的统计结果得到的，会在疫情的流行过程中得到反映。也就是说，我们也可以根据实际疫情报告来决定这些参数。由于我们已经积累了一些疫情实际数据，基于SIR分析的回溯拟合可以精确地确定这些参数。&lt;/p&gt;
&lt;p&gt;SIR模型的一些近似结果（预测新冠病毒的有症状的确诊病例）：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1485/images/image-1625455356300.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;四总结&#34;&gt;四、总结&lt;/h2&gt;
&lt;p&gt;最后，除了以上的 SI，SIS，SIR 模型中，还考虑进去。除此之外，如果把潜伏期、潜伏期的传染情况也加进去考虑，还有SIRS模型，SEIR模型等，但是不管怎么变化都是基于SIR这个微分模型，而且有时候考虑的参数越多不一定越准确，比较本身参数就不是绝对精确。&lt;/p&gt;</description>
    </item>
    <item>
      <title>伯林和自由主义（二）</title>
      <link>https://dodoro.chouxiangpai.com/archives/1479/</link>
      <pubDate>Fri, 02 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1479/</guid>
      <description>&lt;p&gt;这段时间阅读伯林的《自由论》及相关书籍，发现伯林的思想广博又深邃，他是哈耶克和波普尔的好友，他的很多想法甚至超越了穆勒，我特别欣赏他坚持在自由的前提下，坚守多元和容忍。伯林有两篇重要的文章，重要得我不得不转到这里来，为此我专门进行了OCR识别，并且人工校对。&lt;/p&gt;
&lt;p&gt;这是第二篇文章，这篇文章可以大致了解伯林对于“自由”的基本论述，这两天在youtube上看到Manufacturing Intellect节目里对伯林的采访，他说了这么一句很令我深思的话：&lt;strong&gt;伟大的哲学家的基本理念和思想是非常简单又深刻的，并且他可以通俗地告诉大众，至于他自己的长篇大论，只是在论述、校验和证明自己的思想是经得起推敲的，并且也是对普通人或者其他哲学家的一些想法的反驳。&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&#34;自由&#34;&gt;自由&lt;/h1&gt;
&lt;p&gt;什么是政治自由？在古代世界，特別在希腊人当中，“是自由的”就是能够参与自己城邦的管理。只冇当一个人冇权参与法律的制定与废除时，法律才是有效的。自由并不是被迫服从别人为他制定的法律，而是服从由他制定的法律。这种民主制使得政府与法律渗透生活的所冇领域成为可能。人不能免于这样的管理，他也不要求免于这样的管理。所有民主主义者都声称，人人都同样可能接受批评、调査、依法传讯(若必需)或其他安排，在建立与维持这些安排时，每个公民都有权参与。&lt;/p&gt;
&lt;p&gt;在现代世界，一种新观念产生了一本杰明•贡斯当对之作了最清晰的阐释一这就是：存在着一个私人生活的领域，除了特殊情况外，这个领域朵不希望受公共权力干涉的。古代世界的核心问题是“谁应该统治我？”。有些人说是封主，有些人说是最贤明者，或最富冇者、敁勇敢者、多数派、法院、所有人的匿名表决。在现代世界，一个同等重耍的问题楚：政府应该在多大程度上进行管理？古代世界假定生活是一个整体，法律与政府覆盖其整个领域——没有任何理由保护生活的任何一个角落不受这种监管。在现代世界，历史地说，不管是作为教会反对世俗国家干涉的斗争或国家反对教会的斗争的结果,还始作为私人企业工业、商业的成长及其反对国家干涉的要求的结果，或者还因为别的什么原因，我们开始提出这样的假设在公共生活与私人生活之间存在着界线；无论在这个界线之内我可以依意愿行事，亦即按我軎欢的方式生活、相信我愿意相信之物的私人空间多么狭小，只要我的行为不干涉别人相似的权利，或不损害使这种安排成为吋能的秩序。这是古典自由主义观点，在英国与法同各种各样的人权宣言中，在诸如洛克、伏尔泰、托马斯•潘恩、贡斯巧和约翰•斯图亚特•穆勒等人的著作中，得到完整或部分的表达。当我们说到公民自由(权)或公民价值时，这就是其中的含义之一。&lt;/p&gt;
&lt;p&gt;_人需要彼此防范和防范政府，这种假设从未在世界的任何地方被完全接受过，我所说的古希腊或古典的观点以这种形式重新出现你说个人有权选择他喜爱的生活。_但是这适用于所有人吗？如果这个个体无知、不成熟、未受教育、智力残缺,拒绝恰当的健康与发展机会，他将不可能知道如何选择。这种人从不会真正知道他的真正需要是什么。如果存在这样一些人，他们知道人的本性是什么、人究竟渴望什么，如果他们替其他人做了他们如果更明智、更知情、更成熟、更发达也会做的事情——也许用一些控制的手段——那么，他们是在剥夺后者的自由吗？他们的确干涉了人们，但只是为了让他们能够做如果他们知道得更多也会做的亊悄,或者为了使他们总是处于最佳状态，而非老是受制于非理性的动机或幼稚的举动，或让他们本性中动物的一面占优势。那么这还是干涉吗？如果父母或老师强迫不情愿的孩子上学或努力学习，以虽然孩子们可能并不知道的真实要求为名，那么,既然这是所有真正的人——因为他们是人——都必然要求的，他们还是在剥夺孩子们的自由吗？肯定不是。老师或父母给了他们潜伏的或真实的自我，迎合他们的需要，以反对他们更肤浅的自我暂时的需耍，这些需要在人成熟时就像老皮一样会蜕掉。”&lt;/p&gt;
&lt;p&gt;如來你用教会、政党或阀家来代替父母，你就会得到作为许多现代权威之基础的那种理论。我们被告知说，服从这些机构就是服从自己，因此不是受奴役，因为这些机构本身体现着我们最好与最明智的方面，而自我约束并非约束，自我控制并非受奴役。&lt;/p&gt;
&lt;p&gt;这两种观点(在其各种版本中)的战斗，乃是现代世界基本的政治议题。一方说把酒瓶放到嗜酒症患者拿不着的地方并未剥夺他的自由；如果他被阻止酗酒，即使是通过强迫，他也会健康起来，能更好地履行他作为人和公民的责任并会更好地成为他自己，这样要比他能够着酒瓶、毁坏他的健康与健全时更自由。他不知道这一点的事实正是他的疾病或他对自己真实需要无知的表现。另一方并不否认有必要对反社会的行为加以抑制，不否认有必要防止他伤害他自己或伤害他自己的孩子或其他人的福利，但是否认这种抑制——虽然是公正的——构成自由。为了让别的利益，如安全、和平或健康有足够的空间，自由也许不得不被剥夺；或者为了明天更大的自由今天的自由不得不被剥夺；但是剥夺自由并不是提供自由，而且，强制，不管有多么好的理由，毕竟是强制而非自由。自由，这些人会说，仅是诸多价值中的一种，如果它构成实现其他同等重要的目标的障碍，或者妨碍其他人实现这些目标的机会，它就必须让路。&lt;/p&gt;
&lt;p&gt;对此，另一方的回应是，这种说法预先假定私人生活与公共生活的分裂(它假定人有可能在其私人生活中做一些别人不喜欢的事情，因此需要受到保护），但是这样一种人性观是建立在一种根本的错误之上。人类是一个整体，在一个理想的社会里，当每个人的功能发挥出来时，没有人会想去做那些令别人反感或想阻止的事情。改革家与革命者的恰当的意图，便是去打通人与人之间的高墙，把一切带到开放之境，使人没有分裂地生活在一起，以致一人所欲即万人所欲。要求不被打扰，要求能够做自己愿意做的事而不需要向某个法庭——家庭、雇主、党、政府或整个社会——作解释，这种要求本身便是失调的表现。向社会索要自由就是向自我索要自由。这种病症必须通过改变财产关系(如社会主义要求做的那样)，或通过消除批判理性(如一些宗教派别，以及法西斯和其他极权主义政权事实上试图做的那样)予以治疗。&lt;/p&gt;
&lt;p&gt;在可以称作有机论的第一种观点中，所有分离都是坏的，不容践踏的人权观念乃是壁垒观念——是人与人之间相互隔离时才需要的墙壁——只有在一个坏的社会里才为人们所需，而在一个组织良好、所有人类小溪都流入统一的人类江河的社会里则没有存在的余地。在第二种或自由主义的观点中，&lt;strong&gt;人权，以及私人领域(在其中我不受审查)的观念，对于人人需要的最低限度的自主——如果他要按自己的路线发展的话——是不可缺少的；因为多样性是人类的类本质，而不是行将逝去的状态。这个观点的拥护者认为，毁灭这种权利以建立一种普遍的、自我导向的人类社会——一个所有人向着同一目标进军的社会——将摧毁个人选择的领域；而这一领域，不管多么狭窄，一旦失去，生命亦不再有价值&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;极权与威权制度以一种粗糙的和(有人会坚持说)扭曲的形式，代表着这些观点的前一种，而自由民主制度倾向于代表后一种。当然，这些观点的变种与联结，以及它们间的妥协，也是可能的。它们是两种基本的、彼此对立的观念，主导着自文艺复兴以来的世界。&lt;/p&gt;</description>
    </item>
    <item>
      <title>伯林和自由主义（一）</title>
      <link>https://dodoro.chouxiangpai.com/archives/1467/</link>
      <pubDate>Thu, 01 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1467/</guid>
      <description>&lt;p&gt;这段时间阅读伯林的《自由论》及相关书籍，发现伯林的思想广博又深邃，他是哈耶克和波普尔的好友，他的很多想法甚至超越了穆勒，我特别欣赏他坚持在自由的前提下，坚守多元和容忍。伯林有两篇重要的文章，重要得我不得不转到这里来，为此我专门进行了OCR识别，并且人工校对。&lt;/p&gt;
&lt;p&gt;第一篇文章是他总结自己的思想史，回顾最重要的两个观点：一是否定历史必然性，即否定决定论，二是再次阐述自己关于消极自由和积极自由的观点。这篇文章摘自伯林的作品《我的思想之路》(1987)，全文收录于《观念的力量》(伦敦，2000：温多斯；普林斯顿，2000：普林斯顿大学出版社)。&lt;/p&gt;
&lt;h1 id=&#34;决定论&#34;&gt;决定论&lt;/h1&gt;
&lt;p&gt;政治自由是我在二十世纪五十年代两个讲演的主题。第一个讲演题目是《历史必然性》。在这里，我陈述的观点是：决定论是一种千百年来为无数哲学家广为接受的学说。决定论宣称每个事件都有一个原因，从这个原因中，事件不可避免地产生。这是自然科学的基础：自然规律及这些规律的运用——构成整个自然科学——建立在自然科学所探讨的永恒秩序的观念之上。但是，如果自然的其余部分都是服从于这些规律的，那么唯有人类不服从它们吗？当一个人就像绝大多数平常人(虽然并非绝大多数科学家与哲学家)那样假定，当他从椅子上站起来时他并不是非要这么做不可；他从椅子上起来，是因为他选择这样做，但他并不是必须要做这样的选择——当他这样假定时，他就被告知：这是一种幻觉；随着心理学家的必要工作的完成(它尚未完成，但至少从原则上讲是可以完成的），总有一天他会发现，他的所是和所做都是必然如此的，是不可能不如此的。我相信这个学说是错误的，但我在这篇文章中并没有证明这点，或者说我并没有驳斥决定论，而且我也怀疑这种证明或者驳斥是否可能。我的唯一用心是问自己这两个问题：为什么哲学家或其他人认为人类是完全被决定的？如果他们是这样认为的，那么，这与一般所理解的正常的道德情操及行为是否相容？&lt;/p&gt;
&lt;p&gt;我的观点是，主要有两个理由支持人的决定论的学说（注：伯林自己并不认同这两种学说，而是在叙述这两种学说的过程中对它们进行反驳）。&lt;/p&gt;
&lt;p&gt;第一个理由是，既然自然科学是整个人类历史中也许最成功的故事，那么假设只有人不服从由自然科学家发现的自然规律，便是非常荒谬的。这的确就是十八世纪的phibsophes(哲人们)所坚持的。当然，问题并不是人是否完全不受这种自然规律决定——只有疯子才会坚持人不依赖他的生物学或心理学结构，不依赖于环境或自然规律。关键的问题是：他的自由是否因此完全被杜绝？是不是还存在着某个角落，在其中他可以做他选择的事情，而不是被前在的原因决定去做这种选择？在自然领域中这也许是个很小的角落，但是除非这个角落存在，他的作为自由的存在物的意识——这种意识无疑是普遍的；绝大多数人相信这种观点，即虽然他们的行为中有些是机械的，有些却是服从他的自由意志的——才不至成为一种巨大的幻觉^这种意识自从人类开始时，即从亚当偷食禁果时就存在了。亚当虽然被告知不要偷食禁果，似偷食了以后也没有这样回答：“我禁不住这样做，我并不是自由地这样做的，是夏娃强迫我这样做的。”&lt;/p&gt;
&lt;p&gt;第二个理由是，它把人们做的好多事情的责任，推到非人的原因上面，从而使他们对自己的所作所为有无需负责任的感觉。当我犯了一个错误，或者做了一件坏事，或犯了什么罪,或做了我或其他人认为是坏的或不幸的事情，我会说：“我怎么能够避免得了呢？我就是被教育这样做的”；或者，“这是我的天性，自然规律应该对此负责”；或者，“在我所属的那个社会、阶级、教会、民族中，每个人都是这样做的，而且没有人谴责这样做”；或者，“从心理学上，我是受我的父母彼此之间的行事方式以及他们对我的行事方式决定的，是受我置身其中的经济与社会状况决定的，或者是被迫这样做的，无法做其他选择的”；或者干脆，“我是在执行命令”。&lt;/p&gt;
&lt;p&gt;与此相反，大多数人相信每个人都至少能够做出两种选择，两种他能够实现的可能性。当艾希曼说“我杀死犹太人是因为我被命令如此；如果我不这样做我自己也会被杀死”时，人们可能会说：“我觉得你不太可能会选择被杀，但是从原则上讲如果你决定这么做，你就可以这样选择。并不真的存在像自然界中那样的强迫，导致你做出你的行为。”你可能会说，当面临巨大危险时，期望每个人都如此行事是不合理的。的确如此，但是不管多么不可能，在他们“能够”作此选择这一字面意义上，他们都应该决定这么做。殉难是不能期望的，但是殉难是可以接受的，不管其概率有多么小。而且这正是它如此值得称道的原因。&lt;/p&gt;
&lt;p&gt;这就是历史上人们接受决定论的理由。但是如果他们接受决定论，那么至少存在着一个逻辑上的困难。这意味着我们不可能对任何人这样说：“你已经这样做了吗？你为什么非要这样做不可？”隐藏在这种说法下面的假定是，他其实可以不这样做，或是可以做其他事情的。我觉得正是我们的全部日常道德观点(在其中我们可以谈及责任与义务、对与错、道德褒贬)——也就是当人们不是被迫行事时(他们能够以另一种方式行事)，他们因其所作所为而受到的称赞或谴责、奖励或惩罚——我们日常道德依赖于其上的这种信念与实践的网络，假定了责任的观念；而正是责任使得在黑与白、对与错、快感与义务之间做出选择成为必要；同样，在更广泛的意义上，使得在生活方式、政府形式与整个道德价值星丛中做出选择成为必要——不管他们有没有意识到，大多数人实际上都是根据这些价值星丛来生活的。&lt;/p&gt;
&lt;p&gt;如果决定论被接受，那么，我们的词汇就要做出非常根本的改变。我并不是说这事从原则上讲不可能，但是它的确不可能为绝大多数人所承受。在最好的情况下，美学将代替道德。你会羡慕或赞扬某些人的帅气、慷慨或精通音乐，但这不是他们的选择的结果，而是“他们被造就”的结果。道德赞扬也将不得不采取同样的形式：如果我因为你冒着生命危险救我而赞扬你，那么我的意思是说，值得惊叹的是你被如此造就，以致无法避免这样做；而且我非常高兴我遇到的是某个确确实实被决定要去救我的人，而不是一个被决定故意朝另一边看的人。值得尊敬与不值得尊敬的行为、享乐主义与英雄般的殉道、欺诈与真诚正派等等，所有这些都变得像漂亮与丑陋、高与矮、老与少、黑与白、英国或意大利父母所生一样，是我们无法改变的。因为一切都被决定好了。我们可能会希望事情变得如我们所愿，但我们不能为此做些什么——我们被如此造就，以致除了依某种特殊方式行事外无法做任何别的事情。事实上，行动的概念本身就意味着选择；但是如果选择本身是被决定了的，那么在行动与纯粹的动作之间有什么区别呢？&lt;/p&gt;
&lt;p&gt;对我来说非常矛盾的是，某些政治运动一方面要求牺牲，另一方面却又持决定论的信念。例如，马克思主义是建立在历史决定论——社会在达到完美境界之前必须经过若干不可避免的阶段——基础上的，它责令人从事痛苦而危险的行动、强迫与斗争，这样一些对于行动者与受动者同样痛苦的事情；但是如果历史真的不可避免地带来完美社会，那么一个人为什么还要为这样一种据说不需要人帮助也会达到其适当而幸福的终点的过程牺牲性命呢？不过，存在着一种古怪的人类情感，即，如果天意在你这一边，你的事业必胜，那么，就像马克思所说的那样你必须牺牲你的生命以缩短这个进程，从而带来新秩序临近的阵痛。不过，是不是那么多的人真的都能被说服去面对这些危险，以缩短那种无论他们行动或不行动都会导致幸福的进程呢？这个问题总是使我、同时也使其他人感到困惑。&lt;/p&gt;
&lt;p&gt;我在这个讲座中讨论的问题，一直是具有争论性的问题，它以往被激烈地讨论与争论着，也仍将被激烈地讨论与争论。&lt;/p&gt;
&lt;h1 id=&#34;关于自由&#34;&gt;关于自由&lt;/h1&gt;
&lt;p&gt;**我的另一篇讨论自由的讲演题目是《两种自由概念》。这是我就任牛津大学教授讲席的致辞。它的要点是区分自由的两种观念，即消极与积极自由。**关于消极自由，我指的是不存在阻碍人行动的障碍。除了由外部世界，或支配人类的生物的、生理的和心理的规律所产生的阻碍外，还存在着缺乏政治自由的阻碍——这是我的讲演的核心。在缺乏政治自由的地方，这些阻碍就是人为的，不管是有意的还是无意的。消极自由的程度取决于这种人为阻碍存在与否，也就是说取决于我不被人为的制度、纪律或某些特定人类的活动所阻止，而自由地沿这条或那条道路前进的程度。&lt;/p&gt;
&lt;p&gt;说消极自由仅仅意味着自由地做我喜欢做的事情，这是不够的，因为在那种情况下，我可以简单地遵循古代斯多鳴派消灭欲望的方法，使自己从实现欲望的障碍中解放出来。但是这条路径，即逐渐消除会导致障碍产生的欲望，最后会导致人类逐渐失去其自然的、有活力的活动；换句话说,处于最完美的自由状态的人将是那些死者，因为在他们那里既不存在欲望也不存在障碍。&lt;strong&gt;但是我心目中的消极自由，指的仅仅是一个人能够顺着走的那些道路的条数，至于他走不走，那是另一回事。这是政治自由的两个基本含义的第一个。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;有些人不赞同我的观点，坚持说自由必须是一种三重关系：我克服、清除或摆脱障碍仅仅是为了做某件事，即自由地做某个或某些既定的行动。但我不接受这种说法。当一个人身陷囹圄或被绑在树上时，他就是不自由的；不自由的最基本的含义就是如此。这种状态中的人唯一寻求的，是打碎他的锁链，逃离监狱，他并不必然是为了实现某个特殊的行动。当然，在更大的意义上，自由意味着摆脱社会或其制度的统治，摆脱某种过分的道德或物质力量所施加的作用，或者摆脱任何关闭行动的可能性的东西——这些可能性本来是可以开放的。这就是我所说的“免于……的自由”。&lt;/p&gt;
&lt;p&gt;自由的另外一个核心含义是“做……的自由”。如果我的消极自由通过对“我被控制到何种程度？”这个问题的回答而得到限定，那么，自由的第二个含义，是通过对“谁控制我？”这个问题的回答来限定的。既然我们说的是人为的障碍，那么我就可以问：“谁决定我的行为、生命？我是否能自由地依我选择的方式行事？或者，我是否处于别的控制力量的命令之下？我的行动是不是受父母、学监、牧师、警察的决定？我是不是处于法律制度、资本主义秩序、奴隶主、政府(君主制的、寡头制的和民主制的）的约束之下？我的行动的可能性也许受到限制，但是它们被如何限制？代表我的那些人是谁？他们可以使用的权力有多大？”&lt;/p&gt;
&lt;p&gt;这就是我想要探讨的“自由”的两个核心含义。我认识到它们是不同的，是对两种不同性质的问题的回答；它们虽然同源，但在我看来它们却并不冲突，也就是说对其中一种问题的回答并不必然决定对另一种问题的回答。&lt;/p&gt;
&lt;p&gt;**两种自由都是人类的终极目的，两者都必需受到限制，两种概念在人类历史上都可能被滥用。**消极自由可能被解释成经济的自由放任，据此，矿场主以自由的名义被允许在矿井下摧毁儿童的生命，或者工厂主被允许去摧毁工厂中工人的健康与人格。但是在我看来，那是一种滥用，而不是这个概念对于人类的基本含义。同样，告诉一个穷人说虽然他支付不起，但他完全有自由在一家昂贵的饭店拥有一个房间，这么说无异于嘲弄。但是这种说法也是一种混淆。他的确有在那里租用一间房子的自由，但没有手段使用这种自由。而他之所以没有这种手段，可能是因为一种经济制度阻碍他获得比他现在更多的收入；但这是一种对赚钱的自由的剥夺，而不是对租用房间的自由的剥夺。这听起来好像是一种学究式的区分，但是对于经济自由与政治自由的讨论却是非常关键的。&lt;/p&gt;
&lt;p&gt;从历史上看，**积极自由的观念甚至导致了更加可怕的滥用。谁对我的生命下命令？我。真的是我吗？无知、混乱、处处受无法控制的激情与的名义。**这正是积极自由观念常常陷入的最大的滥用:不管专制来源于……领袖、国王、法西斯独裁者，还是来自极权式的教会或阶级或国家的主人，它都试图在人性中寻找被禁锢的“真实”自我，并“解放”它，以便这个自我能够达到那些发号施令者的水平。&lt;/p&gt;
&lt;p&gt;这就回到了一种天真的观念：每一个问题都只有一个正确的答案：如果我知道这个正确的答案而你不同意我，那是因为你无知；如果你知道真理，你必然会相信我所相信的；如果你想不服从我，只能说明你是错误的，因为那个真理并没有像显示给我那样显示给你。这种说法替人类历史上一些最令人发指的压制与奴役形式辩护；而且这的确是积极自由观念的最危险、最凶残的含义，特别是在我们这个世纪。&lt;/p&gt;
&lt;p&gt;从那以后，两种自由观念及它们的被歪曲的形式，在西方以及其他地方的大学里，成为激烈的讨论与争论的中心，今天仍然如此。&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET 6 Preview 5 正式发布，并且Visual Studio 2022 Preview 1也发布了</title>
      <link>https://dodoro.chouxiangpai.com/archives/1461/</link>
      <pubDate>Fri, 18 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1461/</guid>
      <description>&lt;p&gt;微软具有里程碑意义的Visual Studio 2022 Preview 1已经正式发布，虽然没有增加新功能，但是这个IDE重点支持64位。与此同时，微软也发布了.NET 6 Preview 5。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://devblogs.microsoft.com/visualstudio/visual-studio-2022-preview-1-now-available/&#34;&gt;https://devblogs.microsoft.com/visualstudio/visual-studio-2022-preview-1-now-available/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-5/&#34;&gt;https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-5/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://devblogs.microsoft.com/dotnet/announcing-net-maui-preview-5/&#34;&gt;https://devblogs.microsoft.com/dotnet/announcing-net-maui-preview-5/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;微软在曾经在4月份在官方的博客文章种宣布了VS2022将会第一次支持64位，不再局限于4GB的内存限制，通过Windows上的64位的Visual Studio，你可以打开，编辑、运行和调试非常复杂的解决方案。&lt;/p&gt;
&lt;p&gt;微软通过一个Gif视频展示64位的优势，最新版本的Visual Studio 2022可以轻松打开包含约1600个项目和大约300000个文件的解决方案。&lt;/p&gt;
&lt;p&gt;微软在6月17日的文章 Visual Studio 2022 Preview 1 now available!，关键目标是测试和调整新 64 位平台的可扩展性！这是一个巨大的变化，影响到IDE的每一个部分。微软呼吁早期采用者开发者帮助开展这项工作，称&amp;quot;我们需要您的反馈&amp;quot;。VS 2019 功能不包括在预览 1：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Web实时预览
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;仪器分析仪&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Azure &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;云服务项目支持&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;T-SQL &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;调试器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Web负载测试和测试控制器/&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;测试代理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Azure数据湖
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Coded界面测试
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DotFuscator
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;内置&lt;/span&gt; IDE &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;集成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;智能提示的代码查找并替换&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;64 位版本Visual Studio 2022 Preview 1 三个版本的早期版本（社区、专业版和企业版） ，现在已经可以下载了：&lt;a href=&#34;https://visualstudio.microsoft.com/zh-hans/vs/preview/vs2022/&#34;&gt;https://visualstudio.microsoft.com/zh-hans/vs/preview/vs2022/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于自然景观和人文景观</title>
      <link>https://dodoro.chouxiangpai.com/archives/1433/</link>
      <pubDate>Wed, 09 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1433/</guid>
      <description>&lt;p&gt;今天读到王小波的文章《自然景观和人文景观》，他写出了我对国内的乡村一直很想说的话，我认为他的这篇文章到现在都还没有过时，从我自己的村子到北京这座城市，现在还是如此。&lt;/p&gt;
&lt;h2 id=&#34;王小波自然景观和人文景观&#34;&gt;王小波：自然景观和人文景观&lt;/h2&gt;
&lt;p&gt;我到过欧美的很多城市，美国的城市乏善可陈，欧洲的城市则很耐看。比方说，走到罗马城的街头，古罗马时期的竞技场和中世纪的城堡都在视野之内。这就使你感到置身于几十个世纪的历史之中。走在巴黎的市巾心，周围是漂亮的石头楼房，你可以在铁栅栏上看到几个世纪之前手工打出的精美花饰。英格兰的小城镇保留着过去的古朴风貌，在厚厚的草顶下面，悬挂出木制的啤酒馆招牌。我记忆中最漂亮的城市是德国的海德堡，有一座优美的石桥夹在内卡河上，河对岸的山上是海德堡选帝侯的旧官堡。可以与之相比的有英国的剑桥，大学设在五六百年前的石头楼房里，包围在常春藤的绿荫里——这种校舍不是任何现代建筑可比。比利时的小城市和荷兰的城市，都有无与伦比的优美之处，这种优美之处就是历史。相比之下，美国的城市很是庸俗，塞满了乱糟糟的现代建筑。他们自己都不爱看，到了夏天就跑到欧洲去度假——历史这种东西，可不是想有就能有的呀。&lt;/p&gt;
&lt;p&gt;有位意大利的朋友告诉我说，除了脏点、乱—点，北京城很像一座美国的城市。我想了一下，觉得这是实情——北京城里到处是现代建筑，缺少历史感。在我小的时候就不是这样的，那时的北京的确有点与众不同的风格。举个例子来说，我小时候作在北京的郑工府里，那是一座优美的古典庭院，眼看着它就变得面门全非、塞满了四四方方的楼房，丑得要死。郑王府的遭遇就是整个北京城的缩影。顺便说一句，英国的牛津城里，所有的旧房子，屋主有翻修内部之权，但外观一毫不准动，所以那座城市保持着优美的旧貌。所有的人文景观属于我们只有一次。假如你把它扒掉，再重建起来就不是那么回事了。&lt;/p&gt;
&lt;p&gt;这位意大利朋友还告诉我说，他去过山海关边的老龙头，看到那些新建的灰砖城楼，觉得很难看。我小时候见过北京城的城楼，还在城楼边玩耍过，所以我不得不同意他的意见。真古迹使人留恋之处，在于它历经沧桑直至如今，在它身边生活，你才会觉得历史至今还活着。要是可以随意翻盖，那就会把历史当作可以随意捏造的东西，一个人尽可夫的娼妇；这两种感觉真是大不相同。这位意大利朋友还说，意大利的古迹可以使他感到自己不是属于一代人，而是属于一族人，从亘古到如今。他觉得这样活着比较好，他的这些想法当然是有道理的，不过，现在我们谈这些已经有点晚了。&lt;/p&gt;
&lt;p&gt;谈过了城市和人文景观。也该谈谈乡村和自然景观——谈这些还不晚。房龙曾说，世界上最美丽的乡村就在奥地利的萨尔兹堡附近。那地方我也去过，满山枞木林，农舍就在林中。铺了碎石的小径一尘不染……还有荷兰的牧场，弥漫精心修整的人工美。牧场中央仓放干草的小亭子，油漆得整整齐齐，像是园林工人干的活；因为要把亭子造成那个样于，不但要手艺巧，还要懂什么是好看。让别人看到自己住的地方是—种美丽的自然景观，这也是一种作人的态度。谈论这些域外的风景不是本文土旨，主旨当然还是讨论中国。我前半辈子走南闯北，去过国内不少地方，就我所见，贫困的小山村，只要不是穷到过不下去，多少还有点样。到了靠近城市的地方，人也算有了点钱，才开始难看。家家户户房子宽敞了，院墙也高了，但是样子恶俗，而且门前渐渐和猪窝狗圈相类似。到了城市的近郊，到处是乱倒的垃圾。进到城里以后，街上是干净了，那是因为有清洁工在扫。只要你往楼道里看一看，阳台上看一眼，就会发现，这里住的人比近郊区的人还要邋遢得多。总的来说，我以为现在到处都是既不珍惜人文景观、也不保护自然景观的邋遢娘们邋遢汉。这种人要吃，要喝，要自己住得舒服，别的一概不管。&lt;/p&gt;
&lt;p&gt;我的这位意大利朋友是个汉学家。他说，中国入只重写成文字的历史，不重保存环境中的历史。这话从—个意大利人嘴里说出来，叫人无法辩驳。人家对待环境的态度比我们强得多。我以为，每个人都有—部分活在自己所在的环境中，这一部分是不会死的，它会保存在那里，让后世的人看到。住海德堡，在剑桥，在萨尔兹堡，你看到的不仅是现世的人，还有他们的先人，因为世世代代的维护，那地方才会像现在这样漂亮。和青年朋友谈这些，大概还有点用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET 6 Preview 4中.NET Core的更新内容</title>
      <link>https://dodoro.chouxiangpai.com/archives/1413/</link>
      <pubDate>Tue, 08 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1413/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;原文：&lt;/span&gt;bit.ly/&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;wFqDy9
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;作者：&lt;/span&gt;Daniel
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;译者：王亮&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;.NET 6 预览版 4 现已发布，其中包括对 ASP.NET Core 的许多新改进。&lt;/p&gt;
&lt;p&gt;下面是此次预览版中 ASP.NET Core 的更新内容：&lt;/p&gt;
&lt;h2 id=&#34;1-开始使用&#34;&gt;1 开始使用&lt;/h2&gt;
&lt;p&gt;要开始使用 .NET 6 Preview 4 中的 ASP.NET Core，请安装 .NET 6 SDK[1]。&lt;/p&gt;
&lt;p&gt;如果你在 Windows 上使用 Visual Studio，我们建议安装 Visual Studio 2019 16.11 的最新预览版。如果你在 macOS 上，我们建议安装 Visual Studio 2019 for Mac 8.10 的最新预览版。&lt;/p&gt;
&lt;h2 id=&#34;2-升级一个现有的项目&#34;&gt;2 升级一个现有的项目&lt;/h2&gt;
&lt;p&gt;要将一个现有的 ASP.NET Core 应用程序从 .NET 6 Preview 3 升级到.NET 6 Preview 4。&lt;/p&gt;
&lt;p&gt;将所有 Microsoft.AspNetCore. &lt;em&gt;引用包更新为 6.0.0-preview.4.&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;更新所有 Microsoft.Extensions. &lt;em&gt;引用包更新为 6.0.0-preview.4.&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;请参阅 .NET 6 中 ASP.NET Core 的完整中断变化列表[2]。&lt;/p&gt;</description>
    </item>
    <item>
      <title>重读王小波</title>
      <link>https://dodoro.chouxiangpai.com/archives/1410/</link>
      <pubDate>Mon, 07 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1410/</guid>
      <description>&lt;p&gt;这几日开始重读王小波的作品，打算从《沉默的大多数》到《黄金时代》、《白银时代》、《青铜时代》和《革命时期的爱情》，然后把王小波全集剩下的文章都读一遍。前面这四本书是我在大学的时候读过的图书，那时候大一宿舍有一位江苏的舍友，他姐姐是南京师范大学的中文系学生，极力推荐他读王小波，我受他的影响读完了这几本书。那时候读王小波，觉得很奇特，但我觉得自己并没有完全读懂他。虽然如此，我相信王小波对我的影响很大，这种影响是不知不觉中的影响，那时候中文互联网还很自由，我们都还可以使用谷歌的手气不错，那时候真的是中国互联网的黄金时代。&lt;/p&gt;
&lt;p&gt;这次我放弃那种囫囵吞枣、一目十行的阅读方法，而是细致阅读，特别是阅读《沉默的大多数》的时候。这两天读到《中国知识分子与中古遗风》里面关于知识分子最害怕的事情，王小波真是太睿智了，这段话至今依然令人惊叹：&lt;/p&gt;
&lt;p&gt;“我也有一个问题，是这样的：什么是知识分子最害怕的事？而且我也有答案，自以为经得起全球知识分子的质疑，那就是：知识分子最怕活在不理智的年代。所谓不理智的年代，就是伽利略低头认罪，承认地球不转的年代，也是拉瓦锡上断头台的年代；是茨威格服毒自杀的年代，也是老舍跳进太平湖的年代。&lt;/p&gt;
&lt;p&gt;“我认为，知识分子的长处只是会以理服人，假如不讲理，他就没有长处，只有短处，活着没意思，不如死掉。丹麦王子哈姆雷特说：活着呢，还是死去，这是问题。但知识分子赶上这么个年代，死活不是问题。最大的问题是：这个倒霉的年头儿何时过去。假如能赶上这年头过去，就活着；赶不上了就犯不着再拖下去。&lt;/p&gt;
&lt;p&gt;“老舍先生自杀的年代，我已经懂事了，认识不少知识分子。虽然我当时是个孩子，但嘴很严，所以也是他们谈话的对象。就我所知，他们最关心的正是赶得上赶不上的问题。在那年头死掉的知识分子，只要不是被杀，准是觉得赶不上好年头了。而活下来的准觉得自己还能赶上——当然，被改造好了、不再是知识分子的人不在此列。因此我对自己的答案颇有信心，敢拿这事和天下人打赌，知识分子最大的不幸，就是这种不理智。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>隐形马尔可夫模型(HMM)</title>
      <link>https://dodoro.chouxiangpai.com/archives/1383/</link>
      <pubDate>Mon, 07 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1383/</guid>
      <description>&lt;h2 id=&#34;什么是熵entropy&#34;&gt;什么是熵(Entropy)&lt;/h2&gt;
&lt;p&gt;简单来说，熵是表示物质系统状态的一种度量，用它老表征系统的无序程度。熵越大，系统越无序，意味着系统结构和运动的不确定和无规则；反之，，熵越小，系统越有序，意味着具有确定和有规则的运动状态。熵的中文意思是热量被温度除的商。负熵是物质系统有序化，组织化，复杂化状态的一种度量。&lt;/p&gt;
&lt;p&gt;熵最早来原于物理学. 德国物理学家鲁道夫·克劳修斯首次提出熵的概念，用来表示任何一种能量在空间中分布的均匀程度，能量分布得越均匀，熵就越大。&lt;/p&gt;
&lt;p&gt;一滴墨水滴在清水中，部成了一杯淡蓝色溶液热水晾在空气中，热量会传到空气中，最后使得温度一致更多的一些生活中的例子:&lt;/p&gt;
&lt;p&gt;熵力的一个例子是耳机线，我们将耳机线整理好放进口袋，下次再拿出来已经乱了。让耳机线乱掉的看不见的“力”就是熵力，耳机线喜欢变成更混乱。熵力另一个具体的例子是弹性力。一根弹簧的力，就是熵力。 胡克定律其实也是一种熵力的表现。万有引力也是熵力的一种(热烈讨论的话题)。浑水澄清&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1383/images/image-1623046525866.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;于是从微观看，熵就表现了这个系统所处状态的不确定性程度。香农，描述一个信息系统的时候就借用了熵的概念，这里熵表示的是这个信息系统的平均信息量(平均不确定程度)。&lt;/p&gt;
&lt;h2 id=&#34;最大熵模型&#34;&gt;最大熵模型&lt;/h2&gt;
&lt;p&gt;我们在投资时常常讲不要把所有的鸡蛋放在一个篮子里，这样可以降低风险。在信息处理中，这个原理同样适用。在数学上，这个原理称为最大熵原理(the maximum entropy principle)。&lt;/p&gt;
&lt;p&gt;让我们看一个拼音转汉字的简单的例子。假如输入的拼音是&amp;quot;wang-xiao-bo&amp;quot;，利用语言模型，根据有限的上下文(比如前两个词)，我们能给出两个最常见的名字“王小波”和“王晓波 ”。至于要唯一确定是哪个名字就难了，即使利用较长的上下文也做不到。当然，我们知道如果通篇文章是介绍文学的，作家王小波的可能性就较大；而在讨论两岸关系时，台湾学者王晓波的可能性会较大。在上面的例子中，我们只需要综合两类不同的信息，即主题信息和上下文信息。虽然有不少凑合的办法，比如：分成成千上万种的不同的主题单独处理，或者对每种信息的作用加权平均等等，但都不能准确而圆满地解决问题，这样好比以前我们谈到的行星运动模型中的小圆套大圆打补丁的方法。在很多应用中，我们需要综合几十甚至上百种不同的信息，这种小圆套大圆的方法显然行不通。&lt;/p&gt;
&lt;p&gt;数学上最漂亮的办法是最大熵(maximum entropy)模型，它相当于行星运动的椭圆模型。“最大熵”这个名词听起来很深奥，但是它的原理很简单，我们每天都在用。说白了，就是要保留全部的不确定性，将风险降到最小。&lt;/p&gt;
&lt;p&gt;回到我们刚才谈到的拼音转汉字的例子，我们已知两种信息，第一，根据语言模型，wangxiao-bo可以被转换成王晓波和王小波；第二，根据主题，王小波是作家，《黄金时代》的作者等等，而王晓波是台湾研究两岸关系的学者。因此，我们就可以建立一个最大熵模型，同时满足这两种信息。现在的问题是，这样一个模型是否存在。匈牙利著名数学家、信息论最高奖香农奖得主希萨（Csiszar）证明，对任何一组不自相矛盾的信息，这个最大熵模型不仅存在，而且是唯一的。而且它们都有同一个非常简单的形式 &amp;ndash; 指数函数。下面公式是根据上下文（前两个词）和主题预测下一个词的最大熵模型，其中 w3 是要预测的词（王晓波或者王小波）w1 和 w2 是它的前两个字（比如说它们分别是“出版”，和“”），也就是其上下文的一个大致估计，subject 表示主题。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1383/images/image-1623046556654.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;我们看到，在上面的公式中，有几个参数lambda和Z，他们需要通过观测数据训练出来。最大熵模型在形式上是最漂亮的统计模型，而在实现上是最复杂的模型之一。&lt;/p&gt;
&lt;p&gt;我们上次谈到用最大熵模型可以将各种信息综合在一起。我们留下一个问题没有回答，就是如何构造最大熵模型。我们已经所有的最大熵模型都是指数函数的形式，现在只需要确定指数函数的参数就可以了，这个过程称为模型的训练。&lt;/p&gt;
&lt;p&gt;最原始的最大熵模型的训练方法是一种称为通用迭代算法 GIS(generalized iterative scaling) 的迭代 算法。GIS 的原理并不复杂，大致可以概括为以下几个步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;假定第零次迭代的初始模型为等概率的均匀分布。&lt;/li&gt;
&lt;li&gt;用第 N 次迭代的模型来估算每种信息特征在训练数据中的分布，如果超过了实际的，就把相应的模型参数变小；否则，将它们便大。&lt;/li&gt;
&lt;li&gt;重复步骤 2 直到收敛。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;GIS 最早是由 Darroch 和 Ratcliff 在七十年代提出的。但是，这两人没有能对这种算法的物理含义进行很好地解释。后来是由数学家希萨（Csiszar)解释清楚的，因此，人们在谈到这个算法时，总是同时引用 Darroch 和Ratcliff 以及希萨的两篇论文。GIS 算法每次迭代的时间都很长，需要迭代很多次才能收敛，而且不太稳定，即使在 64 位计算机上都会出现溢出。因此，在实际应用中很少有人真正使用 GIS。大家只是通过它来了解最大熵模型的算法。&lt;/p&gt;
&lt;p&gt;八十年代，很有天才的孪生兄弟的达拉皮垂(Della Pietra)在 IBM 对 GIS 算法进行了两方面的改进，提出了改进迭代算法 IIS（improved iterative scaling）。这使得最大熵模型的训练时间缩短了一到两个数量级。这样最大熵模型才有可能变得实用。即使如此，在当时也只有 IBM 有条件是用最大熵模型。&lt;/p&gt;
&lt;p&gt;由于最大熵模型在数学上十分完美，对科学家们有很大的诱惑力，因此不少研究者试图把自己的问题用一个类似最大熵的近似模型去套。谁知这一近似，最大熵模型就变得不完美了，结果可想而知，比打补丁的凑合的方法也好不了多少。于是，不少热心人又放弃了这种方法。第一个在实际信息处理应用中验证了最大熵模型的优势的，是宾夕法尼亚大学马库斯的另一个高徒原 IBM 现微软的研究员拉纳帕提(Adwait Ratnaparkhi)。拉纳帕提的聪明之处在于他没有对最大熵模型进行近似，而是找到了几个最适合用最大熵模型、而计算量相对不太大的自然语言处理问题，比如词性标注和句法分析。拉纳帕提成功地将上下文信息、词性（名词、动词和形容词等）、句子成分（主谓宾）通过最大熵模型结合起来，做出了当时世界上最好的词性标识系统和句法分析器。拉纳帕提的论文发表后让人们耳目一新。拉纳帕提的词性标注系统，至今仍然是使用单一方法最好的系统。科学家们从拉纳帕提的成就中，又看到了用最大熵模型解决复杂的文字信息处理的希望。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]龙应台的《目送》</title>
      <link>https://dodoro.chouxiangpai.com/archives/1511/</link>
      <pubDate>Thu, 03 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1511/</guid>
      <description>&lt;p&gt;华安上小学第一天，我和他手牵着手，穿过好几条街，到维多利亚小学。九月初，家家户户院子里的苹果和梨树都缀满了拳头大小的果子，枝丫因为负重而沉沉下垂，越出了树篱，钩到过路行人的头发。&lt;/p&gt;
&lt;p&gt;很多很多的孩子，在操场上等候上课的第一声铃响。小小的手，圈在爸爸的、妈妈的手心里，怯怯的眼神，打量着周遭。他们是幼儿园的毕业生，但是他们还不知道一个定律：一件事情的毕业，永远是另一件事情的开启。&lt;/p&gt;
&lt;p&gt;铃声一响，顿时人影错杂，奔往不同方向，但是在那么多穿梭纷乱的人群里，我无比清楚地看着自己孩子的背影──就好像在一百个婴儿同时哭声大作时，你仍旧能够准确听出自己那一个的位置。华安背着一个五颜六色的书包往前走，但是他不断地回头；好像穿越一条无边无际的时空长河，他的视线和我凝望的眼光隔空交会。&lt;/p&gt;
&lt;p&gt;我看着他瘦小的背影消失在门里。&lt;/p&gt;
&lt;p&gt;十六岁，他到美国做交换生一年。我送他到机场。告别时，照例拥抱，我的头只能贴到他的胸口，好像抱住了长颈鹿的脚。他很明显地在勉强忍受母亲的深情。&lt;/p&gt;
&lt;p&gt;他在长长的行列里，等候护照检验；我就站在外面，用眼睛跟着他的背影一寸一寸往前挪。终于轮到他，在海关窗口停留片刻，然后拿回护照，闪入一扇门，倏忽不见。&lt;/p&gt;
&lt;p&gt;我一直在等候，等候他消失前的回头一瞥。但是他没有，一次都没有。&lt;/p&gt;
&lt;p&gt;现在他二十一岁，上的大学，正好是我教课的大学。但即使是同路，他也不愿搭我的车。即使同车，他戴上耳机──只有一个人能听的音乐，是一扇紧闭的门。有时他在对街等候公交车，我从高楼的窗口往下看：一个高高瘦瘦的青年，眼睛望向灰色的海；我只能想象，他的内在世界和我的一样波涛深邃，但是，我进不去。一会儿公交车来了，挡住了他的身影。车子开走，一条空荡荡的街，只立着一只邮筒。&lt;/p&gt;
&lt;p&gt;我慢慢地、慢慢地了解到，所谓父女母子一场，只不过意味着，你和他的缘分就是今生今世不断地在目送他的背影渐行渐远。你站立在小路的这一端，看着他逐渐消失在小路转弯的地方，而且，他用背影默默告诉你：不必追。&lt;/p&gt;
&lt;p&gt;我慢慢地、慢慢地意识到，我的落寞，仿佛和另一个背影有关。&lt;/p&gt;
&lt;p&gt;博士学位读完之后，我回台湾教书。到大学报到第一天，父亲用他那辆运送饲料的廉价小货车长途送我。到了我才发觉，他没开到大学正门口，而是停在侧门的窄巷边。卸下行李之后，他爬回车内，准备回去，明明启动了引擎，却又摇下车窗，头伸出来说：“女儿，爸爸觉得很对不起你，这种车子实在不是送大学教授的车子。”&lt;/p&gt;
&lt;p&gt;我看着他的小货车小心地倒车，然后“噗噗”驶出巷口，留下一团黑烟。直到车子转弯看不见了，我还站在那里，一口皮箱旁。&lt;/p&gt;
&lt;p&gt;每个礼拜到医院去看他，是十几年后的时光了。推着他的轮椅散步，他的头低垂到胸口。有一次，发现排泄物淋满了他的裤腿，我蹲下来用自己的手帕帮他擦拭，裙子也沾上了粪便，但是我必须就这样赶回台北上班。护士接过他的轮椅，我拎起皮包，看着轮椅的背影，在自动玻璃门前稍停，然后没入门后。&lt;/p&gt;
&lt;p&gt;我总是在暮色沉沉中奔向机场。&lt;/p&gt;
&lt;p&gt;火葬场的炉门前，棺木是一只巨大而沉重的抽屉，缓缓往前滑行。没有想到可以站得那么近，距离炉门也不过五米。雨丝被风吹斜，飘进长廊内。我掠开雨湿了前额的头发，深深、深深地凝望，希望记得这最后一次的目送。&lt;/p&gt;
&lt;p&gt;我慢慢地、慢慢地了解到，所谓父女母子一场，只不过意味着，你和他的缘分就是今生今世不断地在目送他的背影渐行渐远。你站立在小路的这一端，看着他逐渐消失在小路转弯的地方，而且，他用背影默默告诉你：不必追。&lt;/p&gt;</description>
    </item>
    <item>
      <title>社区正式发布.NET 6 Preview4</title>
      <link>https://dodoro.chouxiangpai.com/archives/1267/</link>
      <pubDate>Wed, 26 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1267/</guid>
      <description>&lt;p&gt;时间过得真快，.NET 5我还没有来得及研究，眼看.NET 6的正式版本马上就要来了，我一直期待这个版本，因为这是LTS版本，我们团队会迁移到这个版本上来。&lt;/p&gt;
&lt;p&gt;社区一直在不断推进.NET 6的可用性，Build 2021大会发布了Preview4，这个版本更新很大，可能与最终的版本相差不大，，正式发布RC版本是在8月份，正式发布RTM版本是在11月 ，到时后.NET正式完成.NET Framwork和.NET Core以及Mono的功能统一，还是非常值得期待的。&lt;/p&gt;
&lt;p&gt;新产品功能：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;System.Text.Json support &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; IAsyncEnumerable
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;System.Text.Json: Writable DOM Feature
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Microsoft.Extensions.Logging compile-time source generator
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;System.Linq enhancements
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Significantly improved FileStream performance &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; Windows
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Enhanced Date, Time and Time Zone support
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CodeGen
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.NET Diagnostics: EventPipe &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; Mono and Improved EventPipe Performance
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IL trimming
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Single-file publishing
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CLI install of .NET &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; SDK Optional Workloads
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Built-&lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; SDK version checking
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CLI Templates (dotnet &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;另外，还有.NET MAUI或多平台应用UI ：允许开发人员构建适用于Windows、MacOS、ios 和android的应用程序，共享单一代码库和模板。 ASP.NET Blazor混合应用程序：帮助开发人员构建基于Web的跨平台桌面体验，从而利用本机设备功能。 对ARM的加强支持：包括 Silicon 和ARM64支持。&lt;/p&gt;</description>
    </item>
    <item>
      <title>马尔可夫链(Markov Chain)</title>
      <link>https://dodoro.chouxiangpai.com/archives/1313/</link>
      <pubDate>Mon, 24 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1313/</guid>
      <description>&lt;p&gt;马尔可夫链是一种非常重要的随机过程模型，在排队论、预测等方面有非常多的应用，当年我考数学系的时候就是冲着学校有一位马尔可夫领域的顶级数学家，不过后来自己越走越偏，也没有来得及进修这个算法。&lt;/p&gt;
&lt;h2 id=&#34;随机过程&#34;&gt;随机过程&lt;/h2&gt;
&lt;p&gt;讲马尔可夫链不得不提到随机过程。顾名思义，它其实就是个过程，比如今天下雨，那么明天下不下雨呢？后天下不下雨呢？从今天下雨到明天不下雨再到后天下雨，这就是个过程。那么怎么预测N天后到底下不下雨呢？这其实是可以利用公式进行计算的，随机过程就是这样一个工具，把整个过程进行量化处理，用公式就可以推导出来N天后的天气状况，下雨的概率是多少，不下雨的概率是多少。&lt;/p&gt;
&lt;p&gt;说白了，随机过程就是一些统计模型，利用这些统计模型可以对自然界的一些事物进行预测和处理，比如天气预报，比如股票，比如市场分析，比如人工智能。它的应用还真是多了去了。&lt;/p&gt;
&lt;h2 id=&#34;马尔可夫链-markov-chain&#34;&gt;马尔可夫链 （Markov Chain）&lt;/h2&gt;
&lt;p&gt;马尔可夫链 （Markov Chain）是随机过程中的一种过程，到底是哪一种过程呢？好像一两句话也说不清楚，还是先看个例子吧。&lt;/p&gt;
&lt;p&gt;比如一个人，每天中午12点的标配，仨状态：吃，玩，睡。这就是传说中的状态分布。&lt;/p&gt;
&lt;p&gt;你想知道他n天后中午12点的状态么？是在吃，还是在玩，还是在睡？这些状态发生的概率分别都是多少？&lt;/p&gt;
&lt;p&gt;先看个假设，他每个状态的转移都是有概率的，比如今天玩，明天睡的概率是几，今天玩，明天也玩的概率是几几，看图更清楚一点。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1313/images/image-1622016096697.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;这个矩阵就是转移概率矩阵P，并且它是保持不变的，就是说第一天到第二天的转移概率矩阵跟第二天到第三天的转移概率矩阵是一样的。（这个叫时齐，不细说了，有兴趣的同学自行百度）。&lt;/p&gt;
&lt;p&gt;有了这个矩阵，再加上已知的第一天的状态分布，就可以计算出第N天的状态分布了。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1313/images/image-1622016121531.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;S1 是4月1号中午12点的的状态分布矩阵 [0.6, 0.2, 0.2]，里面的数字分别代表吃的概率，玩的概率，睡的概率。&lt;/p&gt;
&lt;p&gt;那么&lt;/p&gt;
&lt;p&gt;4月2号的状态分布矩阵 S2 = S1 * P (俩矩阵相乘)。&lt;/p&gt;
&lt;p&gt;4月3号的状态分布矩阵 S3 = S2 * P (跟S1无关，只跟S2有关)。&lt;/p&gt;
&lt;p&gt;4月4号的状态分布矩阵 S4 = S3 * P (跟S1，S2无关，只跟S3有关)。&lt;/p&gt;
&lt;p&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;4月n号的状态分布矩阵 Sn = Sn-1 * P (只跟它前面一个状态Sn-1有关)。&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;
&lt;p&gt;马尔可夫链就是这样一个任性的过程，它将来的状态分布只取决于现在，跟过去无关！就把下面这幅图想象成是一个马尔可夫链吧。实际上就是一个随机变量随时间按照Markov性进行变化的过程。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1313/images/image-1622016158543.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>自由多元文化主义</title>
      <link>https://dodoro.chouxiangpai.com/archives/1269/</link>
      <pubDate>Sun, 23 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1269/</guid>
      <description>&lt;p&gt;去年一整年在阅读政治哲学方面的图书，前段时间读完金里卡先生的《当代政治哲学》，开始对自由多元文化注意产生浓厚的兴趣，“多元文化主义的自由主义”在上世纪末以来，一直是欧美倡导的价值观，特别是澳大利亚、新西兰和加拿大，这三个主要的移民国家几乎把自由多元文化注意当成本国的主流价值观。&lt;/p&gt;
&lt;p&gt;这段时间先后阅读了十几篇论文，包括周濂老师的《如果多元文化主义是答案，它的问题是什么》、《澳大利亚多元文化主义政策的形成》、《多元文化主义的兴衰？关于多样性社会中接纳和包容的新争论》，这是我的文献综述结果：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1269/images/image-1622008208188.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;我觉得自己下一步可以集中重读罗尔斯和金里卡，做更深入的思考，目前我的初步感觉是：自由多元主义是非常美好的理想，而且也有实际操作的可能，现实中的澳大利亚、加拿大和新西兰做得也非常不错。即使如此，我仍然相信在宪政制度下要真正平稳地运行自由多元主义，其实需要更高的社会成本和更高的公民素质。&lt;/p&gt;
&lt;p&gt;更进一步，**我甚至认为自由多元文化主义有可能最适合的运用是：已经能保障基本自由和人权、并且收入水平达到发达国家水平的移民国家。**这里我要说明：如果一个国家已经建立起了自由多元文化主义，那么哪怕物质收入水平下降到发展中国家，也适用自由多元文化主义这一价值体系。对于加拿大、澳大利亚和新西兰这几个著名的移民国家，如果轻易放弃自由多元主义，那么将是莫大的损失和悲哀。&lt;/p&gt;
&lt;p&gt;对于美国和欧洲来说，践行自由多元主义(这里指让其成为社会主流)，可能会面临很多困难和阻碍，但是我觉得这不是放弃理想的理由。&lt;/p&gt;</description>
    </item>
    <item>
      <title>贝叶斯算法-垃圾邮件过滤器</title>
      <link>https://dodoro.chouxiangpai.com/archives/1307/</link>
      <pubDate>Thu, 20 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1307/</guid>
      <description>&lt;p&gt;垃圾邮件是一种令人头痛的顽症，困扰着所有的互联网用户。&lt;/p&gt;
&lt;p&gt;正确识别垃圾邮件的技术难度非常大。传统的垃圾邮件过滤方法，主要有&amp;quot;关键词法&amp;quot;和&amp;quot;校验码法&amp;quot;等。前者的过滤依据是特定的词语；后者则是计算邮件文本的校验码，再与已知的垃圾邮件进行对比。它们的识别效果都不理想，而且很容易规避。&lt;/p&gt;
&lt;p&gt;2002年，Paul Graham提出使用&amp;quot;贝叶斯推断&amp;quot;过滤垃圾邮件。他说，这样做的效果，好得不可思议。1000封垃圾邮件可以过滤掉995封，且没有一个误判。&lt;/p&gt;
&lt;p&gt;另外，这种过滤器还具有自我学习的功能，会根据新收到的邮件，不断调整。收到的垃圾邮件越多，它的准确率就越高。&lt;/p&gt;
&lt;p&gt;贝叶斯过滤器是一种统计学过滤器，建立在已有的统计结果之上。所以，我们必须预先提供两组已经识别好的邮件，一组是正常邮件，另一组是垃圾邮件。&lt;/p&gt;
&lt;p&gt;我们用这两组邮件，对过滤器进行&amp;quot;训练&amp;quot;。这两组邮件的规模越大，训练效果就越好。Paul Graham使用的邮件规模，是正常邮件和垃圾邮件各4000封。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;训练&amp;quot;过程很简单。首先，解析所有邮件，提取每一个词。然后，计算每个词语在正常邮件和垃圾邮件中的出现频率。比如，我们假定&amp;quot;sex&amp;quot;这个词，在4000封垃圾邮件中，有200封包含这个词，那么它的出现频率就是5%；而在4000封正常邮件中，只有2封包含这个词，那么出现频率就是0.05%。（【注释】如果某个词只出现在垃圾邮件中，Paul Graham就假定，它在正常邮件的出现频率是1%，反之亦然。这样做是为了避免概率为0。随着邮件数量的增加，计算结果会自动调整。）&lt;/p&gt;
&lt;p&gt;有了这个初步的统计结果，过滤器就可以投入使用了。&lt;/p&gt;
&lt;p&gt;现在，我们收到了一封新邮件。在未经统计分析之前，我们假定它是垃圾邮件的概率为50%。（【注释】有研究表明，用户收到的电子邮件中，80%是垃圾邮件。但是，这里仍然假定垃圾邮件的&amp;quot;先验概率&amp;quot;为50%。）&lt;/p&gt;
&lt;p&gt;我们用S表示垃圾邮件（spam），H表示正常邮件（healthy）。因此，P(S)和P(H)的先验概率，都是50%。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1307/images/image-1622010416249.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;然后，对这封邮件进行解析，发现其中包含了sex这个词，请问这封邮件属于垃圾邮件的概率有多高？&lt;/p&gt;
&lt;p&gt;我们用W表示&amp;quot;sex&amp;quot;这个词，那么问题就变成了如何计算P(S|W)的值，即在某个词语（W）已经存在的条件下，垃圾邮件（S）的概率有多大。&lt;/p&gt;
&lt;p&gt;根据条件概率公式，马上可以写出&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1307/images/image-1622010429922.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;公式中，P(W|S)和P(W|H)的含义是，这个词语在垃圾邮件和正常邮件中，分别出现的概率。这两个值可以从历史资料库中得到，对sex这个词来说，上文假定它们分别等于5%和0.05%。另外，P(S)和P(H)的值，前面说过都等于50%。所以，马上可以计算P(S|W)的值：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1307/images/image-1622010437451.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;因此，这封新邮件是垃圾邮件的概率等于99%。这说明，sex这个词的推断能力很强，将50%的&amp;quot;先验概率&amp;quot;一下子提高到了99%的&amp;quot;后验概率&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;做完上面一步，请问我们能否得出结论，这封新邮件就是垃圾邮件？&lt;/p&gt;
&lt;p&gt;回答是不能。因为一封邮件包含很多词语，一些词语（比如sex）说这是垃圾邮件，另一些说这不是。你怎么知道以哪个词为准？&lt;/p&gt;
&lt;p&gt;Paul Graham的做法是，选出这封信中P(S|W)最高的15个词，计算它们的联合概率。（【注释】如果有的词是第一次出现，无法计算P(S|W)，Paul Graham就假定这个值等于0.4。因为垃圾邮件用的往往都是某些固定的词语，所以如果你从来没见过某个词，它多半是一个正常的词。）&lt;/p&gt;
&lt;p&gt;所谓联合概率，就是指在多个事件发生的情况下，另一个事件发生概率有多大。比如，已知W1和W2是两个不同的词语，它们都出现在某封电子邮件之中，那么这封邮件是垃圾邮件的概率，就是联合概率。&lt;/p&gt;
&lt;p&gt;在已知W1和W2的情况下，无非就是两种结果：垃圾邮件（事件E1）或正常邮件（事件E2）。&lt;/p&gt;
&lt;p&gt;其中，W1、W2和垃圾邮件的概率分别如下：&lt;/p&gt;
&lt;p&gt;如果假定所有事件都是独立事件（【注释】严格地说，这个假定不成立，但是这里可以忽略），那么就可以计算P(E1)和P(E2)：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1307/images/image-1622010494857.png&#34;&gt; &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1307/images/image-1622010505585.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;又由于在W1和W2已经发生的情况下，垃圾邮件的概率等于下面的式子：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1307/images/image-1622010518529.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;即&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1307/images/image-1622010528523.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;将P(S)等于0.5代入，得到&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1307/images/image-1622010539045.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;将P(S|W1)记为P1，P(S|W2)记为P2，公式就变成&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1307/images/image-1622010558722.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;这就是联合概率的计算公式。&lt;/p&gt;
&lt;p&gt;将上面的公式扩展到15个词的情况，就得到了最终的概率计算公式：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1307/images/image-1622010570745.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;一封邮件是不是垃圾邮件，就用这个式子进行计算。这时我们还需要一个用于比较的门槛值。Paul Graham的门槛值是0.9，概率大于0.9，表示15个词联合认定，这封邮件有90%以上的可能属于垃圾邮件；概率小于0.9，就表示是正常邮件。&lt;/p&gt;
&lt;p&gt;有了这个公式以后，一封正常的信件即使出现sex这个词，也不会被认定为垃圾邮件了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>贝叶斯算法-医患诊断模型</title>
      <link>https://dodoro.chouxiangpai.com/archives/1305/</link>
      <pubDate>Tue, 18 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1305/</guid>
      <description>&lt;h2 id=&#34;1背景材料及引言&#34;&gt;1、背景材料及引言&lt;/h2&gt;
&lt;p&gt;7岁女孩晓宇（化名）患急性支气管炎,在武汉市儿童医院住院4天，医生为确诊病情，为她抽血化验了32个指标，仅化验费就花费1130元。晓宇的家长质疑：医院如此看病，是过度检查。晓宇的接诊医生李志超说：“晓宇入院时,根据其家长自述病情，我认为孩子的情况有些严重,于是确定了上述化验指标”。该院四内科副主任李医生说：在当时情况下,李志超对患者的病情判断、以及开出的化验指标,都是有道理的。但如果是我接诊，会以自己的经验有针对性地进行化验检查,可能不会一下开出这么多化验指标。该科主任温玟莉主任医师称：一次抽血化验32个指标，是因为李志超当时怀疑孩子得了败血症，这样处理没有问题。但最后的检查结果并不是败血症，这只能说明李志超较年轻，缺乏丰富的临床经验，只有通过全面检查才能确诊。&lt;/p&gt;
&lt;p&gt;在医患关系紧张，看病难、看病贵的现实情况下，我们应如何看待这个颇有争议的案例，医生看病是应该有针对性地开方,还是列出“算法式”的化验指标进行排查，本研究以贝叶斯公式为依据，从中国现行的医疗体制出发,对此类问题进行了有益的探索，以期建立一种定量化的诊断模型。&lt;/p&gt;
&lt;h2 id=&#34;2模型建立&#34;&gt;2、模型建立&lt;/h2&gt;
&lt;p&gt;设“患者有某种病症”为事件A，引起事件A的病因为样本空间Ω。B1，B2，…Bn为Ω的一个分划，即Bi∩Bj=Φ，i≠j,Ｕni=1Bi=Ω，并假定P(Bi)&amp;gt;0。由贝叶斯公式，由某病因引起事件A的概率为：&lt;/p&gt;
&lt;p&gt;P（Bi|A)=P(Bi)P(A|Bi)/n/j=1P(Bj)P(A⌒Bj)(1)&lt;/p&gt;
&lt;p&gt;公式(1)为医生有针对性地确诊提供了参考。&lt;/p&gt;
&lt;p&gt;在疹疗过程中，医生要根据临床经验对各种病因Bi进行权衡。如果误诊，则有可能承担相应的医疗事故风险，相应的误诊概率记为P′(Bi)，并设因可能承担风险而承担的赔偿费用为C′i，患者承担医生针对病因Bi开出的疹疗方案的费用为Ci，于是在一次诊治过程中患者承担的平均费用为：&lt;/p&gt;
&lt;p&gt;E(A)=ni=1P(Bi)Ci(2)&lt;/p&gt;
&lt;p&gt;医生可能承担的平均赔偿金额为：&lt;/p&gt;
&lt;p&gt;E′(A)=ni=1P′(Bi)C′i(3)&lt;/p&gt;
&lt;p&gt;我们称该模型为诊断模型，并以δ1≤E(A)-E′(A)≤δ2为标准来衡量诊断方案的合理性，其中δ1≥0,δ2为某一不是特别大的正数。即患者所承担的平均医疗费用应比医生可能承担的平均赔偿金要多，但两者不应差别太大。&lt;/p&gt;
&lt;h2 id=&#34;3模型检验&#34;&gt;3、模型检验&lt;/h2&gt;
&lt;p&gt;我们以发热和上腹疼痛两个病症的相关数据对该模型进行检验。设原假设为H0：诊断是合理的。备择假设为H1，诊断合理与否需要进一步考查。&lt;/p&gt;
&lt;p&gt;对表1和表2中相关数据的说明：中国2002年9月1日实施的《医疗事故处理条例》(以下简称《条例》)第五十条对赔偿项目和标准的规定与当地上一年度职工平均工资水平紧密挂钩，实行一次性结算。表1和表2中的工资水平参考了2007年2月湖北省第十届人民代表大会上的湖北省政府工作报告中的数据：2006年城镇居民人均可支配收入为9803元。对发热症状中的“非典”及“某种类似非典的突发疾病”所可能带来的医疗事故我们以一级医疗事故中的死亡来处理，赔偿金额按&amp;lt;国家赔偿法&amp;gt;第二十七条的规定，检查费用以一次全身检查所需费用10000元进行计算；对“心肺功能缺陷”所可能带来的医疗事故我们按二级医疗事故处理，赔偿金额取202110，检查费用按心电图20元次，心脏彩超180元次,心肌酶谱60元次，肺检查80元次进行计算，药费以相应检查费用的0.8计算。对上腹疼痛症状中的“胃癌”及“心、膈等器官有病变”可能带来的医疗事故我们按二级医疗事故来处理,赔偿金额取202110，对B3的检查费用以B超40元次，催C120元次，胃镜(无痛)240元次进行计算，药费以相应检查费用的0.8计算，对B4的检查费用以胃镜(无痛)240元次和心脏彩超180元次进行计算，药费以相应检查费用的0.8计算。对两种症状中“其它”原因对患者可能造成的损害我们以《条例》第三十三条(三)的规定进行处理：在现有医学科学技术条件下，发生无法预料或者不能防范的不良后果的，不属于医疗事故。对两种症状中“其它”原因，患者的一次医疗费用我们取城镇居民人均可支配收入的5%，即490元进行计算。所有医疗费用均指一次诊治的检查费和药费之和,不包括后续治疗的费用。检查费用以武汉市某三级甲等医院的相关标准为参考。表1发热症状诊断模型的相关数据注:B1=人体生理功能的正常表现：B4=某种类似非典的突发疾病；B5=心肺功能缺陷。表2上腹疼痛症状诊断模型的相关数据注，B2=胃溃疡、十二指肠溃疡；B4=心、膈等器官有病变。&lt;/p&gt;
&lt;p&gt;设“发热症状”为事件A1，“上腹疼痛症状”为事件A2，由表1和表2的数据计算得(四舍五入精确到元)：&lt;/p&gt;
&lt;p&gt;E（A1）=121，E′（A1）=187165；E（A2）=265，E′（A2）=22232&lt;/p&gt;
&lt;p&gt;我们会发现原假设H0：诊断是合理的，是不成立的。这些数据告诉我们医生这个职业的确是个高风险的职业，在中国建立医疗责任保险制度有着必要性与迫切性。&lt;/p&gt;
&lt;h2 id=&#34;4模型评价&#34;&gt;4、模型评价&lt;/h2&gt;
&lt;p&gt;该模型在合理假设的基础上,对“对症下药”进行量化,对诊疗方案的合理性给出了一个量化的标准，有一定的合理性与临床参考价值。特别是在用数据对模型检验后，证实了医生的确是个高风险的职业，也显示了在中国建立医疗责任保险制度的必要性和紧迫性。但在模型应用过程中还需要注意以下几个方面：①病因的复杂性。病因的复杂性会导致样本空间的分划的个数n比较大，因此需要结合医学规律对样本空间分划进行合理的选择。②患者体质的差别。不同的患者对同类的医疗事故，由于体质的差别可能带来不同程度的损害。③医生临床诊断水平的差异。不同的医生，由于经验等方面的因素，误诊概率可能有较大的差别。④医院的潜规则。有的医院把医生的收入与其给医院的创收挂钩，这样同一病症在不同的医院治疗，诊疗费用会有较大的差别。⑤实际赔偿金的差别。不同地区上一年度人均收入差别较大,加之实际赔偿金还与实际谈判能力有关系，这样就可能导致同类医疗事故在不同地区及不同的患者(或家属)身上，实际赔偿金差别也较大。⑥现行医疗体制对模型的影响。下面对此进行较详细的分析。&lt;/p&gt;
&lt;p&gt;中国现行的医疗事故赔偿责任者只有一个，就是医疗机构，但医疗机构作为理性人，会尽量减少其自身的医疗成本以实现利益的最大化。医疗机构会将其自身受到的损失通过以下三种主要方式进行转移：一是利用价格机制，提高医疗费用，即将损失分散于所有的就医者身上；二是由具体责任人承担风险，即将损失的一部分转移给与事故直接相关的医务人员；三是通过责任保险机制，将损失转移给保险公司。但长期以来，在中国实际上只有第一种和第二种途径在发挥着作用,责任保险机制可以说作用甚微。&lt;/p&gt;
&lt;p&gt;这样,就很容易导致医疗费用上涨，引发医患关系紧张。医学的专业化使得医疗机构和患者之间存在巨大的信息差，医疗机构有动机也有能力通过使患者进行重复或者不必要的检查项目等方法多收费用,弥补自身损失.因此模型作用的发挥,还需要以下几方面的配合：&lt;/p&gt;
&lt;p&gt;①重视医德建设,提高医护人员自身修养。裘法祖院士在文献里有很深刻的认识。&lt;/p&gt;
&lt;p&gt;②加强医患之间的沟通，进行换位思考，让医生理解患者的苦衷，让患者理解诊疗的风险。&lt;/p&gt;
&lt;p&gt;③加强误诊规律的研究。医疗技术的进步从来都是和风险相并存的，从某种程度上说误诊是不可避免的，但作为医护人员要提高生命权保护意识，不断提高自身的临床思维能力诊断能力力争把误诊率降到最低。&lt;/p&gt;
&lt;p&gt;④加强医护人员临床思维能力和临床经验的提高。医学很大程度上是经验学科,医学理论最终还要内化为医护人员的实际诊断能力才能发挥作用。公式(1)为医护人员提高诊断水平提供了一个很好的参考。&lt;/p&gt;
&lt;p&gt;⑤探索适合中国国情的、于患于医均有益的医疗责任保险制度。尤其是在生命意识越来越受到重视的今天，只有切实的降低行医的风险，才能从根本上解决医患关系紧张的现状，实现医患关系的和谐。&lt;/p&gt;</description>
    </item>
    <item>
      <title>贝叶斯算法概述</title>
      <link>https://dodoro.chouxiangpai.com/archives/1277/</link>
      <pubDate>Sun, 16 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1277/</guid>
      <description>&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;
&lt;p&gt;概率论中贝叶斯算法是最基本的一个条件概率算法。学过概率理论的人都知道条件概率的公式：P(AB)=P(A)P(B|A)=P(B)P(A|B)；即事件A和事件B同时发生的概率等于在发生A的条件下B发生的概率乘以A的概率。由条件概率公式推导出贝叶斯公式：P(B|A)=P(A|B)P(B)/P(A)；即,已知P(A|B)，P(A)和P(B)可以计算出P(B|A)。&lt;/p&gt;
&lt;p&gt;假设B是由相互独立的事件组成的概率空间{B1,b2，&amp;hellip;bn}。则P(A)可以用全概率公式展开：P(A)=P （A|B1)P(B1)+P（A|B2)P(B2)+..P（A|Bn)P(Bn)。贝叶斯公式表示成：P(Bi|A)=P(A|Bi)P(Bi)/(P(A|B1)P(B1)+P(A|B2)P(B2)+..P(A|Bn)P(Bn))；常常把P(Bi|A)称作后验概率，而P（A|Bn)P(Bn)为先验概率。而P(Bi)又叫做基础概率。&lt;/p&gt;
&lt;p&gt;贝叶斯公式： &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1277/images/image-1622009791554.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;贝叶斯公式看起来很简单，但是在自然科学领域应用范围及其广泛。同时理论本身蕴含了深刻的思想。&lt;/p&gt;
&lt;h2 id=&#34;贝叶斯概率的历史&#34;&gt;贝叶斯概率的历史&lt;/h2&gt;
&lt;p&gt;贝叶斯理论和贝叶斯概率以托马斯·贝叶斯（1702－1761）命名，他证明了现在称为贝叶斯定理的一个特例。术语贝叶斯却是在1950年左右开始使用，很难说贝叶斯本人是否会支持这个以他命名的概率非常广义的解释。拉普拉斯证明了贝叶斯定理的一个更普遍的版本，并将之用于解决天体力学、医学统计中的问题，在有些情况下，甚至用于法理学。但是拉普拉斯并不认为该定理对于概率论很重要。他还是坚持使用了概率的经典解释。&lt;/p&gt;
&lt;p&gt;弗兰克·普伦普顿·拉姆齐在《数学基础》（1931年）中首次建议将主观置信度作为概率的一种解释。Ramsey视这种解释为概率的频率解释的一个补充，而频率解释在当时更为广泛接受。统计学家Bruno de Finetti于1937年采纳了Ramsey的观点，将之作为概率的频率解释的一种可能的代替。L. J. Savage在《统计学基础》（1954年）中拓展了这个思想。&lt;/p&gt;
&lt;p&gt;有人试图将“置信度”的直观概念进行形式化的定义和应用。最普通的应用是基于打赌:置信度反映在行为主体愿意在命题上下注的意愿上。&lt;/p&gt;
&lt;p&gt;当信任有程度的时候，概率计算的定理测量信任的理性程度，就像一阶逻辑的定理测量信任的理性程度一样。很多人将置信度视为经典的真值（真或假）的一种扩展。&lt;/p&gt;
&lt;p&gt;Harold Jeffreys, Richard T. Cox, Edwin Jaynes和I. J. Good研探了贝叶斯理论。其他著名贝叶斯理论的支持者包括John Maynard Keynes和B.O. Koopman。&lt;/p&gt;
&lt;h2 id=&#34;贝叶斯法则的原理&#34;&gt;贝叶斯法则的原理&lt;/h2&gt;
&lt;p&gt;通常，事件A在事件B(发生)的条件下的概率，与事件B在事件A的条件下的概率是不一样的；然而，这两者是有确定的关系,贝叶斯法则就是这种关系的陈述。&lt;/p&gt;
&lt;p&gt;作为一个规范的原理，贝叶斯法则对于所有概率的解释是有效的；然而，频率主义者和贝叶斯主义者对于在应用中概率如何被赋值有着不同的看法：频率主义者根据随机事件发生的频率，或者总体样本里面的个数来赋值概率；贝叶斯主义者要根据未知的命题来赋值概率。一个结果就是，贝叶斯主义者有更多的机会使用贝叶斯法则。&lt;/p&gt;
&lt;p&gt;贝叶斯法则是关于随机事件A和B的条件概率和边缘概率的。 其中L(A|B)是在B发生的情况下A发生的可能性。&lt;/p&gt;
&lt;p&gt;在贝叶斯法则中，每个名词都有约定俗成的名称：&lt;/p&gt;
&lt;p&gt;Pr(A)是A的先验概率或边缘概率。之所以称为&amp;quot;先验&amp;quot;是因为它不考虑任何B方面的因素。&lt;/p&gt;
&lt;p&gt;Pr(A|B)是已知B发生后A的条件概率，也由于得自B的取值而被称作A的后验概率。&lt;/p&gt;
&lt;p&gt;Pr(B|A)是已知A发生后B的条件概率，也由于得自A的取值而被称作B的后验概率。&lt;/p&gt;
&lt;p&gt;Pr(B)是B的先验概率或边缘概率，也作标准化常量（normalized constant）。&lt;/p&gt;
&lt;p&gt;按这些术语，Bayes法则可表述为：&lt;/p&gt;
&lt;p&gt;后验概率 = (似然度 * 先验概率)/标准化常量 也就是说，后验概率与先验概率和似然度的乘积成正比。&lt;/p&gt;
&lt;p&gt;另外，比例Pr(B|A)/Pr(B)也有时被称作标准似然度（standardised likelihood），Bayes法则可表述为：&lt;/p&gt;
&lt;p&gt;后验概率 = 标准似然度 * 先验概率&lt;/p&gt;
&lt;p&gt;要理解贝叶斯推断，必须先理解贝叶斯定理。后者实际上就是计算&amp;quot;条件概率&amp;quot;的公式。&lt;/p&gt;
&lt;p&gt;所谓&amp;quot;条件概率&amp;quot;（Conditional probability），就是指在事件B发生的情况下，事件A发生的概率，用P(A|B)来表示。&lt;/p&gt;
&lt;p&gt;根据文氏图，可以很清楚地看到在事件B发生的情况下，事件A发生的概率就是P(A∩B)除以P(B)。 &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1277/images/image-1622009898498.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;因此，&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1277/images/image-1622009935409.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;同理可得，&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1277/images/image-1622009527703.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;所以，&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1277/images/image-1622009959545.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;即，&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1277/images/image-1622009974648.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;这就是条件概率的计算公式。&lt;/p&gt;
&lt;h2 id=&#34;全概率公式&#34;&gt;全概率公式&lt;/h2&gt;
&lt;p&gt;由于后面要用到，所以除了条件概率以外，这里还要推导全概率公式。&lt;/p&gt;
&lt;p&gt;假定样本空间S，是两个事件A与A&amp;rsquo;的和。&lt;/p&gt;
&lt;p&gt;上图中，红色部分是事件A，绿色部分是事件A&amp;rsquo;，它们共同构成了样本空间S。&lt;/p&gt;
&lt;p&gt;在这种情况下，事件B可以划分成两个部分。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《当代政治哲学》读后简感(并转译者的译后记）</title>
      <link>https://dodoro.chouxiangpai.com/archives/1231/</link>
      <pubDate>Mon, 10 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1231/</guid>
      <description>&lt;p&gt;这两周把金里卡的《当代政治哲学》读完了，阅读体验特别好。去年读罗尔斯的《正义论》和《政治自由主义》的时候比较吃力，但是读这本书却没有任何压力，我觉得不是因为自己这一年来长进了太多，而是作者太厉害了。&lt;/p&gt;
&lt;p&gt;作者简明又深刻地把当代政治哲学的情况作了说明，&lt;strong&gt;包括功利主义、自由主义的平等主义、自由至上主义、马克思主义、社群主义、女权主义和多元文化主义，在介绍这些政治哲学流派的理念和要义的同时，作者也加上自己的论证和判断，而且做得非常到位，我想起了罗素的《西方哲学史》&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;阅读过程中，另外一个更重要的感叹是：翻译得太好了，今天在地铁读到译后记，看到译者是川大的刘莘老师，他用一个故事和一篇感想来作为译后记，文笔和寓意非常精辟，果然是学者级别的人物。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;《当代政治哲学》译后记&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;那一年的盛夏，一位五十余岁的农民用平日走田过坎的加重自行车，载着自己的老母亲，历经常人无法想象的艰辛，翻山越岭来到这风景奇佳的深山峡谷。农民背着自己的母亲，沿着被称作“大龙潭”的绝壁幽涧中的狭长栈道，在高山流水的龙吟声中默默而行。脚下碧波激荡，眼前层峦叠障，心中几多期望。不知登上了多少阶梯，不知穿越了多少美景。深山里的凉风早把外界难耐的酷暑吹得无影无踪，可农民仍然满头大汗气喘吁吁。也该歇歇了，农民在一视野陡然开阔的转折处，把母亲安放在急流半绕的硕大岩石上小憩。&lt;/p&gt;
&lt;p&gt;劳累的农民现在能够安然地环视四周。开阔的前方居然是从天而降的一幕接一幕的气势磅礴的飞瀑。真是一幅崇山峻岭作背景、急流乱卷奔前程的绝妙图画。农民显然为自己的劳累能换来这样的美景感到满意。庞大的山谷使这多事之夏本就不多的游人更显稀少，而从前方天桥上来到母子俩跟前的年轻人好像还不是游人。农民从年轻人全幅武装的照相设备和胸前的营业标志，知道他是这山里的摄影个体户。农民从年轻人的口中不仅知道他是这山中惟一的摄影个体户，还知道自己小憩的地方是这里极有代表性的风景点——按照个体户的宣传，经过此处而没有留下纪念照的游人肯定会后悔。&lt;/p&gt;
&lt;p&gt;农民回头望了望自己的老母亲。他本没有计划作这种奢侈的消费。或许是个体户亲自拍摄的风景照实在具有吸引力，农民最终拿出自己的“钱包”，从层层包裹的旧手绢中数了数沾满污渍的小面额纸币。让个体户喜出望外的是，农民居然要出十块钱为自己的老母亲拍摄五张照片。农民当然不知道，今天是个体户营业的第一天。农民更不知道，个体户在此之前的半天时间里几乎没有开张。十块钱的收入意味着五块钱的毛利润，意味着个体户挣到了可供一天吃住的全部开支。农民把岩石上坐着的母亲扶了起来，喜滋滋地为老人家整理一下衣裳。个体户因为激动而有些忙乱地摆开了架势。镜头中的农民是那样的幸福，母亲是那样的安详。&lt;/p&gt;
&lt;p&gt;农民最终数够了包括分币角币在内的十块钱，但在把钱交到个体户手里时却犹豫了一下。农民脸上的幸福有些凝重。农民叮咛个体户，千万不要把照片丢失或寄错。农民告诉个体户，今天是他母亲八十岁的大寿，很可能是母亲有生之年的最后一次“远游”。个体户有些错愕，突然意识到这暗盒里已经曝光的五张底片的意义，全然不是自己一天的吃住开支，而是一份厚重无比的赤子之情。个体户居然有些担心，担心某个环节的出错将永远无法还原镜头中那份幸福与安详，无法记录生命历程中那无比美丽的一瞬。现在轮到个体户犹豫了。他在那一刻甚至有一种想要变买卖为馈赠的冲动。&lt;/p&gt;
&lt;p&gt;平凡的往事并没有出人意料的结局。个体户最终按照买卖的游戏规则艰难但却理智地收取了他维系生计的收入。农民则背负年迈的母亲继续走向他内心的风景。农民不曾想到，他内心的风景外化成的蹒跚身影，居然与那山那水一同定格成了另一个心灵的永远的风景。个体户也不曾想到，这一瞬间凝成的心灵照片，在那内外动荡的1989年对于他日后的生命历程究竟有怎样的意蕴。&lt;/p&gt;
&lt;p&gt;翻译有些类似于摄影，译本必须通过恰当的方式再现原著。翻译者也类似于摄影者，挑选怎样的文本类似于用镜头筛选怎样的风景。为什么摄影师的镜头偏偏要再现这一幅风景？与其说外于他的某一幅风景偶然促使他按动了快门，毋宁说是他内心的理念在引导他的取景，但他为何会形成这样的理念？&lt;/p&gt;
&lt;p&gt;我不知道这问题对于他人会有怎样的答案，但我终于明白什么是自己的答案。那个夏天以后的每一次生活视野的动荡转换，终于凝成这样一个根本理念：自我的这个片断与那个片断以及这个自我与那个自我，无不处于相互映射的复杂的镜像关系。此自我与彼自我的关系以及这种关系与那种关系的关系，又在千重万叠的镜像结构中塑造着生活于其中的各个自我。不幸的是，这个理念的意义竟然要经过此后十余年沉沦挣扎的蹉跎岁月才在我心中逐渐澄明。幸运的是，即使在生命中最荒诞不经的幽暗片断里，记忆深处仍然不时闪现出高山深谷中那蹒跚身影和赤子深情。&lt;/p&gt;
&lt;p&gt;我相信社会、思想与文化也在相互映射的复杂镜像结构中互动演变。我相信在这样的宏观结构中被影响和塑造的微观自我，正通过他们能有的想象去支持或批判那无需作为积极塑造者就能影响入微的宏观镜像。支持和批判当然不同，但如果只在给定的时空象限和思想框架内进行这种看似相反的意向活动，早已被规定好了的意向域的局限就正好相同。也许，在此镜像的映射下展现时空维度不同的彼镜像，才可能对此镜像有先于支持或批判的丰富理解。&lt;strong&gt;就像此时此刻这一个具体的微观自我，对自己的支持和批判也必须通过镜像反思不断地回溯1989年那高山深谷中有别于己的人生镜像。不同的是，要对由千万个自我构成的社会镜像进行反思，被给定的社会结构影响着的反思者就要在被称作历史与文化的更大的时空维度上寻找反思的参照。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可自我并不对不同镜像进行不加选择的综合。我选择了那样一个年代的那样一个具体镜像，因为在那个镜像映射下萌发的自我意向终于在今天实现着对于过去的选择和打量。自我意向诚然在发生和发展的意义上有其可以归因的诸多镜像，但自我意向也为尚不存在的未来拟定了愿意如何的取舍和想象。这样看来，承载着强烈愿望的自我意向不仅已经创造出了专属于自己而又指向未来的虚无的镜像，这样的自我意向还必将在未来的虚无的终结处兑现成既属于自己又属于他人的阐释对象。更大领域的反思者何尝不是这样？&lt;/p&gt;
&lt;p&gt;反思者既要在历史的镜像中形成未来的意向，更要在指向未来的意向中提取历史的镜像。反思者必须超越给定的时空镜像，必须艰难地提炼可供更多的反思者作为反思镜像的意向。初时朦胧的意向经过艰苦的反思建构也许终会凝成具有丰富内容的理想。这样的理想将不是零乱和杂多的镜像，更不是模糊不清的幻象。这样的理想不仅是意向性的意义存在者在无常的生命困惑中勇于担待的依凭，更是直面和缓解人生苦难和社会不幸的必由路径。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我现在终于明白，出现在那个盛夏但却与年代无关的蹒跚身影为何总要在我的记忆深处烙上那个特殊年代的印迹。特殊年代的特殊意义在于以悲喜剧的方式幻灭了传承已久的理想。不幸的是，一种理想的幻灭居然会消解追求理想的理想。更不幸的是，一些不足以成为理想的必要目标随后居然成为了竞相追逐的理想。我也曾投身于这类追逐，愿意在这种追逐中获取超越现实束缚的手段，愿意借此体验现实人生的种种意义和无意义&lt;/strong&gt;。我同时以怀疑论之名去解构那些漠视现实人生的独断理想，去反思作为理想内核的信念是否可能以及如何可能。但究竟是什么力量，使我的怀疑论一直不愿嘲弄理想本身并且拒绝接受无理想状态的浅陋？我现在终于明白，那特殊年代的普通身影，一直就是对于人生和社会理想以及两种理想的镜像关系的双重隐喻。&lt;/p&gt;
&lt;p&gt;正如自我镜像不同于社会镜像，什么样的社会理想能够容纳千差万别的人生理想？不同的社会理想也可能潜入不同的人生理想，这是否意味着社会理想会因为不可避免的差异性就失去了被探讨和追求的依凭？在我看来，自我镜像的多元映射关系，恰好呈现了而不是遮蔽了对自我意向和人生理想进行主体间的探讨和慎思的意义。在我看来，社会理想的差异性也正好要求反思者去探究和建构能够解释这种差异性的、对社会理想及其合理依据的更丰厚深刻的思考。这样的思考拒绝以独断单一的道德图式去切割社会现实与人生百态的粗暴做法，因为这种看似崇高的执守有可能与它所欲批判的社会专制遥相呼应。这样的思考也拒绝以嬉笑怒骂的游戏姿态去窒息社会理想与人生追求的玩世不恭，因为这种有助于抗拒道德专制的话语，也许正好为缺失道德理想的社会不幸打下了伏笔。&lt;/p&gt;
&lt;p&gt;**确认社会理想的意义，不等于确认了实质性的社会理想。要立足当下为自己的社会的未来确立恰当的理想，我们就要努力呈现和阐释属于自己的社会、文化和思想的历史镜像。**要使作为镜像映射的阐释变得丰厚和开阔，我们就要努力理解和阐释异域文化的社会和思想的历史镜像。由于已经生成的历史必须在镜像现实与镜像意向的共同映射下才成其为历史镜像，对历史镜像的理解就抗拒着类同于发生序列的线型理解模式。于是，异域文化的当代思想所投射的各种社会理想，就在两种意义上有理由成为反观我们自己的历史与现实的一面镜像。因为这样的镜像恰好是在我们自己的历史、现实与未来意向的共同映射下才成其为的镜像，我相信通过这面镜像对于我们自身的反观也就蕴涵着对于这面镜像的反观。&lt;/p&gt;
&lt;p&gt;在由差异性构成的镜像关系中通过否定和肯定的双重反思而逐渐澄明的自我，不会放弃他的独特性。在不同的社会理想的相互借鉴和批判中持续变迁或发展的社会，也理应不会失去文化与历史的独特性。无论路延伸向何方，我们不得不像高山深谷中那个执著的身影，背负自己的历史并引领自己的命运。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》一、梦想初会</title>
      <link>https://dodoro.chouxiangpai.com/archives/1187/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1187/</guid>
      <description>&lt;p&gt;我从三轮摩的跳下来，抬头就看见武缘高中的校门，深红色的瓷砖镶嵌着门柱，闪闪发光的金字大招牌，这个景象和我预想中的差不多。这里就是我一直梦回牵绕的理想之地，这一个多月来我曾经无数次想象第一次看见它时的激动心情，然而此时此刻，我却似乎变得镇定和平静，我知道我还有更远的目标要去实现。&lt;/p&gt;
&lt;p&gt;开学第一天，校园里人潮涌动，我和阿军在熙熙攘攘的人群里找到接待处，几位学长热情地接待我们，并给我们详细介绍入学流程、宿舍位置、安全须知、生活用品、办理饭卡等注意事项。我只记住宿舍位置和办理饭卡这两个要点，第一次离家那么远，周围一个亲人都没有，我想最重要的事情是要保证有地方住、有东西吃。阿军是我在小学的同班同学，我们初中也在同一所学校，现在我又和他分在同一个宿舍。我们的爸爸们今天还有事要办，他们交完学费之后就离开了学校。&lt;/p&gt;
&lt;p&gt;按着学长们指示的方向，我们带上行李往宿舍楼走去，从校门口向右边走，经过一排教学楼就来到宿舍楼下。这栋楼只有三层，左右两边各有一个楼梯，楼的外立面贴着和我家楼房一样的竖长条白色瓷砖，楼顶则镶嵌一排泥黄瓷砖，刚才听学长说我们这一届的男生都住在这里，一楼已经有很多人住进来。我和阿军的宿舍在三楼，我们费很大的力气把行李提到楼上，走出楼梯后向右走，经过几个宿舍后来到三零六宿舍，我想着未来三年我都将在这里生活。&lt;/p&gt;
&lt;p&gt;这里的宿舍比我在初中的时候要高级很多，每个宿舍都配有独立的卫生间，卫生间外面还留有专门洗衣服、刷牙洗脸的空间，并配有挂钩放毛巾。宿舍总共有十二个铺位，分上下铺，一个人一铺，靠近最里面的铺位用来堆放行李。班主任已经将宿舍的铺位安排好，除了我和阿军铺位空着，其他铺位都已经铺好草席，我们找到自己的铺位，我在下铺，他在我斜对角的上铺。&lt;/p&gt;
&lt;p&gt;我放下东西后跟同学们打招呼：“大家好，我叫阿靖，很高兴认识大家。”&lt;/p&gt;
&lt;p&gt;“我是阿军，请多多关照。”&lt;/p&gt;
&lt;p&gt;我们刚刚说完，一位身材高瘦的人从洗脸区域走出来，大声地回答：“欢迎欢迎，我叫阿宇，非常荣幸和你们在同一个宿舍。”&lt;/p&gt;
&lt;p&gt;阿宇理着短发，面带微笑，笑起来两眼都已经快眯起来，他非常热情地回应我们，并且伸出手要和我们握手。我伸出右手，他马上用两只手紧紧握住我的手，满怀热情地说：“我来自武镇，喜欢打篮球，我是睡在你上铺的兄弟。”&lt;/p&gt;
&lt;p&gt;“我们两个来自灵镇，请大…多多关照！”平时港片看得太多，我差点说出大哥二字，还好收得快，我忘记这里是学校，而且也不知道谁的年龄更大。&lt;/p&gt;
&lt;p&gt;我看得出来，阿宇大概率也是从村里出来，他穿着一件我在灵镇经常看见的白色衬衫，皮肤黝黑，手上有茧，看一眼就知道他肯定经常到田里干活或者上山放牛，我一下子对他产生好感，没想到第一天就认识与自己有亲和力的人。&lt;/p&gt;
&lt;p&gt;阿军的下铺是一位头发挺长的舍友，穿着喇叭裤，胡须没刮干净，他只是看了我们一眼就继续打理他的衣服。我心想：如果是在灵镇，他这身打扮都将归入社会青年或者坏学生行列，没想到他居然考上民族班，阿宇告诉我他叫阿风，来自县城东边。&lt;/p&gt;
&lt;p&gt;宿舍另外三位分别是阿鲲、阿锐和阿益，他们只是挥手和我们打完招呼就忙自己的事情，一看就是沉默寡言不爱说话的人，听阿宇说他们三个都在桥镇，从小学到初中都在同一个班。&lt;/p&gt;
&lt;p&gt;阿鲲头发有点稀疏蓬乱，眼光似乎有些迷离，如果在外面遇到他，我不会想到他会和我在同一个班，他让我想起一个成语：大智若愚。阿锐的头发很特别，似乎往四面八方竖起来，他的眼睛炯炯有神，透着一股锐气。阿益头发也比较长，不过脸部弄得很干净，衣着也打理地很整齐，他坐在床上，手里捧着一本古龙的武侠小说《大旗英雄传》。原来阿宇是宿舍长，怪不得他对大家的信息都了如指掌。&lt;/p&gt;
&lt;p&gt;我刚摊平席子和被子，另一位舍友走进宿舍，他进门就开心说：“哟，宿舍里的最后两位舍友也到了，我是阿瑾，从今天起大家就是一起生活的好兄弟。”&lt;/p&gt;
&lt;p&gt;阿瑾来自锣镇，以前在家的时候，我妈妈总是说锣镇民风彪悍，阿瑾却非常友好，看来并不能以地方论人，何况每个人都千差万别。阿瑾的皮肤白皙，五官秀美，我估计他应该是住在镇上的人。阿宇跟我说阿瑾考进全县前十名，他原本报名去邕城三中，县里不放人，我之前也听说县教育局把排名前十的学生都留在本县读书。&lt;/p&gt;
&lt;p&gt;我和阿军到学校操场临时搭建起来的集市买脸盆、饭盒、毛巾等必备生活用品，我们把东西扛进宿舍的时候，阿宇问我们：“你们是不是从操场那边买的东西？”&lt;/p&gt;
&lt;p&gt;我回答他：“当然，难道还有其他地方可以买吗？”&lt;/p&gt;
&lt;p&gt;“我应该早点告诉你们，学校里卖的东西贵很多，我的日用品都是到街上去买，这样能省下好几块钱。”&lt;/p&gt;
&lt;p&gt;阿军放完东西后回应他：“我们对县城不熟悉，街上的东西也不一定靠谱，而且带这么多东西，要坐三轮车，路费也要几块钱。”&lt;/p&gt;
&lt;p&gt;整理完东西后，我们一起到食堂充值饭卡、吃晚饭，食堂坐落在校园的最西边，外立面也是竖长条白色瓷砖，正面看是一个大大的倒立V字中间加一道长长的横杠。这里的伙食很好，当然价格也更贵，一顿饭一块到两块五之间，一天伙食要近五块钱，这个相当于我在初中一周的伙食费。&lt;/p&gt;
&lt;p&gt;吃完饭回来，宿舍里开始轮流冲澡，我和大部人舍友一样都没有带拖鞋，我们都穿着长得一模一样的土黄色胶凉鞋去洗澡，这种凉鞋是乡镇里男性的专属鞋子，从六岁的小孩到六十的老爷爷都穿，我从懂事起到现在都是穿这种凉鞋，唯一变化的是鞋子的尺码大小。这种鞋子最大的特点是坏了可以自己补，我经常把镰刀的尖锐部分放到火里烧红，接着将坏掉的鞋子两端夹住烧红的镰刀，一阵黑烟和刺鼻的烧焦味过后，鞋子就补好了，技术好的人还可以把废弃的鞋子剪出小块来补坏掉的鞋子。&lt;/p&gt;
&lt;p&gt;我冲完澡后换上新买的白色衬衫和西裤，阿军的衣着和我一模一样，我注意到宿舍里除了阿瑾和阿风之外，大家都是跟我差不多的一身衣着，只是衬衫颜色不一样。&lt;/p&gt;
&lt;p&gt;接近傍晚的时候，我和阿军开始往教室走去，时间还很充裕，我们慢悠悠地走在校园里，路上来来往往很多人，有些神色匆匆、个头明显比我大很多的大概率是学长学姐，而那些跟我们一样四处张望、两眼充满好奇的人估计也是新生。我们走到靠近校门的交叉路口，我往左边看了看，那里的桌子已经收起来，看来新生都已经全部报道完毕。 “快看，那边就是光明之路。”&lt;/p&gt;
&lt;p&gt;我听到身边经过的两个女生的声音，我不知道什么是光明之路，顺着她们手指的方向，我看见这条路直接通到一个由钢笔、毛笔和铅笔组成的雕像，雕像的下面有四个字：光明之路。&lt;/p&gt;
&lt;p&gt;阿军跟我解释：“暑假的时候，我也听说这个校训，其实还有另外的四个字：入德之门，不知道从什么时候起就只剩下了光明之路这四个字。”&lt;/p&gt;
&lt;p&gt;我看着远处的校训，这四个字正对大门，大概是想告诉学生：进入武缘高中之后，一直往前走就可以通向光明之路。可是什么是真正的光明之路呢？又由谁来定义光明和黑暗呢？带着这样的思考，我来到了二楼的教室。&lt;/p&gt;
&lt;p&gt;我走进教室，黑板上写着几行字，提示大家按照座位表就坐，原来班主任已经安排好座位，座位表就放在讲台上。我和阿军上来找自己的位置，阿军很快就找到自己的座位，他坐在第一列的后边。我扫了一眼，没有发现自己的座位，却看到那个让我眼睛放光的名字：田茉，她果然和我在同一个班级。&lt;/p&gt;
&lt;p&gt;我又仔细找一次，才发现自己在第四列的中间靠近窗口的位置，按照座位表我数着来到我的座位，却发现有个戴眼镜的家伙已经坐在那里，他身穿浅色运动T恤和我从来没有穿过的休闲裤。&lt;/p&gt;
&lt;p&gt;我小心翼翼地跟他说：“同学你好，这个应该是我的座位。”&lt;/p&gt;
&lt;p&gt;他抬起头来，睁大眼睛做出很夸张的表情说：“啊？不可能，你一定弄错了。”&lt;/p&gt;
&lt;p&gt;我乖乖回去重新确认座位，确定无疑之后，我回来跟他说：“我觉得应该是你弄错了，这个确实是我的位置。”&lt;/p&gt;
&lt;p&gt;他一脸茫然地站起来，跑到讲台对座位，接着回来很自信的说：“同学你好，我真的没有看错，这个绝对是我的位置。”&lt;/p&gt;
&lt;p&gt;我不慌不忙地说：“你叫阿航吧？你的位置在第一排，你的同桌是阿军，他是我的初中同学，他现在就在第一排坐着。”&lt;/p&gt;
&lt;p&gt;“啊？难道我真的弄错吗？”他说完又跑到讲台上去。&lt;/p&gt;
&lt;p&gt;两分钟后，他像做错事的孩子灰溜溜回来：“非常抱歉，我看反了座位。”&lt;/p&gt;
&lt;p&gt;“没关系，不打不相识，我叫阿靖，很高兴认识你。”&lt;/p&gt;
&lt;p&gt;“我叫阿航，不打不相识，大家以后都是同学。”&lt;/p&gt;
&lt;p&gt;阿航把座位上的书本和笔记本都收拾完毕之后就离开我的位置，他很快坐到阿军的旁边。大约差不多一半的学生已经来到教室，除了阿军，所有人对我来说都是新面孔，有些人低头看书，有些人像我一样四处张望，我们这些人都是原来乡镇里数一数二的学生，这么多人来到一个班级，以前一直听说“一山不能容二虎”，现在好几十只老虎在一个笼子里。&lt;/p&gt;
&lt;p&gt;几分钟后，我的同桌来到教室，他叫阿思，来自陆镇，他长得瘦小，穿着黑皮鞋，身上是蓝色衬衫，头发向右边梳，我们打招呼完之后，他开始拿出一本书来阅读。今天在宿舍就接到班主任的通知，要求大家带钢笔和笔记本，我把自己的东西拿出来整理，发现把钢笔留在了宿舍，于是起身回宿舍拿东西。&lt;/p&gt;
&lt;p&gt;我和舍长阿宇拿钥匙后径直往讲台方向走，脑子里想着要不要带本课外书，走到讲台正中间的时候，感觉前面有个身影，我慌忙停住，下意识抬头，对面是一位短发女生，这个人我似曾相识，浅浅的眉毛、小巧的长型脸蛋、轻盈的身段，我差点撞上她，她似乎被我吓了一跳，我们的眼睛对视一秒后，我赶紧慌忙道歉：“对不起，对不起，我没看路！”&lt;/p&gt;
&lt;p&gt;接着我听到一个清脆、标准的声音：“没关系。”&lt;/p&gt;
&lt;p&gt;这时候我才想起来，她就是我五个月前来县实验学校参加化学竞赛时遇见的女生田茉，那时候她的衣着、装扮和现在比，几乎般若两人，我更惊讶她居然剪掉自己那两条长长的辫子，我觉得她肯定不会记得我，也不可能会记得我。我心里再次响起那个悸动的声音，我带着一阵兴奋离开教室，匆匆回宿舍去拿笔。&lt;/p&gt;
&lt;p&gt;我返回教室的时候，看见田茉就坐在第三列，正好在我左前方第二排的位置，只是现在从后面再不能看见她那两条长长的小辫子，也没有那件曾经让我着迷的米白色格子长裙。&lt;/p&gt;
&lt;p&gt;晚上大约八点钟，班主任来到教室，他长得微胖，头形很圆，前额的头发已经秃了不少，他留部分后面的头发拨到前面挡住，讲话的过程中，我能感觉他的眼神一直在游走，偶尔我眼神和他触碰的那一刹那，我正要对他微笑，他却带着傲慢的神气把目光移走。&lt;/p&gt;
&lt;p&gt;“同学们，欢迎大家来到武缘高中，也欢迎大家来到民族班，从现在开始一直到毕业，我都是你们的班主任，我这个人说话随和，但是我的要求很高，我希望在未来的三年时间里，大家努力学习，以高考为目标，努力才会有收获。”&lt;/p&gt;
&lt;p&gt;“我知道你们原来都是学校里成绩最优秀的学生，但是来到民族班，一切都有可能，大家要做好思想上的准备，以后考试你们就不会像原来初中一样都是数一数二的人，甚至可能会排到最后几名，如果遇到这种情况，最要紧的是要重新振作起来，更加地努力赶超。”&lt;/p&gt;
&lt;p&gt;说完之后班主任让大家做自我介绍，并要求在介绍的过程中，谁要是打算竞选班干部就把自己的意愿传达出来，他给我们自告奋勇的机会上讲台，可是教室里一片沉默，我想大家都非常谦虚，或者在构思该怎么介绍自己。我暑假期间就听初中的学长说过，开学第一天会有自我介绍，他让我提前想好要说什么，这样可以给老师和同学们带来好的印象，我早就已经准备好自己的发言，并在家练习了好几轮。&lt;/p&gt;
&lt;p&gt;大约两三分钟后，还是没有人举手，我想起以前在初中，每当这个时候我都会站出来给老师捧场，于是我举起自己的手。一阵鼓掌声下，我走上讲台，带着略微颤抖的声音发言：&lt;/p&gt;
&lt;p&gt;“各位同学好，我叫阿靖，来自灵镇二中，我没有什么特别的特长，不过我喜欢数学和哲学，我的理想是成为数学家，我在日记里给我取的外号叫数学男孩，我希望以后通过自己的努力，能够成长为真正的数学家。还有呢…我愿意当班干部。”&lt;/p&gt;
&lt;p&gt;我发言完之后，又是一阵鼓掌声。第二位上台发言的人是刚刚坐错我位置的阿航，他普通话非常标准：&lt;/p&gt;
&lt;p&gt;“大家好，我叫阿航，既然已经有第一个吃螃蟹的人，我就不再害怕螃蟹吃不下。我初中在邕城上学，很高兴能来到这个班集体，我喜欢打篮球，而且我觉得我打得还不错，希望在新的班级里和大家一起努力学习，我热情开朗，也希望能为同学们服务，如果大家信任我，请投我一票。”&lt;/p&gt;
&lt;p&gt;我觉得他讲得比我好很多，不仅是普通话讲得标准，发言内容也很贴切，我突然觉得自己刚才的发言好幼稚。&lt;/p&gt;
&lt;p&gt;“大家好，我叫田茉。”&lt;/p&gt;
&lt;p&gt;我正低头记笔记，田茉标准的普通话让我停住手中的笔，终于轮到她上台发言，她的发言冷静、镇定，看不出有任何紧张。&lt;/p&gt;
&lt;p&gt;“我来自县里的镇一中，喜欢阅读文学作品，排球打得还不错，曾经是班级的主力，虽然平时我不太爱主动说话，但是如果有人愿意和我讨论，我一定不会拒绝，我非常愿意和大家分享阅读心得，我以前也当过班干部，如果大家选我，我不会辜负大家的信任。”&lt;/p&gt;
&lt;p&gt;田茉讲话的过程中，我都看着她，不放过任何一个嘴形和眼神，每次看到她剪短的头发，我都怀念她背后那两条美丽的小辫子，我不知道是什么原因让她剪掉自己的美丽。&lt;/p&gt;
&lt;p&gt;随着举手的人越来越多，改成按一定的顺序发言，我看见阿哲走上讲台，他是阿宇的同桌，上课前我去找阿宇拿宿舍钥匙的时候，看见阿哲正在看一本小说《围城》。阿哲的发言透着让人琢磨不透的思想，不过他的声音有点小，我怀疑后排听力不太好的同学可能听不到他在说什么。&lt;/p&gt;
&lt;p&gt;同学们陆陆续续上台演讲，我很认真地听每个人的发言，听到阿鲲和阿益的发言后，我才松了口气，心想自己的发言比他们两个要好一点。&lt;/p&gt;
&lt;p&gt;“我靠，这么快就轮到我发言。”&lt;/p&gt;
&lt;p&gt;我耳边传来《大话西游》里周星驰的一句口头禅，走上讲台的是隔壁宿舍的舍长阿斌，他带着一副深度近视的眼镜，白色T恤搭配着一条过膝运动短裤，阿斌的普通话讲得也很标准，发言内容幽默、精彩。&lt;/p&gt;
&lt;p&gt;“我除了喜欢学习，也喜欢打电子游戏，我觉得自己的近视眼，不仅仅是看书造成，也是玩电脑太多导致。我很喜欢和大家交朋友，新的班集体里，希望大家都可以成为好朋友。”&lt;/p&gt;
&lt;p&gt;阿斌刚刚走下讲台，三零六的舍长阿宇就大踏步走上讲台。&lt;/p&gt;
&lt;p&gt;“各位同学，大家好，我叫阿宇，来自武镇一中，我怀着非常激动的心情加入这个班集体。我喜欢打篮球，也喜欢历史，我很崇拜两个人，其中一位就是来自武镇的陆荣廷，他是民国时期的一代枭雄，另外一位是现任总理，他是我心中的目标。我希望和这里所有人一起奋斗，一起实现自己的梦想。”&lt;/p&gt;
&lt;p&gt;舍长阿宇的发言引起巨大轰动，大家热烈地鼓掌，我一边鼓掌一边瞟了一眼站在讲台右边的班主任，我感觉他的脸上写着好几条竖线，似乎不喜欢这样的发言，我心想看来班主任不喜欢太冒头的学生。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》七、乐队下乡</title>
      <link>https://dodoro.chouxiangpai.com/archives/1224/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1224/</guid>
      <description>&lt;p&gt;高一的学生的生活总是丰富多彩，新环境的兴奋感还在持续，我们暂时也没有太大的学习压力，同学们活跃在校园的每一个角落，无论是球场上还是社团里，都有我们的身影，对于五零八班来说，管弦乐队里的学生最为热闹。&lt;/p&gt;
&lt;p&gt;经过将半个多学期的努力练习，我们这一批新成员已经把校歌、军歌和国歌练习得滚瓜烂熟，前阵子乐队老师通知我们这周有一次校外演出，今天晚上我们将要参加皇后村的文艺演出。&lt;/p&gt;
&lt;p&gt;课外活动之后，学校为我们准备免费晚餐，我们的演出没有报酬，这算是对我们额外付出的犒劳。我们班里的七个人一起坐在同一张桌子上吃饭，晚餐很丰盛，比我们平时在食堂吃的要好很多，还有一盘烧鸭，这是县里人们最喜欢的一道菜。阿航夹起一块烧鸭，开心地说：“我最喜欢吃烧鸭，希望能经常下乡演出，这样不仅可以加菜，还可以到外面去玩。”&lt;/p&gt;
&lt;p&gt;萧影听完后笑着说：“如果真是这样，那么班主任马上就要把我们这群人全部从乐队里都解散出来。”&lt;/p&gt;
&lt;p&gt;原来前几天为配合这次下乡演出，我们占用两节晚自习来彩排，班主任来到教室发现少那么多学生，非常气愤，当他知道班里很多人都参加管弦乐队之后，试图和乐队老师交涉，希望乐队减少五零八班的学生。木已成舟，我们现在已经逐渐成为乐队的主力，每周一还负责升旗仪式的演奏，如果我们班的人离开乐队，那么这只队伍基本就要散掉，乐队老师必须重新招新，这时候再招新就不会像刚刚开学的时候那么轻松。&lt;/p&gt;
&lt;p&gt;阿军反驳说：“班主任应该没有那么大的权力，我们学校这两年非常看重素质教育，校园的社团是一块招牌，不太轻易被砸掉。”&lt;/p&gt;
&lt;p&gt;我和阿军都不希望被强制从乐队解散出去，其实除了偶尔有活动，乐队并不会占用学习时间，大家在乐队里都玩得都很开心，还可以熟练掌握一种乐器，我也很珍惜自己人生中的第一个社团活动。&lt;/p&gt;
&lt;p&gt;傍晚天色开始暗下来，等到学校的学生开始上晚自习的时候，我们坐着校车出发了，这是我第一次坐校车外出，心里激动又兴奋，阿军和阿定坐在一起聊天，从表情看，他们也很开心，我想坐在车上的每一位队员都很期待今天的演出。&lt;/p&gt;
&lt;p&gt;汽车缓缓地行使在灵水路上，两排的路灯发出淡淡的光束，秋天的夜空挂着一轮明月，今晚的月亮异常地明亮，雪白的月光透着两旁的行道树漏下淡淡的光影，我突然想到了田茉，只可惜她不在乐队，不然或许我可以和她并排坐着，一起欣赏这美丽的月色。&lt;/p&gt;
&lt;p&gt;我目不转睛地盯着月亮，很难相信这么美好的月亮上是冷冰冰的月宫，我原本不愿意接受民间关于玉兔和嫦娥的传说，看到人类登月的发现之后，倒是愿意相信传说，真实的月亮表面更冷更荒凉，果然现实比传说更残酷。&lt;/p&gt;
&lt;p&gt;我呆呆地盯着窗外遐想，汽车在五海桥头向左转弯，然后进入宁武路，这是一条二级公路，原本这条路是要经过灵镇。我正想着入迷，突然听到耳边传来一个声音：“阿靖，你有心事吗？”&lt;/p&gt;
&lt;p&gt;我才意识到坐在旁边的阿哲，慌忙回答他：“没有，没有，只是在想一点私事。”&lt;/p&gt;
&lt;p&gt;“我看见你眼神发呆，以为有什么事情困扰你，别因为其他事情影响我们今天晚上的演出啊。”&lt;/p&gt;
&lt;p&gt;阿哲的话倒是让我想到：要是田茉也一起来观看，或许我会表现得更好。我赶紧换了另外一个话题：“你以前去过皇后村吗？”&lt;/p&gt;
&lt;p&gt;“没有去过，不过这个村在县里很有名，那里的农民比我们之前徒步去的禄村还富有，这都得益于他们的村长，听说他还当过人大代表。”&lt;/p&gt;
&lt;p&gt;出发之前老师就说过这个村很特别，还有自己的文艺队，我们是受邀请参加他们的年底文艺演出，这是学校和农村教育的合作机会。我曾经在报纸上看到过华西村，那是江苏的一个示范村，县里也要推出一批示范村，报纸说这是乡村的未来，我也很想去见识这个特别的乡村，想知道我的故乡黄岜村和它有多大的差距。&lt;/p&gt;
&lt;p&gt;大约二十多分钟后，我们来到皇后村，文艺演出地点在村委前面的广场，村民们已经就坐，我看见阿公和阿婆们手里扇着竹子扇，偶尔能听到小朋友的欢笑声。&lt;/p&gt;
&lt;p&gt;乐队老师交代注意事项：“大家出来之后，就是代表学校的形象，希望大家不仅要努力演奏和表演，还要文明观看节目，节目结束的时候记得为演员们鼓掌。另外我这里要特别提醒，除了广场周边，严禁跑到其他地方去，这也是为了大家的安全。”&lt;/p&gt;
&lt;p&gt;村里给我们留一排靠前的座位，就坐之后村长开始发言，他对我们的到来表示热烈欢迎。这位村干部确实不同寻常，他的发言没有太多的官话和套话，这次文艺演出纯粹是丰富村民的生活。&lt;/p&gt;
&lt;p&gt;领导讲话结束后，文艺演出就拉开帷幕。村里的文艺队开始轮番表演，独唱《东方之珠》，合唱《广岛之恋》，舞蹈《走进新时代》，表演水平和电视上的春节联欢晚会相差很远，却比我在初中里的文艺演出水平要高出很多，个别节目高得让我不太确定这些演员是否都是当地村民。&lt;/p&gt;
&lt;p&gt;终于轮到我们表演，我们演奏两首歌曲：校歌和军歌。主持人播报我们的节目之后，场下立刻响起热烈的掌声。听乐队老师说：“这是我们第一次来到这个村里演出，很多村民都没有见过管弦乐器，大家要拿出最好的状态。”&lt;/p&gt;
&lt;p&gt;列队的空隙时间，负责指挥的学姐再一次强调：“大家一定要看我的指挥来演奏，既然我们来这里演出，代表的是学校的荣誉，我们要为学校争光，至少不能出洋相。”&lt;/p&gt;
&lt;p&gt;我刚才听乐队老师和学姐提到这里的文艺队也有一名指挥，估计那位指挥正在盯着我们的表演，学姐一定很紧张，其实我们也不想出洋相。&lt;/p&gt;
&lt;p&gt;不知道是外出演出的原因，还是刚刚学姐的话起作用，今天所有队员都听她的指挥演奏，在一阵紧张和兴奋的气氛下，我们完美地完成演奏，村民们又是一阵热烈的掌声。&lt;/p&gt;
&lt;p&gt;两三个节目之后，阿鑫和其他三位男生表演现代舞《绕绕绕》，这是我们学校派出的最后一个节目。阿鑫跳得确实很好，三个活力四射的年轻人在流行旋律伴奏下跳舞，他们的舞姿帅气，引得场下一阵又一阵欢呼。以前我只在电视节目看过现代舞，跳舞的人穿的都是奇装异服，这些服装一直都是初中学校打击的对象，我对这种舞蹈没有多大好感。或许因为跳舞的是武缘高中学生，现场看到阿鑫他们的舞蹈之后，我慢慢接受了这种舞蹈，甚至有些喜欢上现代舞。&lt;/p&gt;
&lt;p&gt;接着是村里的文艺队的舞蹈表演，也是年轻的小伙子，他们的舞蹈是《龙的传人》。我看见他们表情严肃凝重，黝黑的脸庞，粗壮的胳膊，看来平时应该也是在地里干活的人。&lt;/p&gt;
&lt;p&gt;乐队老师一边看一边对阿鑫说：“你看他们的舞蹈多么有阳刚之气，你们的舞蹈就显得太柔弱了。”&lt;/p&gt;
&lt;p&gt;阿鑫听完有些郁闷，不过他不是那种喜欢争辩的人，这时候阿哲鼓励他：“我觉得你们的舞蹈更好，你们的舞蹈是自创，独一无二，很了不起。”&lt;/p&gt;
&lt;p&gt;我们几个也附和阿哲的说法，乐队老师笑了笑也不再多说。&lt;/p&gt;
&lt;p&gt;表演结束之后，我们一起和村里的文艺队拍照合影留念，为了纪念我们的第一次外出表演，阿鑫还特意带来相机给乐队拍照，他拍得很好。我听阿定说阿鑫很小就学会摄影，他的爸爸在县城中心位置还开了一家照相馆。拍照结束后我们就坐车返回学校，路上已经寂静无声，那轮明月高高地挂在夜空，窗外吹来阵阵凉爽的风。&lt;/p&gt;
&lt;p&gt;晚上九点半左右，我们在晚自习结束之前回到学校，只剩下十几分钟，我们回宿舍放下行李就不再去上课。我来到阿哲的宿舍跟他聊天，他谈论自己喜欢的各种书籍，也问我平时喜欢读什么书，阿哲来自县里的一中，那里的阅览室藏书也非常丰富，他的涉猎范围比我更加广泛，他也喜欢各种文学作品。&lt;/p&gt;
&lt;p&gt;“我最喜欢的作品是钱钟书的《围城》，这本书写得非常好，里面充满大量经典的讽刺和幽默。”&lt;/p&gt;
&lt;p&gt;我从来没有听说过《围城》，也只是知道钱钟书是一位名人，我对他说：“我只读过两本文学名著，一本是《少年维特之烦恼》，另一本是《边城》。”&lt;/p&gt;
&lt;p&gt;“歌德的这本我也读过，不过我最喜欢的是《浮士德》。”&lt;/p&gt;
&lt;p&gt;我连《浮士德》的封面都没见过，于是转而谈论哲学史和哲学家故事的书籍，当我谈到《哲学的故事》的时候，阿哲说他初三的时候就读过杜兰特的这本经典著作。听他这么说，我很激动，原来阿哲也喜欢哲学，他说自己最喜欢的哲学家是德国哲学家叔本华。&lt;/p&gt;
&lt;p&gt;“叔本华的思想和尼采的思想同出一脉，他们认为意志力非常重要。我也认为意志力可以促使我们战胜看起来不可能的困难。中国曾经也有和叔本华一样想法的哲学家，他就是明朝时期的哲学家王阳明。”&lt;/p&gt;
&lt;p&gt;“我很尊重叔本华，王阳明的哲学思想在中国独树一帜，可惜在当时的社会并没流行起来，也没有对社会产生太大的影响，倒是对后来的东南亚产生巨大影响。我最喜欢的是罗素，他的哲学思想更经得起逻辑的推敲。”&lt;/p&gt;
&lt;p&gt;“罗素的哲学思想确实很深邃，不过他的哲学观点也没法驳倒叔本华和尼采的意志论。”&lt;/p&gt;
&lt;p&gt;这时候，他问我对世界的看法：“你认为世界是精神的还是物质的？”&lt;/p&gt;
&lt;p&gt;“这个没有绝对的真理，准确的说应该是物质和精神的结合体，并没有谁完全决定谁。”&lt;/p&gt;
&lt;p&gt;“虽然我也同意你的看法，但是我更倾向于精神。如果认为物质决定一切，那么人只会疯狂地去追求物质和感官的享乐，最终将导致人和动物没有任何区别。相反地，只有认为心灵至上，人类才会超越物质，从而超越动物，成为有灵性的生物，毕竟一个人的心就能装下整个物质宇宙。这也是为什么我认为叔本华更伟大。”&lt;/p&gt;
&lt;p&gt;听完阿哲的这种观点，我感到极大的震撼，突然能理解现代哲学之父笛卡尔为什么如此醉心唯心和唯物的二元论，也能理解为什么无数的哲学大师们对唯物论保留意见。此时此刻，我的脑海之中回荡着雨果的那句名言：世界上最浩瀚的是海洋，比海洋更浩瀚的是天空，比天空还要浩瀚的是人的心灵。&lt;/p&gt;
&lt;p&gt;阿哲接着问我：“你那么喜欢罗素，一定听说过罗素悖论吧？”&lt;/p&gt;
&lt;p&gt;“当然，这是关于集合论非常著名的一个悖论，这个悖论直接导致数学界的第三次大危机。”&lt;/p&gt;
&lt;p&gt;“我很想知道具体是什么意思，最近我在阅读逻辑哲学相关的书，总是看到关于罗素悖论的论述。”&lt;/p&gt;
&lt;p&gt;“罗素悖论指的是：根据集合论的定义，任意给定一个性质，满足该性质的所有集合总是可以组成一个总的集合。这样的企图却会导致悖论，因为这样一个总的集合既不能属于自己，也不能不属于自己。假设这个总的集合属于自己，按照定义，它已经包含了所有满足给定的性质的所有集合，所以它不能属于自己，这样就产生了矛盾。假设这个总的集合不属于自己，按照定义，这个总的集合也满足给定的这个性质，所以它属于自己，这样也产生了矛盾。”&lt;/p&gt;
&lt;p&gt;阿哲皱着眉头说：“听起来有点绕，是否有更简单的描述？”&lt;/p&gt;
&lt;p&gt;“罗素悖论有另外一种描述方式，就是理发师悖论：一位理发师宣称要给城里面所有不给自己理发的人理发。这样的论述会导致一个问题：理发师应该由谁给他理发。如果理发师给自己理发，按照定义他只能给那些不给自己理发的人理发；如果理发师不给自己理发，按照定义他要给所有不给自己理发的人理发。”&lt;/p&gt;
&lt;p&gt;“这个表述方式我就能理解，罗素先生果然是数理逻辑大师。”&lt;/p&gt;
&lt;p&gt;我喜欢和阿哲聊哲学家的故事和思想，他是和我聊哲学的第一个人，我们交换彼此的想法，都获得了进步。&lt;/p&gt;
&lt;p&gt;晚睡之前，我躺在床上想：田茉一定也读过很多文学作品，除了《傲慢与偏见》，不知道她还喜欢什么样的书，她是否也喜欢某位哲学家。我多么希望今晚聊天的对象是她，或许我可以找机会和她聊一聊，想着，想着，我偷偷地微笑，并带着这个微笑进入美美的梦乡。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》三、县城见闻</title>
      <link>https://dodoro.chouxiangpai.com/archives/1204/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1204/</guid>
      <description>&lt;p&gt;我之前并没有想到高中会没有双休日，老师们的说法是：学校要让我们从高一开始就有高考的紧迫感，这也是半封闭式管理的一个环节。每周五正常上晚自习，周六上午还要上半天自习课，偶尔会有老师来发练习题和测验题。周六下午大家就可以放假，离学校近的同学可以回家过一天周末，大部分同学离家很远，周末都是留在学校度过。&lt;/p&gt;
&lt;p&gt;高一的学生对学校半封闭式的管理多少有些意见，特别是那些原来初中管理比较松散的同学。学校领导似乎听到这样的抱怨，在一次集会训话中，我们的年级领导振振有词地发言：&lt;/p&gt;
&lt;p&gt;“现在的管理模式已经对大家非常好，每天下午下课后大家还可以自由进出校门，周末也有一天的活动时间。你们知道吗？全国其他一些地方，有比你们更不自由的学生，他们从高一开始就是全封闭式管理，我听说就在省内有一所全州高中，他们有一个学生，三年都没有出过一次校门。”&lt;/p&gt;
&lt;p&gt;我们被最后一句话吓坏了，我对目前学校的管理模式没有异议，可是我绝对不可能三年不出校门。&lt;/p&gt;
&lt;p&gt;阿宇回头看一眼班主任，确认他离得很远，偷偷对我们说：“我觉得就是因为这些学校这么干，导致大家相互学习，最后形成恶性循环和恶行竞争。”&lt;/p&gt;
&lt;p&gt;阿军支持阿宇的看法：“无论如何，我们都应该庆幸自己所在的高中只是半封闭管理。三年不出校门，我绝对做不到。”&lt;/p&gt;
&lt;p&gt;今天又是一个周六，我盼望这个周末的到来，我和阿军、阿定约好这个周末要到县里看看，顺便买东西。我们来学校已经半个多月时间，还没有到县城去好好转一转。&lt;/p&gt;
&lt;p&gt;上午自习课结束之后，我们终于解放，县城学生开心回家。午饭之后，我们一起出发进城，这一次不再翻山越岭，我们沿着灵水路步行十几分钟后来到五海桥，桥头有几个小商贩在路边售卖邮票、信封和各类文具，阿定买了几个信封和几张邮票，他说自己会经常给姐姐写信。&lt;/p&gt;
&lt;p&gt;我们行走在桥上，穿过武缘河，继续往前走来到一条大马路，这是一条分岔路，直走会经过派出所，走在街道上能闻到浓浓的煮粉味道。街道两排林立各种粉店，卷筒粉、老友粉、螺蛳粉、桂林米粉，这些都是我听过却没有尝过的粉，走到接近街道尽头的时候终于看见我熟悉的生榨米粉。闻到生榨米粉的味道，我想到了灵镇，离家只有两周多时间，我突然想家了。&lt;/p&gt;
&lt;p&gt;街道的尽头是一个巨大的市场，我站在十字路口，西边是一个大型市场，柱子上写着南门菜市，里面不仅仅卖蔬菜，也卖肉、卖鱼、卖活鸡活鸭，东边的大楼用金字写着百货大楼，北边是服装批发市场粮所商场，这里热闹非凡，三轮摩的、摩托车、自行车和行人熙熙攘攘走在路上。&lt;/p&gt;
&lt;p&gt;阿军指着菜市场感叹到:“这个市场起码比灵镇的集市大三倍！”&lt;/p&gt;
&lt;p&gt;我们不打算买东西，只是在街上瞎转，看这里、看那里，上一次来县城没有注意的东西，现在都可以仔细地瞧一瞧。&lt;/p&gt;
&lt;p&gt;我们一直往东走，来到另外一个十字路口，北边有一个电影院，海报上有裸露和暴力的镜头，标题写着“情杀…”和“深夜…”，我们三个抬头看了一眼，都很自觉地把目光移开。我还看见电影院对面还有一家样子很特别的照相馆，我从来没有去过照相馆，很想进去看看，却又不知道要进去干什么。&lt;/p&gt;
&lt;p&gt;阿军指着路的对面：“那边是县里最大的广场，听说这附近就是县城最繁华的地方。” 我这才注意到，这里的楼最高，店铺也很大，各种家电家具店铺，还有两三个装修得很豪华的金银首饰店铺。&lt;/p&gt;
&lt;p&gt;我们继续沿着大路往前走，右边是一个新华书店，这个书店有两层楼，这是我见过最大的书店，真想进去看看里面都卖着什么样的书籍。阿定和阿军似乎对广场更感兴趣，他们径直往广场方向走去，我快步跟上他们。&lt;/p&gt;
&lt;p&gt;我们很快就来到文化广场，地板贴着瓷砖，广场正中间有一个大喷泉，广场很大，我心想：看起来和电视上看到的天安门广场一样大。广场上有阿婆阿公们牵着小孩在玩耍，周围种植高大的榕树，旁边有很多摆摊卖酸、卖小吃、卖气球的小商贩，他们大都是推着三轮自行车。&lt;/p&gt;
&lt;p&gt;文化广场的西边是县图书馆，看起来已经很有年代，图书馆的门前有一棵开着花的大树，一直高到五层楼顶，我闻到了浓郁的清香。&lt;/p&gt;
&lt;p&gt;“我从来没有见过这样的大树，长椭圆形的绿叶上开满了花，花瓣洁白清香，看起来像是在微笑。”&lt;/p&gt;
&lt;p&gt;我话音刚落，坐在大榕树下的一位阿婆告诉我们这是一棵白兰花树。我喜欢这棵大树，更喜欢它的花香，香气扑面而来，甜润浓烈。&lt;/p&gt;
&lt;p&gt;广场东边是一个室内体育场，墙壁上写着：工人文化宫。阿定说：“县里的篮球比赛都是在这里举行，不知道室内体育场长什么样子，真想到里面去打一次篮球。”我对体育场没有兴趣，倒是很想知道图书馆里能不能借书，这么老的图书馆，一定收藏大量图书，也会有数学方面的各种图书。&lt;/p&gt;
&lt;p&gt;体育场的旁边有一个剧院，大门紧闭，门口有两个醒目的石头狮子，我对这两头大石狮子很感兴趣，它们看起来已经有些年代，用花岗岩雕成，蹲坐状，狮身高超过一米，宽也有至少半米。阿军告诉我们：这叫陆荣廷石狮，陆荣廷是广西乃至全国都赫赫有名的军阀。我们三个仔细看了看狮座，上面刻有字，字迹依然清晰可见：共和九年春，武鸣巡帅陆公，社祠落成 ，群僚敕贺。文武毕集，葆藩等治军东粤 ，谨献石狮 二座，恭列祠前，以表贺忱。&lt;/p&gt;
&lt;p&gt;这时候阿军很兴奋地指着北边说：“那里就是县政府和县委的大楼，也是原来县衙所在地，我们进去看看吧。”&lt;/p&gt;
&lt;p&gt;这才是阿军今天来逛街的最大的目标，他还在初中的时候就打算来这里看看。&lt;/p&gt;
&lt;p&gt;我们走到大楼的门口，大门敞开，我看见旁边的一间小屋有个门卫，心里想会不会不允许进去。阿军不管三七二十一，大步往里走，我和阿定也快步跟上。&lt;/p&gt;
&lt;p&gt;我们刚刚进门不久，门口的保安冲出来，问我们：“请停住，你们几个来这里干什么？”&lt;/p&gt;
&lt;p&gt;阿军镇定地回答：“我们是学生，第一次来县城，想来看看县政府长什么样子。”&lt;/p&gt;
&lt;p&gt;“这里不允许外人随便进入参观，请你们快点离开。”&lt;/p&gt;
&lt;p&gt;阿军还想争辩，我和阿定早已经被吓坏，于是拉着他往大门走。阿军愤愤不平：“这里是为人民服务的场所，他们居然不允许人民进入，我很生气。”&lt;/p&gt;
&lt;p&gt;我安慰他：“不允许就算，我估计里面也没什么好看。”&lt;/p&gt;
&lt;p&gt;我们出来之后继续往北走，没走几步就来到一条我感觉既熟悉又陌生的街道。这条街道的铺面和摊位像极了灵镇集市的样子，看起来是一条很老的街道，我注意到路牌写着“解放路”，说明这条街至少有五十年的历史。&lt;/p&gt;
&lt;p&gt;原来这里是县里的旧街，街道除了更宽更长，样子和灵镇类似，两边的店铺也长得很像，街道上来来往往各类人群，两旁摆卖各种商品，我还看见两三个和灵镇一样的当街理发店。靠近中间的地方有一个类似灵镇卖衣服、卖杂货的集散地，也是用水泥板砌起来，里面摆满扫把、锅碗瓢盆、收音机、电池，还有各种干货。沿着集市往里走，能看到阿公阿婆们当街摆摊卖蔬菜水果，还有卖活鸡活鸭的摊位，摊位前面的牌子写着“汤鸡”、“汤鸭”，这个“汤”是一个错别字，应该是“劏”，这个字是粤语中“杀”字的发音，街道上不时能闻到酸笋和榨粉的味道。看到这么熟悉的场景，我一下子对这条街产生了好感。&lt;/p&gt;
&lt;p&gt;阿军对我们说：“这里应该就是县城同学说的老城区，听说这一带在民国的时候就已经很繁华。”&lt;/p&gt;
&lt;p&gt;我想到英语老师要求每个人都要买放音机来练习听力，心想这里应该会便宜些，于是决定到里面去买。&lt;/p&gt;
&lt;p&gt;我们转了两三个摊位，来到一位看起来比较面善的大婶的店铺前，她笑眯眯地问：“阿弟，想买点什么？”&lt;/p&gt;
&lt;p&gt;这里的收音机有大有小，我想大的一定很贵，就指着旁边一个看起来比较小的问她：“这个放音机多少钱？”&lt;/p&gt;
&lt;p&gt;“二十块，这个很好，阿弟你真有眼光。”&lt;/p&gt;
&lt;p&gt;我们都觉得很贵，这可是我们初中将近一个月的饭钱，阿婶看见我们犹豫，继续说：“这个是最新款的，你们看它体积小，很方便携带。”&lt;/p&gt;
&lt;p&gt;我心想原来越小的越贵，于是我又指着另外一个大点的问她：“那这个要卖多少钱？”&lt;/p&gt;
&lt;p&gt;“这个的喇叭很好，这个贵点，要三十块钱。”&lt;/p&gt;
&lt;p&gt;看来我又错了，这时候阿军问她另外一个不大不小的问：“这个呢？”&lt;/p&gt;
&lt;p&gt;“这个只需要十五块钱。”&lt;/p&gt;
&lt;p&gt;我们跟她讨价还价，她坚持要卖十块，我们只想给她八块，她终于松口：“九块钱，我就当帮你们带三个货。”&lt;/p&gt;
&lt;p&gt;我正想答应她，阿军很坚决地说：“八块钱，不行我们就走。”说完他就拉着我们离开，这时候阿婶从后面喊：“阿弟，回来吧，八块就八块。”&lt;/p&gt;
&lt;p&gt;我们付完钱后，阿婶笑眯眯地问：“你们是哪个学校的学生？”&lt;/p&gt;
&lt;p&gt;“武…”&lt;/p&gt;
&lt;p&gt;“附近的学生。”&lt;/p&gt;
&lt;p&gt;没等我说完，阿军就抢过我的话。&lt;/p&gt;
&lt;p&gt;阿婶一边把钱收进钱包，一边笑眯眯地说：“哦，我知道，我有个女儿也在武中上学。” 我们继续往前走，看见一栋样子很特别的房子，长得和街道上的其他房子都不一样，年代比周围的建筑更加久远，两边高高的柱子延伸到房子前面的走廊，朝街道的正上方镶嵌着一个已经退了色的五角星，从样子来看并不是后来添加上去，我想起来民国时期的国旗也带有五角星。&lt;/p&gt;
&lt;p&gt;经过这栋房子后，我们来到一家粉店，远远就闻到炒酸笋的味道，我们早已经肚子饿得咕噜噜响，我感觉口水都快流出来，阿军提议：“我们尝一尝县城里的老友粉吧。”&lt;/p&gt;
&lt;p&gt;我们坐下来，一人点一碗老友粉，这个店很火，座位已经摆到街边，我之前没有吃过老友粉，阿军说老友粉都是一份一份现炒，他还专门点一份老友杂粉——配料有瘦肉和猪粉肠。&lt;/p&gt;
&lt;p&gt;这家粉店的老板当街炒粉，我们坐在座位上就能看见他熟练地工作，旁边是一份份已经切好的粉料，用碟子来装，碟子里有酸笋、几片瘦肉、大蒜、豆豉、辣椒。老板开大火烧热锅，加入半勺油，接着倒入碟子里的粉料，爆炒一两分钟后，加入酱油和盐，然后从旁边的大锅里勺一大勺煮沸的骨汤，两分钟后放入一个人份的扁粉，等水煮开三十秒就出锅倒入消毒后的不锈钢碗。老板一个人管三个锅，五分钟可以炒出三份老友粉。&lt;/p&gt;
&lt;p&gt;我尝了一口，马上被辣味和酸笋呛住，鼻子想打喷嚏，但是味道非常美味，习惯辣味之后，我大口吃起来，不禁感叹：“这粉真的很好吃。”&lt;/p&gt;
&lt;p&gt;阿军一边吃一边说：“这家很不错，用的是天等辣椒酱，很够味。”&lt;/p&gt;
&lt;p&gt;不到十分钟，我们把粉和汤都一扫而光，额头和背后出了一身汗，我想如果是冬天吃这个粉，一定更爽快。&lt;/p&gt;
&lt;p&gt;吃完粉后，我们原路返回，经过刚才的新华书店，我早就想进去看看，阿定和阿军在我的怂恿下，跟着我一起进入书店。书店确实很大，种类繁多的书籍整齐地排在好几个大书架上，我觉得比学校阅览室的书要多很多倍，特别是各类参考书和模拟试卷，这些五花八门的图书吸引住了我们。书店里有很多学生，看见很多人在旁边翻书看书，我们也小心翼翼地拿起书来翻看。&lt;/p&gt;
&lt;p&gt;我看见指示牌提示科普书在二楼，于是自己走到了二楼，穿过文学区的时候，我看见同班同学田茉正聚精会神地看书，她捧着一本我没有听过的书《傲慢与偏见》，正看得津津有味。我偷看她一眼，心里砰砰砰地跳，她似乎意识到有人看她，抬起头往我这边看，我赶紧把脸迅速移开，转身假装在找书。我没敢上去打招呼，几分钟后我听到楼下有人叫她的名字，似乎是她的妈妈叫她回家，她带上刚刚拿的那本书往一楼走去，我从远处一直盯着她，直到她的背影消失在楼梯的转角处。&lt;/p&gt;
&lt;p&gt;我们在书店一待就超过一个小时，走出新华书店的时候，天色开始暗下来，华灯初上，街道两排的路灯都已亮起来。我们原本打算继续原路返回，来到南门菜市的附近的时候却找不到方向，天黑之后，街道长得和白天完全不一样，我们不知道该往哪里走。 阿军说：“只要找到五海桥，过桥往里走就是学校。”&lt;/p&gt;
&lt;p&gt;我们问路边的一个准备收拾菜摊回家的阿婆：“请问一下五海桥怎么走？”&lt;/p&gt;
&lt;p&gt;阿婆听到五海桥，她指着一条小路说：“一直往前走，就能看见。”&lt;/p&gt;
&lt;p&gt;我们三个沿着这条路走，差不多十分钟来到一条大的公路，我们又问了一个路人，他告诉我们五海桥还得往北走。我们继续往北走，果然看见一座桥，可是我感觉这座桥和今天下午看到的完全不一样，过桥之后走了很远也没有看见民族高中。我们迷路了，天色越来越黑，我心里有些发毛，万一遇到抢劫的怎么办，这时候我想到电影里的场景，我和他们提建议：“安全起见，我们还是做个三轮摩的回去吧。”&lt;/p&gt;
&lt;p&gt;阿军和阿定同意我的建议，我们叫了一辆三轮摩的，告诉他要去武缘高中，司机看见我们是学生，要价三块钱，我们也不讲价，正好一个人一块钱。&lt;/p&gt;
&lt;p&gt;司机开得飞快，三轮摩的飞奔在路上，风一阵一阵从前面吹来，偶尔辗到大石头或者坑洼的地方，我感觉被抛了起来。司机告诉我们，县城有两座五海桥，刚才我们迷路的地方是新五海桥，民族高中出来的这座是旧五海桥。&lt;/p&gt;
&lt;p&gt;经过约十分钟，我们又回到了校门口，走进校园，我顿时觉得温暖和安全，远离家里几十公里，现在才深深感受到：学校和宿舍就是我们的家。&lt;/p&gt;
&lt;p&gt;第二天下午自由活动时间，我来到多媒体教学楼一层的图书馆阅览室,希望能找到昨天新华书店见到田茉看的那本书，我没有找到《傲慢与偏见》，却看到了杜兰特先生的《哲学的故事》，虽然这本书只有几位哲学家的故事，但是它更详细、更清楚地描述了这些哲学家的生平和思想，我也能更深入地了解人类近几百年来的哲学进展。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》九、辩证的世界</title>
      <link>https://dodoro.chouxiangpai.com/archives/1322/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1322/</guid>
      <description>&lt;p&gt;我看见杂志上经常提到：失恋是一次成长的机会。主人公们在失恋之后都开始陷入更深的思考，他们经常努力学习、埋头苦干，最终获得自我升华，个别人甚至会成就一番事业。我其实没有谈过恋爱，前段时间的那段小插曲也只是我一个人的想象，可是我打算也学小说的主人公，像他们一样奋发阅读。&lt;/p&gt;
&lt;p&gt;这段时间我看完《哲学的故事》，我了解到黑格尔和柏拉图之间似乎有某种联系，马克思的思想源泉则直接来自黑格尔，黑格尔和马克思都是德国人，德国总是出哲学大师，除了他们之外，还有康德和尼采。&lt;/p&gt;
&lt;p&gt;我没有完全接受唯物主义的论断，特别是和阿哲讨论叔本华和尼采的精神意志论之后，我不敢下定论认为唯物论这种哲学观就是解释世界的真理。我崇拜的数学家里的哲学家，他们也并非完全接受唯物论，现代哲学之父笛卡尔，他就认为这个世界是物质和精神的二元性，甚至伟大的罗素也对基于唯物论的哲学观保留意见。&lt;/p&gt;
&lt;p&gt;即使如此，黑格尔的辩证思想还是深刻影响了我，我也认真去学习辩证法，不仅辩证地看待好人和好事，也开始辩证地看待坏人和坏事，特别是历史上发生的各种事件，我认为一定也存在辩证的两面性。我还从阿宇那里确认阿军之前的说法：反法西斯战争里正规军做了巨大的贡献。如果从辩证的观点来看待二战，那么就非常合理。&lt;/p&gt;
&lt;p&gt;这段时间的课堂正好是关于哲学和唯物辩证法，我迷上了哲学，不仅纯粹去阅读，还进行大量思考，我和阿哲经常探讨各种问题。不知道是否因为这个原因，我的政治科目的测验成绩突飞猛进，连续好几次的测验考试，我几乎都答对所有的不定项选择题，以至于政治老师老赵突然对我特别关照，每次课堂其他同学无法回答的问题，他都让我起来作答。&lt;/p&gt;
&lt;p&gt;刚刚提问的是田茉，田茉站起来之后非常直接地回答：“这个问题我也不知道怎么回答。”&lt;/p&gt;
&lt;p&gt;老赵很友好地让她坐下，接着说了一句：“田茉是一个聪明的孩子。”&lt;/p&gt;
&lt;p&gt;不知道这句话是否会招来同学的羡慕、嫉妒甚至恨，我也很期待老师这样的表扬。没想到下课之后，老赵真的来到我的座位前问：“你平时都喜欢看什么书？”&lt;/p&gt;
&lt;p&gt;“我看过《苏菲的故事》和杜兰特的《哲学的故事》，我喜欢哲学家、数学家罗素先生。”&lt;/p&gt;
&lt;p&gt;“罗素先生是一名伟大的哲学家，喜欢哲学的孩子是爱智慧的孩子。”&lt;/p&gt;
&lt;p&gt;老师的这句话给予我极大的鼓励，我打算除了把课堂提到的知识学好，一定要好好认真罗素先生的哲学思想。&lt;/p&gt;
&lt;p&gt;不断深入的阅读，罗素的哲学理念深刻影响了我，罗素和马克思一样对人类的苦难怀有深切的同情和关怀，他们都是追求自由和平等的哲学家，罗素是一名和平主义者，他希望通过平和的方式推动社会的演化，马克思则是一位不惜一切代价也要实现人类平等的理想主义者。&lt;/p&gt;
&lt;p&gt;校园文化节还在如火如荼地进行，靠近年底的活动总是很多，学校马上要举办一次全校辩论赛，我以前从来没有听说过辩论赛，也从未想过要参加比赛。阿航把消息传达之后，班里的同学都不太感兴趣，大概是大家也都没有听说过辩论赛。这时候阿航对我说：“我经常听到你讨论辩证法，又喜欢数学，你就去报名参加吧。”&lt;/p&gt;
&lt;p&gt;我委婉地拒绝阿航的建议，可是他却坚持要求我报名：“这次你必须要报名参加，辩论赛最重要的是需要逻辑思维，你那么喜欢数学，一定可以做得很好。你就代表我们班参加比赛吧，这也是为了班级的荣誉。”&lt;/p&gt;
&lt;p&gt;我继续推脱：“我连普通话都说不好，这个太强人所难。”&lt;/p&gt;
&lt;p&gt;阿航的态度非常坚决：“不行，你得代表我们班级参加，非你莫属。”&lt;/p&gt;
&lt;p&gt;我其实觉得阿航非常适合参加这个辩论赛，他的普通话比我好，见识也比我要广，我推测他一定是觉得自己可能会被推荐，打算先下手为强，在大家推荐他之前先把我推上去。&lt;/p&gt;
&lt;p&gt;班里的另外一位选手是萧影，我估计她也是因为在同学中表现出对数学感兴趣才被选中。我们和另外一个民族班的两位同学搭档，他们也是派出一位男生和一位女生，男生叫阿滕，他是另外一个县城里的学生，听说他很喜欢看畅销财富图书。&lt;/p&gt;
&lt;p&gt;我从来没有想过自己要代表班级出征辩论赛，甚至连辩论是什么都不知道，还好阿滕买了两本关于辩论的书籍，我和萧影从零开始学习什么是辩论赛，了解一辩手、二辩手、三辩手和四辩手都该干什么。&lt;/p&gt;
&lt;p&gt;我们选到的题目是“中学生理财利大于弊，还是弊大于利”，通过抽签方式来选择正反方，我们幸运地抽到正方，大家都觉得我们必胜，理财是这段时间的热点，中学生当然应该学习理财，我们这些上寄宿学校的学生每个学期都带着一小笔钱作为生活费，学会不乱花钱当然很重要。&lt;/p&gt;
&lt;p&gt;我们做了很多准备，阿滕是一辩手，负责立论，他最喜欢的一本书是《穷爸爸和富爸爸》，这本书就是讲述理财对于一个人的成长是何等地重要。我第一次读这本书，里面的观点句句都支持理财，封面还写着销量连续几周排行第一，我似乎看到了我们拿下辩论赛的尚方宝剑，心里想着这本书一定可以助我们一臂之力。&lt;/p&gt;
&lt;p&gt;萧影和另外一个女生负责二辩和三辩，她们在公辩环节中提出问题并回答对方问题。我一直有一个担心，前几日我从阅览室查阅资料的时候看到一种说法，辩手们说话都很厉害，有人甚至觉得如果普通话够好，村里那些吵架特别厉害的人非常适合参加辩论赛。当然也有另外观点认为，辩论要求讲究论据，有理不在声高。&lt;/p&gt;
&lt;p&gt;我是四辩手，负责最后的答辩总结，我打算引用著名数学家罗素，他推崇理性思维，学生学习理财是一种理性的表现；我还要引用哲学家叔本华的观点，他认为人们要学会控制自己的意志力，那些毫无节制、没有自控力的人就会乱花钱。我认为我所了解的这些知识会成为答辩中的杀手锏。&lt;/p&gt;
&lt;p&gt;直到最后一天的时候，听说比我大一级的民族班的队伍还从班里请来同学，一起模拟过一次辩论，我们已经认真修改发言稿并互相演练，却从来没有找人来模拟辩论过。&lt;/p&gt;
&lt;p&gt;阿滕安慰我们说：“大家都是第一次参加辩论赛，没有模拟也没太大关系。”&lt;/p&gt;
&lt;p&gt;我们终于迎来比赛，地点在饭堂二楼，比赛安排在晚自习的第二节课，阿航专门带着班里的很多同学来给我们加油，我看见田茉也跟着过来，我看了她一眼，她面带微笑地对我说：“加油！”&lt;/p&gt;
&lt;p&gt;我很激动，又有些困惑，脑子有些乱，这到底是怎么回事，我冷静想了一下：原来我们并没有分手，那都只是我自己的想法，田茉并没有离开我。她不知道我的好意，说不定她也并不在意阿斌的举动，想到这里，我释怀了很多。&lt;/p&gt;
&lt;p&gt;我还看见阿航坐在第一排，听见他小声地和周围的同学说：“听说前一场辩论民族班的同学输得很惨，希望我们要为民族班争取到荣誉！”&lt;/p&gt;
&lt;p&gt;辩论准时开始，阿滕很自信地开始立论：“中学生学会理财是一件非常重要的事情，这样可以避免乱花钱…最近非常畅销的图书《穷爸爸和富爸爸》中就极力强调理财的重要性。总而言之，中学生应该要学会如何理财。”&lt;/p&gt;
&lt;p&gt;接着是对方另外一个男生进行立论，他认为中学生理财同样会造成很大问题，比如拿钱去玩电子游戏，中学生自控力差，不能很好掌控金钱。&lt;/p&gt;
&lt;p&gt;然后是二辩手和三辩手，四个女生唇枪舌剑，互相交锋。对方的一个女辩手谭希的普通话也非常标准，她口齿伶俐、话语刁钻，在相互攻防阶段，我们完全被压制住。&lt;/p&gt;
&lt;p&gt;我听着很着急，我知道她只是像芝诺和公孙龙一样行诡辩之术。终于来到自由辩论阶段，听到对方两次狡辩之后，我站起来要回击，却正好和萧影同时站起来，萧影让我回答，我着急中带着紧张，一下子就嘴巴结巴，刚才胸中的千言万语怎么都说不出口。&lt;/p&gt;
&lt;p&gt;最后是四辩手总结，我心想一定要挽回颜面，我要把看到的所有哲学家和数学家都搬出来，把对方诡辩的发言权都驳倒，我们正方先发言。&lt;/p&gt;
&lt;p&gt;“著名的哲学家叔本华认为意志力非常重要，中学生需要锻炼并拥有这种意志力，如果连这点自控力都没有，拿钱去玩游戏和乱买东西，那么如何成为一名合格的人才…”&lt;/p&gt;
&lt;p&gt;我讲述的过程中，突然感觉周围一片静悄悄地，不知道大家是不是完全听不懂我的发言，弄得我有些心虚，声音变得越来越小声。&lt;/p&gt;
&lt;p&gt;我看了一眼老赵，他对我点头微笑，于是我提高嗓门。&lt;/p&gt;
&lt;p&gt;“伟大的数理逻辑学家罗素先生强调过：理性对人类非常重要。那么我认为理财是我们发挥理性作用的一次很好的机会，每一位学生都应该学习如何理财…总而言之，无论是从伟大的先知那里，还是从日常的生活经验，都充分地证明：中学生理财利大于弊。”&lt;/p&gt;
&lt;p&gt;场下响起热烈的掌声，我看见田茉和班里来的加油队一样，一直为我鼓掌，最后阶段我已经尽力了。&lt;/p&gt;
&lt;p&gt;对方也进行总结，现场直接打分，结果很快出来，我们只拿到一分，我不知道这一分是不是老赵特意给我们。&lt;/p&gt;
&lt;p&gt;我们和老师握手的时候，老师们都表示：“太可惜了，这个题目那么偏向你们，可惜你们准备不够充分，发言也不好。”&lt;/p&gt;
&lt;p&gt;我们失败了，这是一次彻彻底底的失败，辩论赛比的不仅仅是逻辑思维，对于我们这个层次的辩论赛来说，更多的是比口才和经验。阿航一直安慰我们，虽然我口头和队友说没关系，胜败乃兵家常事，但是我内心极度不甘心。&lt;/p&gt;
&lt;p&gt;晚上我梦见我们又和对手重新来了一轮辩论，这一次我拥有田茉那样标准的普通话、拥有阿航的广博见识，我一个个问题把对方辩下去，一直辩到早上起床铃声响起。&lt;/p&gt;
&lt;p&gt;我在床上坐起来，丛林狂想曲的音乐响了起来，原来这是一场梦，我想起小学四年级的那次数学竞赛失利，已经很久没有这么不甘心的心情，我需要慢慢调整心态，也许我需要适应失败，未来的路还很长很远。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》二、老师们出场</title>
      <link>https://dodoro.chouxiangpai.com/archives/1202/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1202/</guid>
      <description>&lt;p&gt;我对高中的一切都很好奇，第一次离家这么远，预计最快也要一个月后才会回家一趟。陌生的同学、陌生的环境和陌生的生活，这些对我来说都是挑战，还好得益于初中三年寄宿的经历，我很快就适应了新学校的生活。我喜欢这里的环境，这里有丰富美味的伙食，身边都是优秀的同学，这里还有优美的环境，校园风景如画，美丽的灵水湖尽收眼底。&lt;/p&gt;
&lt;p&gt;开学的头几天，我约上阿定和阿军一起在校园里散步，走过实验楼，穿过足球场，绕过阅览室，我们谈论各自来到新校园的感受，他们和我一样，都很喜欢这里的生活。阿定和我初中同班，我们曾经一起为重点高中努力奋斗，他今年压线进入武缘高中，拿到公费生资格后，家境不太好的他得到了家人的承诺，保证他高中三年的所有费用，他也变得比初中的时候开朗很多。&lt;/p&gt;
&lt;p&gt;我在足球场上看见老师们在慢跑，其中一位是校长，我对他印象很深刻，开学典礼上校长发表一场演讲，他勉励新生们要珍惜时间、努力学习，他特别强调阅读的重要性，校长希望我们做有思想的人，有文化的人，特别要做独立思考的人。我印象最深刻的是校长提到二十世纪最伟大的哲学家维特根斯坦，我从书上看到过维特根斯坦，他是一位分析哲学和逻辑学大师。&lt;/p&gt;
&lt;p&gt;开学第一周高一学生参加军训，学校从邕城武警学校请来一批教官，我们要完成初级军事训练，这是学校半军事化管理的一个环节，每天机械地列队、齐步走、踢正步、叠被子。军训期间没有课程也没有作业，同学们都聚在一起，这是一个让同学们相互认识、相互了解的机会。&lt;/p&gt;
&lt;p&gt;阿宇和阿斌是所有同学里最活跃的两位，他们性格开朗活泼，表情和语气夸张，喜欢搞笑，总会弄得所有同学哈哈大笑，他们为枯燥的军训生活增添不少乐趣。不少女生也喜欢和他们搭讪，我注意到阿斌在台前表演的时候，目光总会往田茉的方向看去。田茉其实不太热衷军训，她也不像其他县城里的女生一样好表现，似乎这一切的热闹和她没有太大关系，看得出来她是顺着军训的大流走，我也是这样的想法，不出头不犯错，这是保守的策略，却也是最安全的选择。&lt;/p&gt;
&lt;p&gt;几天的军训里，大家都汗流浃背，烈日把白嫩的皮肤晒黑，男生无所谓，对于女生们来说，却是一场大灾难。宿舍里的阿风训练起来非常刻苦努力，原来他一直有一个要考军校的远大理想。第二周军训结束之后，阿风换下喇叭裤，理了一个平头。他郑重其事地对我们说：“从今天开始，我就要以军人的标准来严格要求自己。”&lt;/p&gt;
&lt;p&gt;阿宇打量着他：“你这个小平头看起来不错，我却觉得喇叭裤比现在这件西裤更适合你。”&lt;/p&gt;
&lt;p&gt;紧接着阿瑾鼓励他：“这个时候就开始为高考做准备，好同志，你是我们宿舍里的好榜样！”&lt;/p&gt;
&lt;p&gt;军训这一周的课外活动时间非常充裕，好几日我都和阿军泡在阅览室。初中的时候我就很喜欢逛阅览室，我对县里唯一重点高中的阅览室一直抱着仰慕之心，现在终于有机会进去瞧一瞧。学校有两个大的阅览室，其中一个位于多媒体教学楼的一层的图书馆，这里提供不外借图书阅读服务，另外一个在篮球场南边的大礼堂，那里有最新的杂志和报纸。&lt;/p&gt;
&lt;p&gt;结束军训的那个下午，有很多自由活动时间，我来到多媒体教学楼一层的图书馆阅览室, 这里的图书很多，科普书也不少，不过更多的是文学书籍，我此时只对哲学和数学感兴趣。我在科普书那一排看到《苏菲的世界》，封面上写着：一本哲学奇书，带你走进智慧的哲学世界。&lt;/p&gt;
&lt;p&gt;我坐下来安静地阅读，发现这本书比我之前看的《哲学与数学简史》写得更生动，通过主人公苏菲的哲学课描述古往今来的哲学家的故事。我一直读到图书馆关门，正好读到笛卡尔部分，这些内容和我之前看的书差不多。&lt;/p&gt;
&lt;p&gt;整个周末的课外时间，我继续回来阅读这本书，跟随苏菲的哲学课，我漫游于哲学的世界。通过这本书的生动叙述,我了解到笛卡尔之后很多哲学家的故事，特别是斯宾诺莎、洛克和休谟、康德、黑格尔和马克思。&lt;/p&gt;
&lt;p&gt;我喜欢这个阅览室，如同初中的那个简陋的阅览室一样,我在这里找到熟悉的感觉,这里的书籍更多更全,它们成为我打开通往更远世界的一扇窗口。&lt;/p&gt;
&lt;p&gt;军训之后就开始正式上课，我很期待与每一位老师相逢，特别是中考科目的老师，初中以来，我一直就听闻武缘高中的老师教学水平高、各有千秋，现在终于可以一睹他们的风采。&lt;/p&gt;
&lt;p&gt;第一节是语文课，铃声刚停住，我看见一位带着眼镜、留着边分头的人走进教室，他微微仰着头，手水平地端着课本，走上讲台后，他拿起粉笔转身用狂草写上自己的名字，字迹写得太像明星的签名，我没能马上认出来。&lt;/p&gt;
&lt;p&gt;“同学们好，从今天起我担任你们的语文老师。各位都是各个乡镇来的高手，我的目标就是让你们成为高手中的高手。你们从学前班就开始学习语文，已经近十年时间，现在还需要继续学习三年，毫无疑问语文非常重要。”&lt;/p&gt;
&lt;p&gt;“学习语文，最为关键的地方是什么？有没有哪位同学来回答？”他一边面带微笑说话，一边伸出食指在空中画一条弧线，他环顾四周，看见没有人举手他继续讲话。&lt;/p&gt;
&lt;p&gt;“语文最重要的是语言的感觉，这种感觉需要通过大量的阅读来养成，这里我要特别强调，名著的阅读可以极大提升语感。那么你们都读过什么名著呢？是否读完四大名著？我相信很少有人做到。我知道你们还有数理化的题目要解，可是我还是要求你们至少读完《红楼梦》和《三国演义》。”&lt;/p&gt;
&lt;p&gt;“当然，语文另外一个重要的特点就是需要记忆，或者说模仿，学习语言本来就是从模仿开始，语文是书面语言，同样也来自模仿。所以我会要求你们每周都写读书笔记，从这周开始，一直坚持到毕业，谁认真坚持，三年后一定会大有收获。”&lt;/p&gt;
&lt;p&gt;我一边听一边做笔记，这里的老师果然不一样，第一节课就从战略上把课程学习的要点说清楚，顿时感觉我的语文课白学十年。下课之后，我到第四排去找阿军，听到有同学讨论语文老师：“我和语文老师在同一个镇，他以前就在我们初中上课，教学突出，被破格提到高中教书。”&lt;/p&gt;
&lt;p&gt;我还听到后面的女生在讨论：“听说他是另外一个民族班的班主任。”&lt;/p&gt;
&lt;p&gt;我最期待的是第二节数学课，我很想知道高中数学老师是什么样一个人，他会不会也是另外一个魏尔斯特拉斯——完成微积分严密化的中学教师。我有一大堆问题想咨询他，我想和他咨询非欧几里德几何的问题，想跟他谈论费马大定理，我更想知道他最崇拜的数学家是哪一位。怀着激动的心情，我迎来数学老师，同样是带着眼镜，看外表似乎是我喜欢的类型。&lt;/p&gt;
&lt;p&gt;“大家好，欢迎大家来到武缘高中，我是你们的数学老师，高中数学比初中数学的知识面更广，内容更深，你们需要下更大的功夫来学习，高考数学和中考完全不是一个等级。不过不用担心，你们有三年的时间来准备。”&lt;/p&gt;
&lt;p&gt;“各位以前都是尖子生，以后却不一定会是尖子生，学校都说你们代表这个年级的精英，可是如果不努力，可能就会名不副实。今年我们学校有一位学生高考数学拿到一百四十，很了不得，我不知道我们这里是否会有人三年后能超过他。”&lt;/p&gt;
&lt;p&gt;听到这里，我暗地里下决心要超过这位学长。&lt;/p&gt;
&lt;p&gt;下课铃声响后，老师没有马上离开教室，很多人上去和他讨论问题。看见他往我们这一排走来，我迫不及待拿着课外读物问他非欧几里德几何问题，同时也是想展示我对非欧几里德几何的理解。没等我把话说完，他却给我当头一棒：“这本书可以直接扔掉，对高考没有任何作用，你们现在的任务是掌握高中数学知识，基础还没有打好，不要就想着一步登天。”&lt;/p&gt;
&lt;p&gt;我被说的两耳发红，同桌阿思似乎在暗笑，我低头关上书本，巴不得找个地缝钻进去。老师说得有一定的道理，我也知道自己不可能是迦罗华、更不可能是高斯，但是这种说话方式却深深地伤害我的自尊心。我下定决心要把高中数学学好，迟早有一天我要让数学老师收回这句话。&lt;/p&gt;
&lt;p&gt;这时候坐在我后面的萧影开始为数学老师讲话：“数学老师是民族大学的本科生，本来有条件留在大学，却选择来高中，是一位很厉害的老师。”&lt;/p&gt;
&lt;p&gt;萧影留着短发，五官端正，说话时眼睛闪烁着亮光和热情，她来自剑镇。原来萧影很早以前就听说这位数学老师，他和她的爸爸原来是同学，萧影的爸爸也是数学老师，受到她爸爸的影响，她从小也很喜欢数学家的故事。&lt;/p&gt;
&lt;p&gt;紧接着她很自豪的跟我说：“我也喜欢读这类图书，不过我权当它们是课外读物，我最崇拜的数学家是欧拉。”&lt;/p&gt;
&lt;p&gt;“我最崇拜的是高斯，欧拉对算法技巧的运用值得称道，但是他花太多时间在演算上，最后都把自己的眼镜算瞎了。高斯则提出很多原创性的理论，特别在数论方面的成就很大。”&lt;/p&gt;
&lt;p&gt;我很得意地回她，我自以为她知道的东西没有我知道的多。&lt;/p&gt;
&lt;p&gt;她似乎不服气：“欧拉也很伟大，以欧拉命名的欧拉公式很完美，把最重要的自然对数e，圆周率π，自然数0和1统一起来。”&lt;/p&gt;
&lt;p&gt;我当然不会丢盔弃甲：“欧拉最著名的不是欧拉公式，而是欧拉乘积公式，这个公式可以证明素数无限，它与素数分布有千丝万缕的联系，通过它可以推导出黎曼函数，关于黎曼函数，黎曼提出著名的黎曼猜想，这个猜想现在都没有被解决。希尔伯特曾经说过：如果我沉睡一百年，醒来之后我要问的第一个问题就是黎曼猜想是否被解决。”&lt;/p&gt;
&lt;p&gt;她听完就不再说话，看来她应该没有听过欧拉乘积公式，我心里暗自得意，不过我一度很担心她让我推导这个公式，毕竟我现场是没法写出这个公式。&lt;/p&gt;
&lt;p&gt;第三节课是物理课，物理老师长着圆乎乎的身材，也许是思考太多的问题，他前半部分的头顶已经光秃。物理老师上课非常有热情，总是面带微笑，遇到他不同意的地方的时候就会做出夸张的下拉嘴巴表情。大家都很认真听课，当他讲到宇宙飞船挣脱地球引力实现环绕飞行的时候，拿着一根粉笔，站在讲台的一头，一边做出扔出动作一边说：“如果我现在站在珠穆朗玛峰，把宇宙飞船用一定的速度扔出去，它就可以挣脱地球引力，像这样…”他说完就把粉笔扔到另外一头，引得全班同学一片欢笑。&lt;/p&gt;
&lt;p&gt;我也挺喜欢物理，物理需要用到大量的数学公式，很多物理学家同时也是数学家，几乎每一位理论物理学家都有很深的数学背景。&lt;/p&gt;
&lt;p&gt;最后一节课是英语课，上课铃声停了近两分钟后，一位穿着长裙的高挑女子走进教室，她用一个在我看来已经相当标准的英语口音跟我们打招呼：“早上好，男孩子们，女孩子们。”&lt;/p&gt;
&lt;p&gt;很多同学和我一样都愣了一下，我看见田茉和几个县城的女生站起来，紧接着大家陆续站起来也用英语回应老师：“早上好，老师。”&lt;/p&gt;
&lt;p&gt;英语老师在课堂上，除了强调高考的重要性，也强调了口语的重要性，她希望我们不要再像初中一样，三年后学到的依然是哑巴英语。&lt;/p&gt;
&lt;p&gt;“原本口语在语言学习中是最重要的一个环节，我们的教育制度和环境的限制，导致大家都只会听和读，勉强能写一点，几乎不会说，这个完全背离了语言学习的初衷。我会尽量在课堂上给大家机会说，可是课堂的这点时间对于口语练习来说也只是杯水车薪，希望同学们在课后多找机会练习口语。”&lt;/p&gt;
&lt;p&gt;我除了会用蹩脚口音发出那几句常用问候语，口语几乎为零，我此时并不理解英语老师这段话的真正含义，我想大部分同学也一样，英语对于我们来说只是一门高考考试科目。&lt;/p&gt;
&lt;p&gt;“英语老师的裙子真好看，我也很想穿这样的裙子。”&lt;/p&gt;
&lt;p&gt;“那得等到毕业之后，学校默认的规则是不允许女生穿裙子。”&lt;/p&gt;
&lt;p&gt;“我们知足吧，没让我们天天穿校服就好啦。”&lt;/p&gt;
&lt;p&gt;“听学姐们说，这位英语老师一周内每天都换不同的裙子，我要好好观察一周，确认这种传闻。”&lt;/p&gt;
&lt;p&gt;后面的女生正在悄悄讨论老师的衣着，我这才注意到班里似乎没有女生穿裙子，难道这就是田茉剪掉长发、并换下那件美丽裙子的原因所在。&lt;/p&gt;
&lt;p&gt;下午只有一节化学课，上课铃响之后，走进教室的是班主任，原来他是化学老师。班主任和前几天的表现没有太多变化，依然是一脸严肃认真的姿态，偶尔努力露出一丝微笑，我总觉得那是挤出来的笑容。&lt;/p&gt;
&lt;p&gt;“化学是最简单的一门理科，只要你们愿意学，都可以学得很好，把元素周期表背下来，掌握化学方程式，多做习题，就可以拿到好成绩。”&lt;/p&gt;
&lt;p&gt;我认真地做笔记，高中三年的学习正式开始了，今天所有的老师都提到三年后的高考，三年的时间看起来其实非常长，我对未来的三年怀着憧憬，不知道三年后我将会如何。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》五、徒步十公里</title>
      <link>https://dodoro.chouxiangpai.com/archives/1211/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1211/</guid>
      <description>&lt;p&gt;我们住的宿舍楼靠近灵水湖畔，从窗户就能看见湖面，水蒸气带走很多热量，宿舍里显得没有那么闷热。今天一大早大家就起来打包行李和装备，全年级即将开始一次长距离徒步，这是学校素质教育的一部分，我从杂志上看到，国外很多初中和高中生都有类似的活动，学校希望通过这样的活动可以锻炼学生的意志力，缓解学习焦虑，并促进学生之间的交流。&lt;/p&gt;
&lt;p&gt;今年要去的目的地是桥镇的禄村，离学校距离大约十二公里，来回要走近五个小时，这个距离很长，我从来没有一次走过那么长的距离，这个距离对我们所有人来说都是一个挑战。前几天学校领导就已经安排好活动，预计九点左右从学校出发，十一点半到达，中午各自吃饭和休息，下午一点钟左右后返回，要到下午三点半回到学校。&lt;/p&gt;
&lt;p&gt;午饭是各自准备，很多同学都准备一点干粮，我们宿舍的干粮由阿瑾准备，他专门从超市买入压缩饼干，他拿着几块看起来非常干的灰色饼干，很得意地炫耀：“只需要吃两块，就可以保证你三个小时不会感觉到饥饿。这是类似《魔戒》里的精灵饼干。”&lt;/p&gt;
&lt;p&gt;阿瑾很喜欢小说《魔戒》，他已经看完三部曲，他还购买即将上映电影的海报，我没有听说过《魔戒》，听说是一部充满想象的小说，描写三个年轻人的冒险故事，我想阿瑾认为我们这次徒步也是一次伟大的冒险。&lt;/p&gt;
&lt;p&gt;全年级总共十个班，以班级为单位，将近六百人开始浩浩荡荡向目的地出发。按班级男生和女生各排一个队伍，我专门挑选在田茉后面的位置，田茉的前面是萧影，从谈话中，我才知道她们在同一个宿舍。队伍沿着灵水路走，离开民族高中后往前走一段，接着就走上公路，公路车辆很少，偶尔还会有拖拉机经过，班主任走在靠近路中间的一边，这是为保证学生的安全。&lt;/p&gt;
&lt;p&gt;走了几分钟后，远处传来一首旋律简单优美的儿歌，我记得这个旋律，歌名是《真善美的小世界》，我小时候看儿童节目的时候经常能听到这首歌曲。&lt;/p&gt;
&lt;p&gt;这个声音越来越近，田茉笑着对萧影说：“洒水车准备来了。”&lt;/p&gt;
&lt;p&gt;她果然料事如神，没过多久一辆装水的车从路的另外一个方向慢慢开过来，车子从两边往地面洒水，这是我第一次看见洒水车。&lt;/p&gt;
&lt;p&gt;田茉解释说：“从我懂事起，这个声音就一直在县城里出现，每天上午和下午各一次，每次听到这个声音就会回忆起小时候的很多趣事。”&lt;/p&gt;
&lt;p&gt;阿航跟我们说：“这首歌是迪斯尼乐园的歌曲，它描述了一个充满爱与美好的小世界。迪士尼五光十色的小世界中，充满了友谊和阳光，大家共同分享生活的美好和欢乐，受到真善美的教育。”&lt;/p&gt;
&lt;p&gt;萧影也知道这首歌的来源，她叹息地说：“我从小就很想去迪士尼乐园，不知道什么时候能去一趟。”&lt;/p&gt;
&lt;p&gt;我从来没有想过要去迪士尼乐园，听她这么一说，倒是也很想去一次，我很想见识一下这个乐园到底有什么魔力能吸引全世界的人们趋之若鹜。&lt;/p&gt;
&lt;p&gt;队伍行走差不多一小时后，来到一大片空地，看起来很荒凉。这时候我听见田茉对后面的萧影说：“这是原来是飞机场，我们小学经常来这里烧烤，以前材料和装备都是自带，男生们还自己背着锅过来。”&lt;/p&gt;
&lt;p&gt;“你们真幸福，改天让班主任也组织我们一起来这里烧烤。”萧影故意把声音提高，让旁边的班主任听到。&lt;/p&gt;
&lt;p&gt;我回头看班主任一眼，他眼睛注视着前方，假装没有听到。这时候阿宇也参与她们的对话：“这个原来是标营机场，最开始建设于民国二十七年，也就是一九三八年，当时是为了配合国民党桂系部队进行飞行训练，由于时间紧迫，两个多月就建完，后来还被日本轰炸机炸毁。解放后曾经是广西航空运动学校的教学基地，不过现在都已经变成荒地。”&lt;/p&gt;
&lt;p&gt;阿宇的话镇住了我们，他居然知道那么多事情，我好奇地问他：“你怎么知道这么详细？”&lt;/p&gt;
&lt;p&gt;“哈哈，我一直对历史很感兴趣，不仅喜欢看世界历史、中国历史，我也喜欢看地方历史。刚刚我们经过民族高中后的那座五海桥，当年是陆荣廷将军建的，现在走的这条通往邕城的公路也是陆将军最先建成。”&lt;/p&gt;
&lt;p&gt;我顿时仰慕阿宇在历史方面的博学，不过田茉似乎对历史不太感兴趣，她和萧影继续聊起她们烧烤的趣事。&lt;/p&gt;
&lt;p&gt;将近两个小时之后，火热的日头在天空发着耀眼的光芒，空气越来越热，我开始出汗，幸亏带两瓶水。队伍中已经有个别女生开始掉队，我看田茉和萧影也不再说话，看起来她们肯定也很累。按要求，我们不能休息，必须一口气走到目的地。&lt;/p&gt;
&lt;p&gt;我鼓起勇气和田茉搭话：“你以前走过那么长的路吗？”&lt;/p&gt;
&lt;p&gt;“从来没有走过，这么长的路，我一般都会选择骑自行车。”&lt;/p&gt;
&lt;p&gt;这时候我看见前面的阿航和阿斌依然斗志昂扬，他们真有力气，已经帮好几个女生拿东西。刚才阿斌来问过田茉是否需要帮助拿东西，田茉看了一眼他上手的几个包后拒绝了他的好意，我也想帮田茉拿东西，正要开口的时候，班主任跟上来插话：“就是因为很多人没有走过那么长的路，所以学校才组织这次活动，这是一次磨难教育，特别是对县城的学生，这是对大家身体素质和意志力的一次大考验。”&lt;/p&gt;
&lt;p&gt;田茉没有接话，班主任的话似乎在针对她，我们旁边这几个人里只有她是县城的学生，我记得以前总是听说城里的孩子大都是独生子女，深受父母宠爱，一直都是衣食无忧，也没受过什么劳苦。&lt;/p&gt;
&lt;p&gt;我接过话：“我家在农村，一次走那么长的路还是第一次，走到现在，我也感觉很累。” 班主任瞟了我一眼，带着不屑的口气说：“这点路算什么？红军长征的时候走的比这个长很多，你们要是参加长征，那肯定走不到延安。”&lt;/p&gt;
&lt;p&gt;我心想我才不参加什么长征呢，只希望能尽快到达目的地休息。慢慢地，大家都不再说话，还有大约四公里多，预计还要走将近一个小时。已经有很多人掉到后面，负责活动的两位老师在后面跟着走得比较慢的学生。田茉和萧影依然坚持跟着大部队的步伐前进，我能感觉到田茉已经很累，她紧闭嘴巴，努力往前迈步，不时地补水，她背后的包似乎变得越来越沉。我放慢脚步，等到和她肩并肩的时候，终于鼓起勇气对她和萧影说：“我来帮你们拿包吧，我平时爬山爬得多，这点路没什么。”&lt;/p&gt;
&lt;p&gt;田茉转头看了我一眼，似乎有些犹豫，这时候萧影先发话：“那就不客气了。”&lt;/p&gt;
&lt;p&gt;我接过萧影的包，然后伸手跟田茉拿包，她终于把包递给我，并客气地道谢：“非常感谢，你要是觉得太重，就还回来给我。”&lt;/p&gt;
&lt;p&gt;“不重，我扛得动！”&lt;/p&gt;
&lt;p&gt;我非常开心地接过她的包，内心激动又兴奋，随着心理的变化，脚底下似乎也变得轻松很多，顿时一点都不再感觉累，这种感觉真好。田茉卸下包袱之后，似乎也感觉轻松很多，我和她几乎是肩并肩往前走，我越走越有劲，我多么希望终点不要那么快到来。&lt;/p&gt;
&lt;p&gt;中午接近十一点的时候，我很不情愿地跟着队伍来到桥镇的镇上，刚刚听阿鲲说来到镇上之后，还有三公里才能到达目的地。很多同学在这里买矿泉水，我一直都听说桥镇是县里最富裕、最繁华的乡镇，确实如此，这里的店面和县城的很像，楼房也更多，街道更宽阔也更干净整洁。&lt;/p&gt;
&lt;p&gt;离开镇上后，马上看见宽阔的农田，这里不是丘陵地势，一片又一片田地连在一起，望不到边际，我们穿过一大片农田和一个接一个的果园之后，终于来到禄村。我们在村口的空地休息片刻之后，老师组织所有学生集合，年级领导开始讲话：&lt;/p&gt;
&lt;p&gt;“各位同学好，欢迎大家来到禄村，这个村是县里的模范村，这里属于桥镇，桥镇一直都盛产各类水果，县里最好的芒果、三月红荔枝、大石夹龙眼等优质水果都产自这里，村里的很多农民通过土地种植水果发家致富，这里涌现很多农业突击手。”&lt;/p&gt;
&lt;p&gt;“我们这一次来拜访禄村，一方面是让同学们了解现在农村里的建设情况，另一方面也是让同学们向这里的村民学习，把他们艰苦奋斗的精神运用到学习上，请大家珍惜这次宝贵的学习机会。”&lt;/p&gt;
&lt;p&gt;我观察这里的村民，除了村委的那几个领导，他们和灵镇的村民并没有太多的区别，大都穿着做工的衣服，脸蛋和手臂也被晒得黝黑，不过这里的楼房明显比灵镇大部分村子要多很多，很多家门前还停放着崭新的摩托车，看来他们确实是非常富有。&lt;/p&gt;
&lt;p&gt;我对参观果园和农田没有太大的兴趣，倒是看见田地里的白花菜和雷公根后很兴奋，村民们似乎不采摘这些野菜，这里的土地肥沃，长出来的雷公根非常嫩绿，我问阿宇：“你家里吃雷公根吗？”&lt;/p&gt;
&lt;p&gt;“当然吃啦，我妈妈经常摘回家吃，不过我不太喜欢吃，味道太苦。”&lt;/p&gt;
&lt;p&gt;田茉也加入我们的对话，她似乎对野菜很感兴趣：“我家也吃雷公根，我很喜欢吃，拿来煮汤，放点瘦肉末，非常美味。”&lt;/p&gt;
&lt;p&gt;我很开心地接过她的话：“特别是夏天里劳累一天之后，喝一碗下去很解乏、消暑，现在要是有一碗喝就很好。”&lt;/p&gt;
&lt;p&gt;她看着这些雷公根说：“我也想喝一碗，真想摘点回去，今晚给我妈妈煮。”&lt;/p&gt;
&lt;p&gt;我心里想着她要是真的想拿，我会给她摘一大捆。这时候班主任宣布午饭后的安排：“同学们现在可以开始吃午饭，一个小时之后返回学校，到县城之后，住在县城的同学可以自行回家。”&lt;/p&gt;
&lt;p&gt;班里那几位住在锣镇的同学很开心，他们吃完饭之后就可以很快回到家，这里离锣镇不过三公里。&lt;/p&gt;
&lt;p&gt;阿斌一脸叹息地说：“为什么我家不在锣镇啊。”&lt;/p&gt;
&lt;p&gt;阿瑾偷笑着说：“那你期待下次徒步的目的地在平镇吧。”&lt;/p&gt;
&lt;p&gt;“我才不要下次呢，目的地如果真的是平镇，那我们就更惨，走到平镇，大家都可以不用返校了。”&lt;/p&gt;
&lt;p&gt;平镇离这里还有十几公里，我觉得没有一个人会同意徒步到平镇。&lt;/p&gt;
&lt;p&gt;三零六宿舍同学拿出准备好的压缩饼干，我尝一口，特别干，也不甜，很像家里的米糠压缩而成。我转身看了看阿宇、阿军和阿鲲几个人，他们一边嚼饼一边拉着脸，也不太喜欢这个味道。&lt;/p&gt;
&lt;p&gt;阿瑾郑重地解释：“大家别想着这个是山珍海味，压缩饼干就是这个味道，请相信我，你们每人吃两块，就有足够的力气走回去。”&lt;/p&gt;
&lt;p&gt;我们将信将疑继续吃起来，我耗掉将近一瓶水才吃完三块。虽然口感不好，但是吃完之后不会觉得口渴，肚子也有很强的饱腹感，看来真的是传说中的“精灵饼干”。&lt;/p&gt;
&lt;p&gt;大约下午一点半，这是太阳最热的时候，我们开始返程，还要走一样距离的路程，这次我们班打头阵，我、阿航、阿宇、阿军、田茉和萧影，还有班里几位同学一起走在队伍最前列，我开心地继续帮田茉拿包。&lt;/p&gt;
&lt;p&gt;我们一起走在路上，步子沉甸甸，现在才是真正的挑战。大家路上都不再说话，火热的日头，滚烫的柏油路，路上时不时开过三轮车，司机总会回头向我们招手问是否要乘车，我不想坐车，这是意志考验我不能落后，当然还有一个原因是：坐车还得花钱。&lt;/p&gt;
&lt;p&gt;阿宇正义凛然地跟我们说：“刚刚过去的车上好像有我们年级的学生，他们居然坐车回去，这也太过分了。”&lt;/p&gt;
&lt;p&gt;阿军补充说：“如果我没有看错，刚刚那辆车上还有其他班的老师呢。”&lt;/p&gt;
&lt;p&gt;我正想着班主任是不是也偷偷做三轮车回去，没想到他带着另外一个小队伍赶上我们，班主任也没有撑伞，他已经被晒得脸色发红，汗水不停地往下流，看来他是做好走完全程的打算。看到班主任也如此，我们自然不甘落后，大家打起精神，继续向前进发。&lt;/p&gt;
&lt;p&gt;近两个小时后，我们来到县城，田茉说她家要往右边的车站走，我很想以帮忙拿包的名义送她到她家的楼下。当然这只是我的想法，我自然不敢这么做，何况班主任还在旁边盯着我们，我把包递给她：“再见，路上注意安全！”&lt;/p&gt;
&lt;p&gt;“谢谢你！各位同学，今晚见。”她打完招呼就往右边走，我有意识低放慢脚步，假装向右前方看，看着她离开。我们又走大约两公里，终于回到学校，今天的徒步活动我走完全程。&lt;/p&gt;
&lt;p&gt;下午休息之后，我又来到阅览室，继续阅读《哲学的故事》。这本书是我最近一段时间重要的精神食粮，从这里我接触到唯心主义和唯意志主义的思想，这些思想和课堂上的马克思哲学一样，深刻影响我对世界的看法，这是另外一个与黑格尔和马克思完全不一样的世界。&lt;/p&gt;
&lt;p&gt;我也是从这里第一次深入了解到罗素的哲学思想，我原来一直以为罗素只是一名数学家，阅读的不断深入，我发现他作为哲学家更加伟大。罗素是一位爱好和平和自由的哲学家，他拥有极高的智慧，我喜欢罗素，由于他在哲学方面的深刻思想，他成为我第三位最喜爱的数学家，我甚至觉得未来不会再有人可以超越他在我心中的地位。&lt;/p&gt;
&lt;p&gt;罗素先生认为数学是符号加逻辑，他在数学上最大的贡献就是基于集合论和数理逻辑写出了《数学原理》，我没有在图书馆找到这本著作，不过我看到了关于集合论的科普书籍，从这里我第一次了解到自然数、整数和有理数包含的数字的个数完全一样，因为这三种数组成的集合都可以一一对应，我还知道了实数包含的数字的个数却比这三种数更大，而且大得非常非常多。原来我曾经认为的无穷概念并不准确，同样是无穷的不同集合，它们并不一样大、也分大小，这样的知识让我感到非常激动和神奇。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》八、一个人暗恋的失恋</title>
      <link>https://dodoro.chouxiangpai.com/archives/1245/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1245/</guid>
      <description>&lt;p&gt;岭南的深秋没有任何一丝萧瑟悲凉，哪怕略感寒冷也并非刺骨，这样的天气让人如此亲近和喜欢。岭南无秋天，这里的秋天总是和夏季混淆不分。校园里种得最多的是扁桃树，它们也丝毫不理会二十四节气的变化，依然郁郁葱葱，似乎在和即将到来的冬天宣战，的确如此，岭南短暂的冬季根本无法让它们屈服，这些扁桃树常年绿油油地点缀着校园。&lt;/p&gt;
&lt;p&gt;课外活动时间，午后的阳光懒散而柔和，我走在扁桃树下，清爽的空气拂过面额，两边的翠绿从身边缓缓而过。我和阿航正往食堂前面的排球场走，今天有场大球赛，是女生的排球比赛。&lt;/p&gt;
&lt;p&gt;这段时间学校正在进行校园排球联赛，男生上周在一场比赛中被淘汰，今天下午轮到女生比赛，对手就是击败男生的班级，我们都希望她们能为男生复仇。田茉也是班里的主力，我想很多人都和我一样，很想知道这位成绩排前茅的学生在运动赛场上会有怎样的表现。&lt;/p&gt;
&lt;p&gt;我站在球场旁边，手里拿着中午就买好的矿泉水，我打算等比赛结束的时候送给田茉，我仔细想过很多次，最终还是觉得这个并没有很出格，也不会引起她或者其他同学的误会。比赛即将开始，队员们正在做热身运动，田茉、萧影都参加比赛，我希望田茉能赢下比赛，球场上的她，穿着印着班级名称的白色T恤和六分裤，脚上穿的是浅色回力鞋。&lt;/p&gt;
&lt;p&gt;随着口哨声响起，比赛正式开始，田茉第一个发球，她发的是大家都常用的正面下手球。只见她左手轻轻抛起球，球落在她身前右侧，她用右手击球，球正好过网，对方队员没有接住球，我跟着啦啦队的同学大声欢呼，我们拿下一分。紧接着，田茉一连三个发球得分，逼得对方叫了暂停，我和场外的男生一起死命地鼓掌。&lt;/p&gt;
&lt;p&gt;“大家要稳住，看好球，对方的水平并不比你们好多少，我观察了三次，她的发球路线一直都在中间，落点不是前就是后，好好加油，一定要破发！”&lt;/p&gt;
&lt;p&gt;对方的队长似乎很有信心，可是从她的脸色看得出来，她也不知道如何才能破解田茉的发球。&lt;/p&gt;
&lt;p&gt;比赛继续，田茉再次站在球场的发球线上，抛起，拍击，又拿下一分，我幻想着她凭一个人之力拿下这局比赛。她继续发球，可惜这次排球打到网上没有过网，对方扳回一分，我一声叹息，田茉跟队友举手致歉。&lt;/p&gt;
&lt;p&gt;萧影握住她的手，并鼓励她：“一个人拿下四分，已经很厉害了，刚刚那个球只是小失误而已。”&lt;/p&gt;
&lt;p&gt;对方第一位发球队员采用的居然是上手发飘球，两个球过来，连最擅长接球的萧影都无可奈何，我们没有任何招架之力。第三个球发出来，方向朝着田茉的方向，她敏捷地托球，可惜球飞出了界外。班长示意要暂停一次，田茉却坚持先不要暂停，从比分上看，现在我们并没有落后。&lt;/p&gt;
&lt;p&gt;我看见田茉调整站位，她往靠近中间站，目不转睛地盯着对方的发球队员。对方的球发出来，又是一个飘球，球的方向依然是往她这边，我比她还要紧张，心想一定要接住这个球。&lt;/p&gt;
&lt;p&gt;田茉站稳，身体前倾，两手往前伸，球落到她的手上，终于接住了！我正想着二传手在哪里，没想到她往前倾斜直接把球撑起，球过了网，对方根本没有料想到会有这样的进攻，她们没有接住球！我们继续领先一分，一阵热烈的欢呼声，我使劲鼓掌。&lt;/p&gt;
&lt;p&gt;这时候球场外的男生阿斌大声地往球场里喊：“小茉同学，你这个球接得实在太帅了！” 紧接着旁边的其他男生笑着在起哄，他们似乎在怂恿阿斌更进一步，这个声音让我感到刺耳，我觉得这个加油声是阿斌在表达对田茉的好意，田茉回头看了他一眼，微笑后继续准备接球。&lt;/p&gt;
&lt;p&gt;这一切我看在眼里、印在脑里、痛在心里，我恨自己不敢这么喊出来，内心一阵酸，我既羡慕又嫉妒阿斌。&lt;/p&gt;
&lt;p&gt;比赛继续，我暂时收回打翻的醋瓶子，一直听说女生的排球比赛其实就是发球和接球比赛，现在看来确实如此，毕竟大家都没有那么高的水平。就在这么你来我往中，我们班轻松拿下第一局比赛。凭借田茉的发球和萧影的接球，第二局比赛很快来到最后阶段，我们已经拿到赛点，只要拿下这个球比赛就马上结束，男生也可以一洗上周失败的耻辱。&lt;/p&gt;
&lt;p&gt;田茉又站在发球线上，她太阳穴那里流着汗水，运动后的脸庞淡淡地泛红，我把目光移到她的身上，白色T恤已被汗水浸湿，我似乎看见里面若隐若现的衣物，紧接着感觉内心怦然动了一下，我马上、立刻、赶紧把自己那个想法死死压住，并告诫自己不应该有这样的念头，她在我的心中永远纯洁无暇。&lt;/p&gt;
&lt;p&gt;“加油，五零八，加油，最后一个球！”&lt;/p&gt;
&lt;p&gt;球场外响起热烈的加油声，我把注意力重新转移到球场上。看起来两边的队员都很紧张，对方站在她的球线路上紧盯着她，我们班的队员则严肃地盯着前方。哨声响起，球场内外一片寂静，整个世界似乎停止了呼吸，出乎所有人的意料，田茉居然发了一个她整场比赛都没有发过的上手飘球，球飘忽忽地越过球网顶端，我屏住呼吸，一直盯着球的落点，最终这个球落在右边角落的界内，裁判示意是界内球，比赛结束！五零八班以绝对优势拿下比赛，我们激动地狂呼！男生比女生还高兴，我们都觉得这场球赢得非常解气！&lt;/p&gt;
&lt;p&gt;球场上的女生一起抱住田茉，我看见她的脸上挂满了笑容，这是我最喜欢看到的表情，她开怀的笑脸永远是最美丽的风景。队员们走下来，阿斌满面笑容地迎上去给她递一瓶刚刚打开的红牛：“小茉今天表现太好了，赶快喝一点红牛补充体能。”&lt;/p&gt;
&lt;p&gt;我手里紧紧握着矿泉水，呆呆地看着田茉接过那瓶红牛，内心的那个醋瓶连续翻滚好几轮。我感觉全身不舒服，一种自由落体的失落感，我觉得自己失恋了，这是一个人暗恋的失恋，对方还没有听到自己声音的时候就失恋，以前听过的那些失恋的歌曲，现在一下子都在耳边响起，它们似乎都在为我一个人悲鸣。&lt;/p&gt;
&lt;p&gt;暗恋就是这样一种感觉，对自己喜欢的人，会观察着她的一举一动，观察身边的异性对她的一举一动，任何一个无意的动作自己都会联想出很多很深的意义。我小心翼翼地观察田茉的眼神和动作，有时候我担心被她发现，有时候却又希望她能感觉到我的眼神，我谨慎地避免别人知道我在看她，因为生怕他人也跟我争抢，我把任何与她接近的人都当成可能的情敌和对手，哪怕理智告诉我这很荒唐，可是我依然情不自禁。&lt;/p&gt;
&lt;p&gt;我托着沉重的步子，带着强颜欢笑离开球场，吃完晚饭之后，我一个人来到灵水湖边坐下。我呆呆地看着水面，火红的晚霞印在上面，可是今天它们看起来一点都不美好。我一直盯着湖面，清澈的水面能看见湖底的鱼儿，听说它们的记忆很短暂，我倒是希望像它们一样，把曾经的记忆都抹掉，毫无知觉地快乐地游来游去，自由自在任逍遥。&lt;/p&gt;
&lt;p&gt;接近冬至的天黑得很快，很快就黑得看不见人，足球场上依然人潮涌动，我们正在排练校园广场舞，下周就要进行彩排，文娱委员从班主任那里申请两节晚读时间，希望我们能够在全校彩排之前要把舞蹈练好。&lt;/p&gt;
&lt;p&gt;五零八班和另外一个民族班合作表演一个奥运五环的舞蹈，我们要在即将到来的新年表演节目，这是校园文化节的一部分，校领导认为广场舞可以让所有的学生都参与进来，真正实现全体学生的素质教育。&lt;/p&gt;
&lt;p&gt;同学们都喜欢这个舞蹈，歌曲也选得很好，这些日子我也很喜欢这首歌曲，每次都期待排练这个舞蹈，五环合并的时候我正好可以拉着田茉的手，只是今晚我却怀着五味杂陈的心情来练习跳舞。&lt;/p&gt;
&lt;p&gt;“今天我们调整个别同学的站位，请大家按照文娱委员的安排重新站好位置，跑动的过程中也要牢记自己的位置。”&lt;/p&gt;
&lt;p&gt;昨天排列结束之后，两个班的文娱委员就考虑调整人员站位，有些同学跑得不够积极，拖在队伍后面。等到每个人都站好位置之后，那首熟悉的旋律再一次响彻广场。&lt;/p&gt;
&lt;p&gt;“我已经是个大女孩，在这个大千世界里。如果你已然离开我，不是什么重大的事。但我真正地感受到，我一定会很想念你，很想念你。我看见第一片落叶，是那样金黄而美好。外面是如此地寒冷，如同我内心的感受。”&lt;/p&gt;
&lt;p&gt;随着艾密莉亚这首《大千世界》歌曲的节奏，我想象自己拉着田茉的手在球场上飞舞，幻想着歌词是她的心声，我内心最温柔的地方似乎又被触动，或许我不应该为今天球场的事情就让她从我的脑海里分离出去。&lt;/p&gt;
&lt;p&gt;“阿靖，你的方向跑反了！”&lt;/p&gt;
&lt;p&gt;我愣了一下，才发现我手里拉的是阿航和阿哲的手，我回到现实中来，随着人群跑动，快速跑动的过程中我才注意到田茉的位置已经调整，合并五环的时候，她手里拉的是阿斌的手，我的心像被针扎了一下，也许是今天下午赢下比赛，她脸上一直挂着欢笑，可是我却高兴不起来。这时我又在想或许她这首歌并不是她的心声，这首歌是我的心声，歌词应该改成：我已经是一个大男孩。&lt;/p&gt;
&lt;p&gt;我把目光移开，闭上眼睛，随着音乐声，像行尸走肉一样，任由阿航拉着我四处乱跑。 “如今外面正在下雨，眼泪从我眼中滑落。这一切为何要发生，又为何要匆匆结束。你的手臂环绕着我，温暖得像火焰飞舞。但当我睁开眼睛时，你却已经匆匆离开。”&lt;/p&gt;
&lt;p&gt;我真的感受到被分手的伤感，明明是我不再想她，从头到尾一直都是我的想法，田茉并没有拒绝我，她也没有抛弃我。不知道是不是因为跳舞把头转晕了，我脑子有些糊涂，我似乎在和自己的想法斗气，我难道就这么小气吗？我这是怎么了，那个崇尚理性思维的我到底怎么了？&lt;/p&gt;
&lt;p&gt;晚自习我把作业写完之后，看着窗外朦胧夜色下的扁桃树，深秋的晚上已经带着几丝凉意，我感觉胸口有一股气堵着，于是我把窗户打开一个口，希望这秋风能吹走堵在胸口的这股气。过了几分钟，我听见田茉说：“坐在窗户旁边的同学，麻烦你们请把窗关一下，风有点冷。”&lt;/p&gt;
&lt;p&gt;我假装没有听见，拿起笔来假装在努力，我用眼睛余光偷偷观察她的反应，她没有继续说什么，从课桌里拿出一件衣服穿上，然后继续学习。又过了几分钟，我悄悄把窗关上了，内心有一个声音告诉我绝对不要让田茉着凉感冒。&lt;/p&gt;
&lt;p&gt;晚自习下课，我回到宿舍，阿风打开他的放音机，里面传出一首伤感的歌曲，歌手的声音柔软明亮，搭配伤感的曲风。&lt;/p&gt;
&lt;p&gt;“爱的痛了，痛的哭了，哭的累了。矛盾心里总是强求，劝自己要放手，闭上眼让你走，烧掉日记重新来过。”&lt;/p&gt;
&lt;p&gt;这个歌曲唱出我的内心，这就是我现在的心情，虽然我还没有说出心意，但是这是我的内心感受。&lt;/p&gt;
&lt;p&gt;我冲上去问阿风：“这首歌叫什么？”&lt;/p&gt;
&lt;p&gt;“你居然不知道吗？这是陈慧琳的《记事本》，我们上初中的时候红遍校园的歌曲。”&lt;/p&gt;
&lt;p&gt;我斩钉截铁地要求：“今晚请借给我听一晚，请务必借给我。”&lt;/p&gt;
&lt;p&gt;快速洗漱完毕，我打开从阿风那里借来的磁带，呆呆地坐到床上，开始一遍又一遍地听，一直听到全校熄灯、值周的同学离开、班主任回去，一直听到我自己累倒了、睡着了。&lt;/p&gt;
&lt;p&gt;我做了一个梦，梦见我终于勇敢对田茉说出自己的心意，而她也说她喜欢我，我紧紧拉着她的手一起跳舞，雨后的黄昏，我们手拉手一起在校园散步，我们在七色彩虹下追逐…&lt;/p&gt;
&lt;p&gt;第二天早上起来，我拉上阿宇和阿航一起从学校食堂旁边的校门出发去散步，从门口里面就能看见小红桥，向右可以通向老师们的宿舍，向左则通往灵水桥，这座大桥连接武缘河南北两岸，横跨武缘河，沟通县城与河南岸工业区交通，这里是灵水入河口位置。&lt;/p&gt;
&lt;p&gt;阿宇走过桥的时候跟我们说：“这条桥以前也叫‘工业桥’，七十年代初动工兴建，那时候正值文革，县革委工交小组领导施工，由于设计资料不完善，钢材不合规，拱架支撑的木料过小，加上施工质量管理不严，刚刚竣工主拱就崩塌。后来请自治区交通局派技术员协助，重新设计施工，终于建成通车。”&lt;/p&gt;
&lt;p&gt;我估算了一下，对他们说：“桥长至少有一百米，宽度有六米左右，桥洞看起来好大。”&lt;/p&gt;
&lt;p&gt;阿宇接着说：“这座桥的主孔跨径六十米，是整个县城境内主孔径最大的桥梁。”&lt;/p&gt;
&lt;p&gt;北边的灵水泉畔旁的路没修好，很少有汽车经过这座桥，这里倒是一个非常好的散步地点，视野开阔，安静舒适。我们三个人站在大桥上面，从这里可以远远看见学校。阿航看着天空对我们感叹：“这样的环境里适合吟诗做赋，可惜我不是大诗人。”&lt;/p&gt;
&lt;p&gt;我想到了徐志摩，于是脱口而出：“你们喜欢徐志摩的诗吗？”&lt;/p&gt;
&lt;p&gt;阿航抢着回答：“那当然，除了《再别康桥》，我还喜欢他的很多诗歌，他是新月派的代表，也是中国现代诗的先驱者。”&lt;/p&gt;
&lt;p&gt;我目不转睛地看着远处的河面，自言自语似地说：“我也喜欢，前段时间在图书馆还看到他的《偶然》，写得非常美：我是天空里的一片云，偶尔投影在你的波心。你不必讶异，更无须欢喜——在转瞬间消灭了踪影。你我相逢在黑夜的海上，你有你的，我有我的，方向；你记得也好，最好你忘掉，在这交会时互放的光亮！”&lt;/p&gt;
&lt;p&gt;背诵最后这首诗的时候，我又想到田茉，昨天那种失恋的感觉又涌上心头，还好徐志摩的这首诗忧伤中透露着不自暴自弃，最符合我此时的心境。&lt;/p&gt;
&lt;p&gt;阿航听完后也随我盯着河面，他用低沉的声音回应：“我也读过这首诗，这是他在剑桥再次遇到林徽因的时候写的诗，那时候林徽因身边已经多了一个梁思成，这首诗文风清澈又带着淡淡的忧伤，只可惜徐志摩英年早逝，不然一定能创作出更多的好诗。”&lt;/p&gt;
&lt;p&gt;阿宇补充说：“新月派不只他一个人，还有另外一名著名的诗人，他叫陈梦家，他也是考古学者，对中国的甲骨文有深入研究。”&lt;/p&gt;
&lt;p&gt;阿宇关于历史的发言总是能让我们大吃一惊，我知道甲骨文是中国最古老的文字，可是从来没有听说过陈梦家。&lt;/p&gt;
&lt;p&gt;我们一边聊天一边走，不一会儿我们就来到武缘河的另外一边，这里是学校对面的河岸，岸边有一片大草地，远处有两头牛正在悠闲地啃草，靠近河面的地块里种着油麦菜、莴笋、生菜等各种蔬菜。&lt;/p&gt;
&lt;p&gt;我们坐在草地上，看着开阔的武缘河，这里是灵水湖的入河口，清澈的湖水汇入浑浊的河流，两股水仿佛两种不同的力量合并在一起，最终它们融为一体，一起向西南方向流去，直至流入右江，这些水随着右江最终会和左江一起汇入邕江。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》六、爱神降临</title>
      <link>https://dodoro.chouxiangpai.com/archives/1215/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1215/</guid>
      <description>&lt;p&gt;几场秋雨过后，我终于听到了秋天的脚步声，南方的秋天总是来得很晚。我一直都很喜欢秋天，阳光不再那么浓烈，晚上睡觉也稍微变得凉快。昨晚刚下了一场雨，到现在还有稀稀疏疏的细雨飘下来，地面布满了坑坑洼洼的积水，今天的早操已经取消，但是我们的乐队练习并没有因此而中止。我非常兴奋来到饭堂二楼，前几日乐队老师刚刚教给我们一首新的曲子《月亮河》，我喜欢这首曲子，简单优美的旋律透露出淡淡的孤独和忧伤。&lt;/p&gt;
&lt;p&gt;第一次进乐队的时候，我就听到老师独自演奏这首曲子，曲子悠扬舒缓，配合小号明亮的高音，即使是五音不全的我，也能感受到这首曲子声音的穿透力，这声音犹如无形之剑，直击我的内心。我一直以为小号的旋律性不适合舒缓的音乐，没想到老师吹出这么动人的曲子，在我们的赞美和央求之下，老师终于答应等我们把三部曲练好之后，就会指导我们尝试这首曲子。&lt;/p&gt;
&lt;p&gt;阿航很自豪地对我说：“我知道这首曲子，出自电影《蒂凡尼的早餐》，电影里奥黛丽赫本用吉他独自弹唱，曲风简约又美妙。”&lt;/p&gt;
&lt;p&gt;我没有听过《蒂凡尼的早餐》，也不知道赫本是何许人，不过我想能够弹唱这么美好的曲子，她一定是一位美丽的女子。&lt;/p&gt;
&lt;p&gt;我按着曲子，配合按键，努力地练习，我期待着有一天能够完整独立地用小号演奏，并幻想等到我能吹好之后，看见田茉到饭堂吃早餐的时候吹响这首曲子，想到这里，我心中涌起了无尽的动力。&lt;/p&gt;
&lt;p&gt;练习结束后我们几个一起在饭堂吃早餐，今天不着急去教室，吃完饭后我独自一人漫步在校园里，穿梭于扁桃树下，这时候它们的叶子依然郁郁葱葱。沿着光明之路，我来到校园里的那棵桂花树下，桂花随着昨晚的秋雨已经盛开，一阵带着湿润空气的秋风吹来，把花的香味吹起来，空气中弥漫着桂花的芬芳，我迷恋这个味道，幻想着时光永远停留在这里。&lt;/p&gt;
&lt;p&gt;眼看早读时间即将到来，我快步往教室走去，穿过光明之路雕塑的时候，看见东北方向的太阳射出第一束光，这光透过天边的云，跨越雕塑的顶尖，照射在雨后的空气中，就在这么一刹那，我看见一道淡淡的彩虹，美丽的七色光令我着迷，忽地一阵风过来，把彩虹吹走了。&lt;/p&gt;
&lt;p&gt;今天上午语文课堂，老师要讲沈从文先生的中篇小说《边城》，书中只摘取一部分内容，读完课文之后我就被这部小说深深地迷住，上周预习课文的时候，我还专门到图书馆看完全本小说。&lt;/p&gt;
&lt;p&gt;我喜欢书中描写的湘西——那个犹如世外桃源的小镇，也喜欢翠翠的纯真和执着，更欣赏傩送在孤独中追求爱情的精神。读完小说的那一刹那，我多么希望走水路的傩送会很快地回来，我甚至想象着自己是他。&lt;/p&gt;
&lt;p&gt;课堂上语文老师让我们认真读一遍课文，然后讲述自己的感想，我读完后抬头看前面的田茉，我想她一定不知道她现在就是我心中的翠翠。&lt;/p&gt;
&lt;p&gt;语文老师很热情地问我们：“大家看完有什么感想，或者有什么问题吗？”&lt;/p&gt;
&lt;p&gt;我看着田茉的方向，举起手：“老师，我很想知道，小说里说翠翠开始胡思乱想，那么翠翠到底在想什么呢？”&lt;/p&gt;
&lt;p&gt;我一边提问，一边看着田茉，这个问题我不是问老师，我其实是在问田茉，她却只看着黑板，她当然不知道我在问她。语文老师似乎被我的问题问倒，他没有正面回答。&lt;/p&gt;
&lt;p&gt;“我想这个问题，需要同学们自己结合完整的小说，好好去体会，也许就知道答案，如果还没有答案，等到合适的时机就一定会有答案。”&lt;/p&gt;
&lt;p&gt;课堂的最后，语文老师很认真地跟我们传达这部小说更深的意义：沈从文先生只是描写了当时农村的另外一种可能性，那个年代里一个农村女孩被两个有钱地主的儿子喜欢，她可能会被逼成白毛女，但是也可能会成为翠翠，几十年之后的今天我们再回来看这个故事、再展望将来，我们应该也必须要有足够的智慧来理解，翠翠生活的这种社会的可能性。&lt;/p&gt;
&lt;p&gt;此时的我，并不能理解语文老师这段话的真正涵义，我也听说过白毛女的故事，不过我更喜欢翠翠所生活的这种社会。&lt;/p&gt;
&lt;p&gt;中午午休前，我拿出从图书馆借来的名家散文集，读到罗素先生写的文章《我为何而生》，我看到文章的注释里写着：高中课本也收录此文。&lt;/p&gt;
&lt;p&gt;这篇文章写得深情款款，我被罗素的语言深深地打动，初中的时候我知道罗素先生的故事，他是上个世纪最重要的哲学家和数学家，他提出的集合悖论导致第三次数学危机，没想到他的文章写得那么好，而且对人生的感悟是如此地纯粹和透彻。&lt;/p&gt;
&lt;p&gt;“三种情感，单纯而强烈，支配着我的一生：对爱情的渴望，对知识的追求，以及对人类苦难不可遏制的同情。”&lt;/p&gt;
&lt;p&gt;最近我正在寻找自己的新的座右铭，已经找到不少备选，一直犹豫不决，看到这段话我马上决定了这就是我最新的座右铭。我躺在床上准备午休，闭上眼睛，默念、背诵这句话，一直把它深深地刻在心底。&lt;/p&gt;
&lt;p&gt;下午最后一节课是化学课，学到元素周期表的铁元素，班主任很有兴致地讲课，看起来他今天的心情很不错，笑容明显多很多。&lt;/p&gt;
&lt;p&gt;“铁元素大家都很熟悉，我们的体内有很多血液，血液里最重要的一种元素就是铁，你们也一定闻过血液的气味，会有一股铁血的味道，这是暴露在空气中的亚铁离子被氧化变成了氧化铁。”&lt;/p&gt;
&lt;p&gt;大家似乎对这种说法不感兴趣，除了几个学生看着他之外，其他人大都是低着头，有些人在动笔写东西，似乎在做笔记，似乎又在忙别的东西。我看见阿哲盯着窗外发呆，我知道他在想什么，他一定想着足球场上的积水是不是已经干透，我们约好下课之后要去踢球。&lt;/p&gt;
&lt;p&gt;“关于人体内的铁，我给大家讲一个非常有意思的故事。”&lt;/p&gt;
&lt;p&gt;班主任故意把声音提高、把语速放慢，他一定想唤起大家听课的兴趣，他取得了成功，超过一半的同学把目光投向讲台的方向，我看见他油光的脸上散发着一丝得意。&lt;/p&gt;
&lt;p&gt;“曾经有一个年轻人，他非常喜欢一位美丽的姑娘，但是这位姑娘不相信他的心意，于是对他说：如果你用你身体内铁元素给我打造一个爱情戒指，我就答应嫁给你。青年非常勇敢，他也是真心喜欢这位姑娘，为了表达自己对姑娘的爱慕，他放干了自己的血，从里面提取出来的铁刚刚足够打出一个细细的铁戒指。戒指是做好了，这个青年也死掉了，那位姑娘伤心欲绝。”&lt;/p&gt;
&lt;p&gt;说最后一句话的时候，班主任用余光扫视全班，语气中带着叹息，他似乎在拿着个故事教育我们不要早恋，这个时候的恋爱对我们没有任何好处。即使如此，我还是很喜欢这个故事，觉得故事里的男青年非常勇敢。&lt;/p&gt;
&lt;p&gt;我看着坐在前面的田茉，她抬头认真地看着黑板方向，听得津津有味，脸上挂着难见的笑容，我很喜欢她开怀的笑脸。我呆呆地看着她，突然想成为那个青年，我甘愿为田茉做一个用我的血提炼出的铁来打成的戒指。&lt;/p&gt;
&lt;p&gt;这一瞬间我终于知道，我喜欢上她了，我喜欢田茉，从几个月前看见她的那一刻起，我就喜欢她，这是我从来未有的感觉，这是一种非常强烈的情感，炙热、浓烈、冲动。&lt;/p&gt;
&lt;p&gt;我想表达出来，我想表白，我想大声地对她说出我的心意，就像动画片里、电视里、电影里的男主角一样，我希望她能听到我的心声，我希望她能感受到我的呼吸。&lt;/p&gt;
&lt;p&gt;我从未有过如此浓烈的感受，这是我的第一次真正的情窦初开，这是青春的荷尔蒙，这是一种要向异性表达强烈爱慕的冲动。&lt;/p&gt;
&lt;p&gt;爱情原本是人类最基本的情感之一，而我却把它深埋那么长的时间，今天那颗埋在我心头的种子破壳而出，它发芽了。我终于理解罗素先生为什么在《我为何而生》中要把对爱情的渴望放在第一位，我深切地体会到这段话的真正意义。&lt;/p&gt;
&lt;p&gt;“爱情使人心醉神迷，如此美妙的感觉，以致使我时常为了体验几小时爱的喜悦，而宁愿献出生命中其它一切；爱情可以解除孤独，身历那种可怕孤寂的人的战栗意识，会穿过世界的边缘，直望入冰冷死寂的无底深渊；置身于爱的结合，我在一个神秘缩影中看到了圣贤与诗人们所预想的天堂。这正是我所追寻的，尽管它对于人类的生活或许太过美好，却是我的最终发现。”&lt;/p&gt;
&lt;p&gt;我内心的情感犹如火山爆发，似乎没有任何力量可以阻挡，以前我是想都不敢想，现在我终于敢想，我痴痴地看着田茉，我真的想向她表白，恨不得马上站起来向她表白。&lt;/p&gt;
&lt;p&gt;可是理智牵绊住了我，我不敢再跨出下一步，我甚至不是担心被对方拒绝，而是完完全全不敢踏出这一步。这里的环境和这里的观念死死压住我的冲动，班主任刚才的暗示犹如套在我头上的紧箍咒，这是多么沮丧的事情，我喜欢的人听不到我的声音、感受不到我的热情。&lt;/p&gt;
&lt;p&gt;下课铃声刚响，我猛冲出教室，这份激烈的情感需要有地方发泄，这个地方就是足球场。我和阿哲来到足球场，我奔跑着，拼命地奔跑，我感觉身体爆发出无穷无尽的能量，我连进好几个球，仍然停不下来。一个小时后我终于跑到筋疲力尽，一直跑到耗干最后一点力气，最后我托着疲惫的身躯回到宿舍。&lt;/p&gt;
&lt;p&gt;“阿靖，你今天踢球很猛啊，跑得那么卖命，你今天进了五个球，要是下学期的足球比赛也这样，我们班一定能赢。”阿哲和阿瑾都很惊讶我今天的发挥。&lt;/p&gt;
&lt;p&gt;“不可能，也许我这辈子就今天最能踢、最能跑，以后恐怕再也不会有这样的情况出现，今天非常特殊。”&lt;/p&gt;
&lt;p&gt;我想没有人能理解我这句话的涵义，只有我自己才知道，原本这个世界上还有另外一个人也知道，想想多么可悲，带着这样的心情我到冷水下，任由哗啦啦的水冲打头发。&lt;/p&gt;
&lt;p&gt;那就这样吧，发芽的爱情种子没有地方种下、也没有生长的土壤，我只能把它孤零零地晾在那里，我不知道它是否会这样慢慢地一点点干枯、死去。我不希望它就这么消失掉，此时我有一个愿望，希望它会一直在那发芽、不长大也不消失，让它默默地等待，等到阳光重新照耀它的时刻，等待它继续成长机会的到来。如果真的有一天，我想它一定会茁壮地成长，一定会努力地生长，一定会长成参天大树、开花结果。&lt;/p&gt;
&lt;p&gt;晚上我来到图书馆的阅览室，期待在这里能够遇到田茉，我扫视一圈，没有看到她的身影，周六的晚上她应该早已经回到县城的家里。&lt;/p&gt;
&lt;p&gt;我今天不再打算看哲学和数学科普书，我来到文学那一栏，搜索自己可能喜欢的书籍，我看到《徐志摩诗选》，课文里学到徐志摩先生的《再别康桥》，我很想知道他还写过什么诗歌，于是抽出书找到一个座位坐下，我慢慢品读徐志摩留下的诗歌，跟随着他的诗歌，我似乎进入另外一个奇特的世界，那里充满想象和浪漫。&lt;/p&gt;
&lt;p&gt;第二天早上起来，昨天奔跑的疲惫似乎很快就过去，我心中燃起的爱情火花并没有熄灭，感觉周围的一切都如此美好。今天天气晴朗，开阔的天空只飘着几朵白云，接近傍晚时分，从宿舍能看见天空西边的晚霞，火红的云彩总是如此美丽，让人惊叹不已。阿瑾正躺在床上看报纸，突然他大声地宣布：“今天晚上将会有狮子座流星雨！这是二十世纪以来首次在中国观测到的流星大暴雨。”&lt;/p&gt;
&lt;p&gt;我们凑过去看报纸的报道：据专家预测，今年的狮子座流星雨将出现三个高峰时段，第一个是11月18日18时01分，每小时天顶流星数2500颗，第二个是11月19日凌晨1时31分，每小时天顶流星数9000颗，第三个是11月19日凌晨2时19分，每小时天顶流星数15000颗，后两次高峰将是我国观测的最佳时机。&lt;/p&gt;
&lt;p&gt;我以前在家里的楼顶经常能看到美丽的流星，却从来没有看过流星雨，我想象着流星会像下大雨一样在夜空飞过，这样的场面一定非常壮观。&lt;/p&gt;
&lt;p&gt;晚自习的课间时间，同学们都在讨论今晚的流星雨，大家都期待今晚夜空的盛大演出。我在走廊听到田茉和萧影聊得正高兴：“我初中的时候对天文学非常感兴趣，当时有人来学校进行天文科普，我还怂恿家里人买了一套天文望远镜和很多天文学照片。”&lt;/p&gt;
&lt;p&gt;“哇，听起来非常不错，用望远镜能清楚月亮和星星吗？”&lt;/p&gt;
&lt;p&gt;“可以清楚看见月亮表面，有点像蒸瘦猪肉末后的表面，不过星星的话，只能看得比肉眼更亮一点，看不到星星的表面。”&lt;/p&gt;
&lt;p&gt;原来田茉对天空很感兴趣，我没有见过天文望远镜，还好今晚的流星雨只需要肉眼就可以看到。&lt;/p&gt;
&lt;p&gt;晚自习下课之后，我们兴奋地返回宿舍，刷牙洗漱后大家躺在床上，静静地等待流星雨的到来。刚才下课之前，我听阿航说今天学校领导有可能破例让我们看流星雨，这周的值周班是高二年级的民族班，他们的老师比较开明，已经打算今晚放水。我躺着床上，提醒自己不要睡着，宿舍其他人都听着耳机，阿益则躲在卫生间看小说。&lt;/p&gt;
&lt;p&gt;上铺阿宇的闹钟滴滴答答地在走，正当我迷迷糊糊睡着的时候，突然听到宿舍外面有点骚动，我拿出手表，刚刚过十二点，心想难道流星雨提前到来。我站了起来，看见阿瑾一直盯着窗外，今天晚睡之前他已经提前把自己窗户前走廊挂的衣服清理干净。又过十几分钟，阿瑾告诉我们：“流星雨已经开始，刚才有三颗流星从窗口飞过去，今晚的流星很特别。”&lt;/p&gt;
&lt;p&gt;除了阿益之外，宿舍所有人开始往窗户看，不到五分钟，果然看见一颗流星从天空划过去，尾巴很大，持续时间很久。阿瑾说：“这是一颗超长火流星。”随着时间一点点过去，天空的流星越来越多，开始有学生站到宿舍外面，阿瑾和阿宇率先出去，紧接着我们也跟着出去。我们这才发现，走廊上已经挤满人群，阿航和阿瑾站在最前面，我往右边看，那边的女生楼的走廊上也开始聚集学生。&lt;/p&gt;
&lt;p&gt;天空的流星越来越频繁，每一道大流星划过，都会激起同学们的一阵欢呼，刚开始害怕老师，大家都压制住声音，后来看到的流星越来越多，我们不再压制声音，而是发出巨大的欢呼声。&lt;/p&gt;
&lt;p&gt;半个小时后，值周的老师开始过来要求大家回宿舍睡觉，看来老师放水时间已经结束了，大约一半的学生乖乖返回宿舍。&lt;/p&gt;
&lt;p&gt;我正犹豫要不要回去睡觉，阿航兴奋地告诉我们：“我听说高年级的学生已经到足球场上去了，老师好像不怎么管那边，那里视野非常开阔，我们走吧。”&lt;/p&gt;
&lt;p&gt;于是我拉上阿哲，跟其他几个男生开始慢慢溜下楼，一起来到白天我们经常踢球的足球场，这里已经有很多学生，大家都抬头望着天空，欣赏着一颗又一颗流星划破黑暗的夜空。&lt;/p&gt;
&lt;p&gt;我不时地东张西望，幻想田茉这个时候也在球场，我没有看见她，无论如何，至少她也应该在宿舍的走廊，我们能同时看到这场流星雨。&lt;/p&gt;
&lt;p&gt;我和阿哲找到一个位置并排坐着，我们抬头仰望，能看见清晰的星座镶嵌在黑色的夜空。我喜欢流星，看着划过夜空的流星，我想起流星许愿的传说，每一颗流星只存在短暂的一瞬间，它们穿着华丽的长纱在深邃的天穹里划出一条条绚丽的弧线，消失的那一刹那，它们也带走地球上人们许下的无数美丽愿望。&lt;/p&gt;
&lt;p&gt;大约半个多小时后，这一波流星雨逐渐退去，老师开始到球场来督促学生回去睡觉，我们还不打算马上离开，眼看时间即将来到报纸上所说的第二个高潮，我们不想错过。&lt;/p&gt;
&lt;p&gt;时间来到凌晨一点多，天空的流星又开始多了起来，几乎每隔几秒钟都有流星从天空的各个方向出现，我们从东南西北四个方向望去，都能看到流星。我看见拖着长长轨迹的大流星，也看见有一闪而过的小流星，它们有些明亮如月，有些只能隐约可见，颜色更是五彩缤纷，今晚流星是夜空的主角，它们尽情地表演，在燃烧的最后时刻为我们绽放绚烂的美丽。&lt;/p&gt;
&lt;p&gt;阿哲也很喜欢流星雨：“幸亏我们没有跟着大部队离开，否则就错过这一波更大的流星雨。”&lt;/p&gt;
&lt;p&gt;我得意地说：“是的，刚才我估算过，我们也就多等了十几分钟。”&lt;/p&gt;
&lt;p&gt;我们一直看到凌晨一点半的第二个高峰，气温开始下降，球场上的人也越来越少，我们一边聊天一边往宿舍走。&lt;/p&gt;
&lt;p&gt;今夜的天空如此壮丽无比，我欣赏这些时不时划过夜空的绚烂流星，每看见一颗流星出现，我都重复前两天心中许下的那个美好愿望。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》十、复习考试</title>
      <link>https://dodoro.chouxiangpai.com/archives/1324/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1324/</guid>
      <description>&lt;p&gt;武缘高中比灵镇更靠近南边，这里的冬天也更暖和些，可是到了腊月，寒风依然有些刺骨，冬天里我们都洗冷水澡，几乎每隔一天就要洗一次。每天课外活动之后，从宿舍后面的灵水路走过，就能听到男生的卫生间里传出唱歌的嘶吼声，为了抵御冷水的寒气，我们都会在卫生间里一边冲冷水澡、一边放声高唱歌曲。&lt;/p&gt;
&lt;p&gt;我经常唱的歌曲是《男儿当自强》，这首歌也是电影黄飞鸿系列的一部片名，曾经有一段时间，我对这个系列的电影非常着迷，甚至认为假如我也去追星的话，这个系列的主演很可能是我追的第一位明星。阿风最喜欢唱郑智化的《水手》，阿宇则喜欢刘德华的《忘情水》，阿瑾认为费翔的《冬天里的一把火》最适合洗澡的时候唱，阿军经常唱的是《光辉岁月》。我一直以为像阿鲲这样腼腆的人不会唱歌，有一次我因乐队练习耽误回宿舍比较晚，听见他用低沉的声音在卫生间唱着一首旋律非常劲爆的歌曲，后来我从阿瑾那里知道，这首歌是九八年世界杯的主题曲《生命之杯》。&lt;/p&gt;
&lt;p&gt;今天的天气更加寒冷，一大早天还没亮，我正在被窝里暖暖地做梦，突然感觉有人拉我的被子，原来是阿风来叫我起床。昨天我们和阿航约好，从今天起，大家提前起床，一起到大阅览室前面的黑板报墙下早读。这是阿航的主意，他说自己看见五零七班的学长很早就来这里看书学习，现在准备进行期末考试，他认为我们应该像学长一样，加倍努力学习。我原本不打算参加，但是阿风也有这个想法，所以就答应跟着去。&lt;/p&gt;
&lt;p&gt;我走出宿舍，一阵寒风呼啸而过，冻得我直发抖，阿航和阿斌已经在门口，我看见他们也打着哆嗦。&lt;/p&gt;
&lt;p&gt;阿航嫌我们动作太慢：“你们再不出来，我们就要打算直接出发。”&lt;/p&gt;
&lt;p&gt;我们像做贼一样溜到篮球场旁的黑板报下，这个位置的灯光正好能够看得见书，阿航说这是最好的位置，要是再来晚点，可能就要被其他学长占据。我看见他们都是拿出英语课本，只有我拿出地理课本。我的地理一直很差，初中的时候历史、地理、生物都是副科，上次期中考试，这三科我考得很不理想。&lt;/p&gt;
&lt;p&gt;阿航看见我拿出地理课本，很疑惑地问我：“阿靖，你居然带地理课本，难道明年你要选择文科吗？”&lt;/p&gt;
&lt;p&gt;“我不可能选文科，文科没法报考数学系。”&lt;/p&gt;
&lt;p&gt;阿斌看着我的地理课本说：“你带的书很有个性。”&lt;/p&gt;
&lt;p&gt;我们四个人开始努力地学习，我感觉手冻得发抖，大约半个小时后，学校起床的铃声响起，我们一直读到准备做早操，我图方便，建议大家把课本都先放到黑板报的上面。他们几个直接去操场，我则往食堂二楼去练习吹号。&lt;/p&gt;
&lt;p&gt;第二天早上，我们打算继续像昨天一样艰苦地学习，今天我们出来比阿航他们要早，等了几分钟，才看见他自己一个人出来。&lt;/p&gt;
&lt;p&gt;阿航解释说：“阿斌今天不打算去了，他还想多睡一下。”&lt;/p&gt;
&lt;p&gt;今天的天气更加寒冷，我瑟瑟发抖地问阿航：“我们来了两天，怎么没看见你说的那几位努力的学长？”&lt;/p&gt;
&lt;p&gt;阿航很自信地说：“他们比我们起来更早，说不定已经学习完去跑步了。”&lt;/p&gt;
&lt;p&gt;我缩着脖子，翻开地理课本，上面写着季风和厄尔尼诺现象，我想着今年和去年都那么冷，难道是出现了厄尔尼诺现象。&lt;/p&gt;
&lt;p&gt;连续两天早上起来太早，上课的时候我总想打瞌睡，阿风也在课堂上连打哈欠，晚上睡觉之前他对我说：“明天不用再叫我，我也想多睡一下。”&lt;/p&gt;
&lt;p&gt;到了第三天，只剩下我和阿航两个人，等到周四的时候我也想放弃，可是又想了想，扔下阿航一个人不太好，于是决定打算咬咬牙坚持。周五之后，我和阿航也不去了，那天早上我们把课本放到黑板上的时候，不小心掉进黑板里面，想尽一切办法都拿不出来，后来阿航专门从学长那里借来课本。这场轰轰烈烈的寒窗苦读，我们只持续了一周之后就宣告失败。&lt;/p&gt;
&lt;p&gt;随着腊月里的寒风变得越来越冷，紧张的考试终于到来，对于大部分学生来说，这场考试非常重要，成绩单会随着家庭报告书一起送到父母手上，家长并不知道期中考试的结果，对于那些期中考试考得不理想的同学，这是一次救赎的机会。我期中考试属于正常水平，可是对这次考试也不敢有半点马虎。&lt;/p&gt;
&lt;p&gt;高一还没有分文理班，我们的考试科目总共有九门：语文、数学、英语、物理、化学、生物、政治、历史、地理，所有的考试都是采用和高考一样的一百五十分制，而且这九个科目的成绩都要纳入总分。&lt;/p&gt;
&lt;p&gt;进入高中后我第一次考那么多门课程，特别是生物、历史和地理，这些课程原来初中的时候我们根本不考，甚至也不怎么上课，那时候的历史老师上课都是在给我们说故事，每个学期讲一部中篇小说。初中基础没有打牢，现在一下子同时进行九门考试，把我弄得有些措手不及，我非常佩服田茉，她在期中考试的时候九门课程都考得很好。&lt;/p&gt;
&lt;p&gt;晚自习的课间我去找阿军，看见阿航正在复习历史，我问阿航：“你们初中也一下子考九门课程吗？”&lt;/p&gt;
&lt;p&gt;“那当然，难道大家不都是这样子吗？”&lt;/p&gt;
&lt;p&gt;“我们以前只考六门，生物、历史和地理在我们那里都是副课，大家也不怎么学，我现在最怕考这三门。”&lt;/p&gt;
&lt;p&gt;这时候阿军安慰我：“我们也别太担心，你和我应该都会选理科，这样高考就不用考这三个科目。”&lt;/p&gt;
&lt;p&gt;阿军的话并没有让我觉得宽慰：“话虽如此，我岂敢掉以轻心，毕竟这一年内都是要纳入总分，这一个月来我花不少时间在这三个科目，希望期末考试的时候别考得太差。”&lt;/p&gt;
&lt;p&gt;期末考试的时候要打乱考场，并由学校统一安排准考证，不允许在自己的班级考试，听老师说这是为了让大家从高一开始就模拟高考的氛围。我们和高一个年级的民族班交叉考场考试，两个年级的考卷不一样，也就能避免同桌作弊现象。我和阿航的考场都分到五零七班教室，我们早早就来到考场，一进门就看见黑板前面堆满各种学习资料，都是一捆捆考卷。&lt;/p&gt;
&lt;p&gt;阿航指着这些试卷：“我听阿睿学长说，这是他们一个学期做的试卷。考试的时候需要把课桌表面整理干净，学长们的资料太多，课桌的抽屉根本放不下，只好堆放到这里。”&lt;/p&gt;
&lt;p&gt;我还看到他们教室后面的黑板报贴着各种高考秘籍和高考励志故事，没想到高二的学生就要把目光死死盯着高考，想想我们这个学期以来似乎玩得有点多，可是换个角度想，如果现在没有丰富的活动，那么进入高二后大概就更不会有这样的机会。&lt;/p&gt;
&lt;p&gt;紧张的考试持续整整一周时间，考完试之后，同学们明显都感觉轻松很多，值周班的学生也松散下来，班主任也不再严格管束我们，男生们可以尽情地踢球。周末我们和同年级的另外一个民族班进行一场足球友谊赛，他们班踢球的男生不多，我们最后以大比分赢下比赛。整个晚上，男生宿舍里洋溢着一股胜利的喜悦，大家对下个学期的足球联赛抱着美好的憧憬，阿鲲今天也踢进一个球，他跟我说这是他第一次在球场上进球。&lt;/p&gt;
&lt;p&gt;胜利的气氛下，宿舍里播放着后街男孩和西城男孩的歌曲，这段时间以来阿斌、阿瑾和阿航都迷上这两个乐队，我也觉得这些歌曲的旋律很好听。高中的这个学期我知道很多关于乐队和歌星的知识，也初步体会到追星这个词的含义，当然我并不追星，不过我和阿军都喜欢别安乐队的歌曲。&lt;/p&gt;
&lt;p&gt;带着愉悦的心情，我正在床上看书，阿航跑到三零六宿舍，坐到我的旁边，拿着他的CD机跟我分享西城男孩的一首歌。两个耳塞，一只在他的左耳，另一只在我的右耳，我们并排坐在床上欣赏。歌曲的旋律优美，并散发着淡淡的忧伤，歌词是英文，虽然我听不出意思，可是很明显感受到这是关于青春和恋情的歌曲。听着这样的歌曲，我又想到了田茉，不知道她现在是否也在宿舍里听歌，也许她正沉浸在自己的文学世界里。我们连续听三遍之后，阿航很认真的问我：“你觉得我们班里的所有女生当中，谁最努力？”&lt;/p&gt;
&lt;p&gt;我听到这个问题第一反应是田茉，马上起戒备之心，难道阿航对她也有好感，我很不情愿地说出田茉的名字。&lt;/p&gt;
&lt;p&gt;“不对，田茉最聪明，可是我觉得林苑最努力，你看她每天都按时来教室，学习的过程也不受他人影响，她是我学习的榜样。”&lt;/p&gt;
&lt;p&gt;我听他这么说，松了一大口气，林苑和田茉都来自县城，她也是剪着短发，整齐的刘海下有一张小椭圆形的脸蛋，她和田茉平时确实不怎么说话，两个人都是安静斯文地一门心思学习。我对阿航说：“她们两个都一样努力，反正成绩都很好。”&lt;/p&gt;
&lt;p&gt;阿航离开不久之后，阿宇打完篮球回到宿舍，我看见他满面红光，换下衣服后他到卫生间洗澡，紧接着从里面传出响彻房间的歌声，阿宇正在动情地演唱《忘情水》。阿瑾神秘地告诉我们：“我们的阿宇同学今天一定有什么好事情，说不定走桃花运了。”&lt;/p&gt;
&lt;p&gt;晚上睡觉之前，阿宇从上铺爬下来，坐在我的床铺上，他轻声地对我自言自语：“我真的很佩服林苑，她在任何情况下都能安静地在那里学习，我真希望自己也有这样的定力。”&lt;/p&gt;
&lt;p&gt;我心想看来男生们都有暗恋的对象，只是大家都不说出口，今天两位男生同时向我说出对同一个女生的好感。我暗自庆幸他们提到的不是田茉，可是突然感到很担忧，除了阿斌和他们之外还有将近三十个男生，这些人当中大部分也有和我一样守口如瓶。还好大家都不公开，否则五零八班的“猛虎们”估计要掀起一场没有硝烟的战争。&lt;/p&gt;
&lt;p&gt;第二天，我们迎来高中的第一个假期，我和阿军坐上返回灵镇的班车，暂时告别学校和县城，我喜欢这里的环境，这里有很多好兄弟，这里还有我喜欢的人，我期待一个月后的再次相逢。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》十一、正副劳动委员</title>
      <link>https://dodoro.chouxiangpai.com/archives/1337/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1337/</guid>
      <description>&lt;p&gt;正月初十，暖风从南边吹来，终于吹走了这个寒冷的冬天，气温迅速爬升到二十摄氏度，学校的几个民族班提前回校上“查缺补漏课”。我走在大街上，县城里还洋溢着春节的气氛，偶尔能听到鞭炮声，街道两旁很多店铺都还没有开始营业。离开街道后，我沿着旧五海桥走，河岸两边种的菜花开得正欢，远远能看见几只蝴蝶在花朵上慵懒地拍打翅膀，它们一定也知道春天已经到来。&lt;/p&gt;
&lt;p&gt;我来到灵水路边那家我们经常去的文具店，打算进去买点新学期用的学习用品，刚进门就看见物理老师，他正在挑选钢笔。我站在旁边观察老师，他几乎试遍最前面的一排。寒假期间，我从借来的图书上看到量子力学和引力波这样的新奇概念，原本打算开学后问物理老师，没想到在这里遇到老师，我决定抓住这次难得的机会问他，于是走上去和他打招呼：“老师新年好！没想到在这里遇到你。”&lt;/p&gt;
&lt;p&gt;“这位同学你好，我正在给儿子挑选钢笔。”&lt;/p&gt;
&lt;p&gt;老师没有称呼我的名字，他应该不记得我是谁，他笑眯眯地回答完之后，继续试另外一排钢笔。&lt;/p&gt;
&lt;p&gt;“噢，老师真是一位好爸爸，你的儿子也在武缘高中上学吗？”&lt;/p&gt;
&lt;p&gt;我估算老师的年纪，应该和我爸爸的年纪差不多，那么他的小孩可能和我差不多一样大。&lt;/p&gt;
&lt;p&gt;“他还没上高中，去年刚上初中。”&lt;/p&gt;
&lt;p&gt;回答我的过程中，他选中一只黑色钢笔，结完帐就迅速离开，看来老师着急回去给儿子送钢笔，我提问的计划宣告落空。买完东西后，我继续沿着灵水路往学校走，路上遇到几位同学，他们今天一大早就来学校报道，现在正要到街上购置生活用品。&lt;/p&gt;
&lt;p&gt;新学期正式开始，回家待一个寒假之后，班级的氛围发生了一些变化，上学期的考试结果让大家多少有些感受，加上假期期间家人的寄托，我感觉到同学们的脸色都有些严肃和凝重。我自己当然也是如此，去年考入重点高中民族班的喜悦和新学校的新奇已经消失得无影无踪，我们都切实感受到一点高中学习的压力。&lt;/p&gt;
&lt;p&gt;阿宇和阿斌倒是依然如故，他们在课间和班级活动的时候，总能让我们开怀大笑，管弦乐队的练习照旧，每天课外活动男生们都会去踢球。开学后不久，大家都逐步走上轨道，即使是在学习的压力之下，我又找回一些上个学期感受到的那种轻松气氛。&lt;/p&gt;
&lt;p&gt;开学第一周的周五晚上，班主任召集上学期担任过班干部的同学到教室隔壁的教师休息室开会，班主任先发言：&lt;/p&gt;
&lt;p&gt;“从这个学期开始，我们班不再重新选班干部，我打算将班级分成学习委员小组、劳动委员小组、生活委员小组、体育委员小组、文娱委员小组等多个小组。每个小组有一个正组长和副组长，所有学生都是隶属每个小组的班干，我希望每一个人都要尽到自己的职责和义务。”&lt;/p&gt;
&lt;p&gt;我这才领会到上学期班主任的良苦用心，上学期除了班长之外，班干部都只有半个学期的任期，我之前还觉得这种做法很奇怪。这个班里的学生在初中的时候，大都担任班里的班长和学习委员职务，我想老师这么做，一定是希望照顾到更多的学生，以最大限度减轻同学们的心里落差感。&lt;/p&gt;
&lt;p&gt;“每个小组的正组长和副组长就从你们这群人里产生，我还是那个原则，以大家的自愿为主，那么就请大家自告奋勇，选择自己想参与的小组。”&lt;/p&gt;
&lt;p&gt;班主任的话音落下之后，大家一阵沉默，我这次不会再争着冒头，此时我有一个私念，我打算等田茉选择一个职务之后，只要她不选择学习委员，我就选择和她一样的职务，这样我们就可以分在同一个小组。&lt;/p&gt;
&lt;p&gt;这次阿航是第一个吃螃蟹的人：“我打算换个职位，由我担任体育委员吧，希望大家在新的学期支持我的工作。”&lt;/p&gt;
&lt;p&gt;接着大家陆续发言，大部分人都选择自己上个学期担任过的职务。最后只剩下学习委员和劳动委员职务，还有田茉、林苑、阿哲和我还没有做出选择，我正想着看来劳动委员肯定是我和阿哲，没想到这时候田茉抢先开口：“我打算选择劳动委员小组。”&lt;/p&gt;
&lt;p&gt;所有人都很惊讶她的选择，只有我内心一阵兴奋，就在大家都还处于惊讶状态之时，我坚定地发言：“我也选择劳动委员小组。”&lt;/p&gt;
&lt;p&gt;田茉很谦虚地让我负责劳动委员小组，我觉得自己从小就在地里劳动，也就没有拒绝她的谦让。就这样我成为正劳动委员，田茉是副劳动委员，我们结成一对新搭档。这是一个全新的开始，我似乎从自己臆想的失恋中走了出来，顿时觉得劳动委员是所有班干职务里最美好的一个。&lt;/p&gt;
&lt;p&gt;武缘高中是一所主要面向农村学生的学校，超过四分之三的学生都来自乡镇，学校每周都会有一节劳动课，上个学期入学的第一天每位同学都带来沙耙、扫把或者簸箕，这些工具存放在专门的工具房。学生们负责维护校园每一个角落里的卫生环境，同时也负责养护校园里的树木和草坪，五零八班还专门负责学校最北边的花圃，我们每周都会来这里给花草们浇水。我以前最喜欢数学课，现在要加上劳动课，这个时候我可以和田茉一起合作，我们一起安排和规划好劳动课的工作，并且督促同学们完成劳动任务，我们还要一起组织劳动委员小组的班干们开会。&lt;/p&gt;
&lt;p&gt;从这个学期开始，每周的周二都有劳动课，每逢周二的早上，分管后勤劳动组的老师就会在做早操之前来到班级队伍前面喊话：“请每个班的劳动委员尽快到国旗下集合，领取今天下午的劳动任务。”&lt;/p&gt;
&lt;p&gt;总共有两位负责后勤劳动的老师，一位是留着胡子的叔叔，他普通话讲得不太标准，他会直接参与到劳动中，干活非常干脆利索。另外一位是年纪大约有四十岁的阿姨，说话的嗓门特别大，每次轮到她安排任务的时候我都在想：她即使不用喇叭大家都能听得到她的声音。虽然她不直接参与劳动，但是这位阿姨热情很高，讲话的时候极富有激情，对学生的劳动要求也很高，每次都亲自仔细检查大家的劳动成效。&lt;/p&gt;
&lt;p&gt;刚开始的时候，我和田茉轮流到国旗下领劳动任务，经过两三次之后，我发现她似乎不太喜欢这个工作，于是就把这个任务都包揽过来，我也很愿意为她分担这份工作。&lt;/p&gt;
&lt;p&gt;今天又是周二劳动日，昨天夜里下了一天的雨，升旗仪式改到今天，我必须到饭堂二楼去做演奏准备，早操之前我到班级的队伍找到田茉，我对她说：“我今天要去管弦乐队演奏国歌，等下子你记得上去开会领劳动任务。”&lt;/p&gt;
&lt;p&gt;“我差点忘记还有这件事情，我已经好几周不上去，需要注意什么吗？”&lt;/p&gt;
&lt;p&gt;“不用，留意我们班今天负责的任务就可以，那今天就交给你了。”&lt;/p&gt;
&lt;p&gt;说完我就转身离开，穿过队伍的时候，我看见班主任正在班级的队伍后面扭腰，他几乎每天早操都会过来锻炼身体。班主任往我们这里看了一眼，我的眼睛碰到他的目光的时候，我感到一阵心虚，担心他可能怀疑我和田茉之间有特殊的关系，不过我马上稳住情绪，这是工作上的需要，于是我扭头后很理直气壮地往饭堂二楼走去。&lt;/p&gt;
&lt;p&gt;今天我们班的劳动任务是给校园里的扁桃树除草和施肥，我们负责光明之路雕像和多媒体教学楼周边的那十几棵大树，我带着十几位男生来到工具房，从里面拿出沙耙和簸箕。上个学期的几次劳动之后，我才知道班里有接近四分之一的同学来自县城，他们平时很少用到沙耙，今天的劳动需要用沙耙来除草，我以前在家也经常给家里的果树除过草，今天可以大显身手。&lt;/p&gt;
&lt;p&gt;负责指挥劳动的老师已经站在现场，他专门过来给我们做示范，并交代各种注意事项，我们认真观察并记录老师的动作，老师示范完毕后让我们试一试，萧影自告奋勇：“我在家也经常用到沙耙，对这个活很熟悉。”&lt;/p&gt;
&lt;p&gt;她说完就拿起一把沙耙，开始在一棵树下工作，她弯腰四十五度，两手一上一下握住沙耙，熟练地操作刚刚老师示范的动作。&lt;/p&gt;
&lt;p&gt;阿航在旁边提醒她：“你要小心点哦，别铲到树根，植物也会感到痛。”&lt;/p&gt;
&lt;p&gt;萧影没有理会他的话，继续埋头干活，几分钟后就把扁桃树下的那些杂草扫除干净，从她的动作来看，她确实在家干过类似的活。&lt;/p&gt;
&lt;p&gt;我身为劳动委员，当然不能落后，我和田茉一起给另外一棵树除草，我负责除草，田茉负责将铲出来的草装入簸箕，田茉问我：“你家里种扁桃树吗？”&lt;/p&gt;
&lt;p&gt;“我是在学校第一次看到扁桃树，我家种的是芒果树。”&lt;/p&gt;
&lt;p&gt;阿航抢着说话：“芒果和扁桃长得很像，连果子都很像。”&lt;/p&gt;
&lt;p&gt;萧影纠正他：“扁桃树的叶子细长，芒果树的叶子明显更宽大，芒果也比扁桃大很多。”&lt;/p&gt;
&lt;p&gt;周围的同学都赞成萧影的判断。按照我们的计划，劳动委员小组的成员每个人领两棵树，并带着其他三位同学开始劳动，老师看见我们基本已经掌握技巧，于是带上几位男生去拿肥料。大家在扁桃树下努力地劳动，阿宇和阿军干得很努力，阿航以前没有用过沙耙，不过他很快就掌握了技巧。&lt;/p&gt;
&lt;p&gt;二十多分钟后，我们已经把草都除掉，老师接着教我们如何给果树施肥。我们围着他站在一棵树下，老师手里拿着一把沙耙，一边说一边比划：“正确的方式是在树根和树干连接处施肥，以树冠最外缘的树叶与树干的距离为半径，围绕树干画一个圆，这个圆以内的位置挖开一小道沟，然后将肥料均匀撒进沟里并浇水掩土。”&lt;/p&gt;
&lt;p&gt;老师的方法听起来比我在家干活的方式更科学，按照老师的方法，我们赶在下课之前完美地完成今天的最后一项任务。&lt;/p&gt;
&lt;p&gt;除了各种社团活动和体力劳动课，值周也是学校自我管理教育的重要组成部分。高中的值周制度和初中类似，每周轮流安排各个班级值周，学生协助值周老师和各个班的班主任维护学校的生活次序。这周轮到我们班值周，今天由劳动委员小组负责组织值周工作。&lt;/p&gt;
&lt;p&gt;值周最开心的事情就是不用上晚自习，负责值周的学生需要在晚上配合保安巡视校园。校门口的保安也需要有人协助工作，阿航最喜欢去门卫那里值周，他很自豪地跟我们说：“学校的门卫很喜欢看书，我已经和他混得很熟，他还告诉我他打算自学参加高考。”&lt;/p&gt;
&lt;p&gt;今天晚自习课我和田茉一起在校园里巡视，我们并排走在从教学楼到饭堂的那条小路上，两排的扁桃树一片静谧，开始谁都没有说话。走了一段路，我的内心泛起了波澜，突然萌生牵住她的手的想法，可是我没有这个胆量。我的直觉也告诉我，这么干的后果一定会非常严重，甚至会破坏我在她心中的形象。田茉似乎感觉到沉默的尴尬，她主动说话：“你们乐队除了国歌，平时还会吹什么歌曲？”&lt;/p&gt;
&lt;p&gt;“还有校歌和军歌，上学期老师刚教会我们吹《月亮河》，我比较喜欢后面这首曲子，不过我吹的很一般。”&lt;/p&gt;
&lt;p&gt;“我也喜欢《月亮河》，我听过吉他弹奏的版本，歌曲简单优美。”&lt;/p&gt;
&lt;p&gt;看来她听过赫本的演奏，我打算抽空一定要找到阿航提到过的那部电影来看一看。&lt;/p&gt;
&lt;p&gt;我们就这么一起走着，边走边聊天，不需要牵手，不需要任何亲密的动作，我觉得这样就已完全足够。春风惬意，月色温柔，林荫小路，我才发现校园的夜景真美，朦胧的路灯，宁静的氛围，青春的气息，我幻想时间可以停在这里，永远留下我和田茉一起散步的情景。&lt;/p&gt;
&lt;p&gt;晚自习结束之后，我和阿军负责去巡视男生宿舍，田茉带着其他三位女劳动委员巡视女生宿舍。我巡视三楼宿舍的时候，看到我们的语文老师正在视察他管理的班级宿舍。楼道里男生刚刚晒上去的衣服有大量的水滴下来，很明显他们故意不拧干衣服，老师小心地走过去，走出来的时候衣服已经被滴湿不少，我和他打招呼，他微笑地提醒我要注意头顶的衣服。&lt;/p&gt;
&lt;p&gt;我来到他负责班级的男生宿舍前，从窗口我听到里面的学生正在偷笑，他们对自己的恶作剧感到很得意，虽然我对班主任们的一些管理的做法保留意见，但是今天这个宿舍学生的这种行为已经越界，这是一种愚蠢和懦弱的行为。我原本想给他们记一笔不按时休息的帐，可是想了想，可能这笔帐最终还是得算到语文老师的身上，于是作罢。这时候我想到刚刚田茉提到的观点：换位思考，我们会更能理解对方的做法和想法。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》十七、班级重组</title>
      <link>https://dodoro.chouxiangpai.com/archives/1359/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1359/</guid>
      <description>&lt;p&gt;期末考试结束之后，班级里散发着一股离别的气息，虽然还不知道最后的考试结果如何，但是高一结束之后，我们的班级一定会面临一次大的重组。部分同学根据自己的特长会选择去文科班，考试成绩靠近尾部又不想去文科班的同学则会被安排到其他班级。我对这次考试比较有信心，并不太担心考试的最后结果，我只想珍惜目前宝贵的光阴。&lt;/p&gt;
&lt;p&gt;阿鲲的理科一直很好，也不太关心成绩，他现在最热心的是马上要进行的世界杯决赛，他支持两个队伍，阿根廷已经被淘汰，他希望巴西队能获得冠军。&lt;/p&gt;
&lt;p&gt;最忧心的人是我曾经的同桌阿思，这段时间来他的理科成绩下降很多，他又不喜欢文科，目前他最担心的是失去民族班那每个月三十块补助，去年就是为了拿到这个补助他才努力考进民族班，这也是他和家人的约定，拿到这个补助就可以继续升学。每个月三十块钱看起来不多，可是对于阿思来说，这是他每个月将近三分之一的饭钱。&lt;/p&gt;
&lt;p&gt;我不希望阿思失去这份补助，虽然我不知道他家里的实际情况如何，但是我忘不了他妈妈来宿舍给他送糯米馍的场景，也不会忘记他接近月底的时候总是很晚才去饭堂打八毛钱的饭菜，这时候饭堂的阿姨们会给这些只打几毛钱饭菜的学生多给一勺油豆腐和一勺肉汁。&lt;/p&gt;
&lt;p&gt;幸运的是，这次分班只是年级领导的擅自主张,即使分到其他班级之后,民族班的补助也不会停止,这是县教育局对我们初中三年付出的奖励，这样的安排给予阿思极大的鼓励。&lt;/p&gt;
&lt;p&gt;周末的一个下午，已经没有任何考试压力，考试结果也还没有出来，我们约好去宁武路交叉路口附近的县体育场踢一场足球赛，这个学期以来学校的足球场总是人满为患，我们经常到那里去踢球。球队的队长阿瑾叫上了那次被班主任要求写检讨的所有队员一起出发，除了阿风和阿宇之外，每个人都到场。&lt;/p&gt;
&lt;p&gt;我们十几个人分成两队踢球，阿瑾提议这次不设置守门员，希望大家都能够进球，今天我们要丢下一切疑虑，放开心情，在足球场上尽情地踢球。&lt;/p&gt;
&lt;p&gt;明年班级人员变动必然会波及球队，这可能是我们这个球队的最后一场比赛，我们在满地黄土的球场上奔跑着，控球、传球、射门，我们流着汗水，任由太阳暴晒。我们一直踢到夕阳西下，直到体育场的霓虹灯亮起，依然还在努力地奔跑，专心地射门，今天几乎每个人都进了一两个球。踢了一年的足球后，我也逐渐发现足球特有的魅力，现在能理解阿鲲和阿瑾说的话：足球是地球上最激情、最火爆和最具魅力的运动。&lt;/p&gt;
&lt;p&gt;天彻底黑了，我们拖着疲惫的身躯返回学校，我、阿哲、阿瑾、阿航和阿鲲等一起并排走在通往学校的路上，霓虹灯下的马路上印着我们的身影。阿瑾跟我们说：“我这次理科考得不太好，假设真的如此，我就打算转文科，估计下学期就不在班级里，这可能是我们作为同班同学最后一次踢球。”&lt;/p&gt;
&lt;p&gt;我能感受到他语气中带着不甘心，我对他说：“结果没有出来呢，别太悲观，即使去文科班，我们永远都是五零八班的同学，以后踢球也一定会叫上这里的所有人。”&lt;/p&gt;
&lt;p&gt;“很高兴你这么说，那我们约定好，无论下学期结果如何，踢球的时候记得叫上我，我很喜欢和大家踢球。”&lt;/p&gt;
&lt;p&gt;阿哲也很少见地开口：“通过一次期中期末考试来改变一个人的去向，学校的领导真是太短视了，他们忽略去年我们考入这个班级的时候，靠的是三年的准备、努力和积累。”&lt;/p&gt;
&lt;p&gt;我同意这种看法：“说不定两年后老师们发现，那些被学校认为要离开的学生考得其实并不一定差。”&lt;/p&gt;
&lt;p&gt;“大家都是好兄弟，离高考还有两年时间，我们一起努力吧！”&lt;/p&gt;
&lt;p&gt;阿瑾一边说一边看着前方，我想他一定不会认输，也有自己的打算。不仅是他，我们所有人都绝对不会就此认输。夜色黑暗，走在路上的我们，每个人的眼中闪烁着光亮，这光亮划破黑漆漆的夜色，指引我们前进的方向。&lt;/p&gt;
&lt;p&gt;这几日老师们在批阅试卷，我们有充足的时间阅读，除了班级购买的各种散文集，男生们这段时间正在热传几本新书：《火与冰》、《尘埃落定》、《挪威的森林》、《白鹿原》和《废都》。这些书有别于课堂上看到的名著，也不同于我之前看的哲学与数学图书，它们从个人的视角来看待自我和这个世界，这是一种全所未有的角度，这些书直击我们年轻的内心，我们通过这些图书也发现了一个新奇的、更广大的世界。前四本我已经读完，今天午睡后我刚从阿航的手中夺来第五本，我正看得入迷，这时候学校主管劳动的老师来到教室，他指明要班里的劳动委员跟他去拿东西。&lt;/p&gt;
&lt;p&gt;我和田茉跟着老师来到学校储藏室，老师刚打开门，一股浓郁的果香扑灭而来，像是芒果的芬香，却又和芒果不一样，我们走近一看，一个个形状和芒果一样的果子堆在角落里，个头比芒果要小，很多已经变黄，以我之前的经验，我知道这是果子熟透的颜色。&lt;/p&gt;
&lt;p&gt;老师告诉我们：“这是学校扁桃树结下的果子，前几日我们把它们收下来，放到温暖的储存室催熟，现在熟透了，学校打算分给同学们吃。”&lt;/p&gt;
&lt;p&gt;原来这是我们春天时候打理的扁桃树结出的果实，我感到一阵兴奋，田茉看起来也非常高兴：“能收获自己亲自劳动收获的果实，这种感觉真好！”&lt;/p&gt;
&lt;p&gt;我们提着两袋扁桃果子回到教室，很开心地跟大家宣布：“同学们还记得春天的时候，我们给学校的扁桃树除草和施肥吗？这两袋果就是果树结出的果子，学校决定分给大家吃。”&lt;/p&gt;
&lt;p&gt;班级里响起热烈的掌声，我估算一下，每个人可以分两到三个果，田茉让其他劳动委员一起上来给大家分果子。很多同学拿到果子后就剥开吃掉，教室里一下子弥漫着一股水果芬芳的气息，我分完之后回到座位就迫不及待地剥开一个，尝一口，果然美味可口：“学校特产水果就是不一样，我觉得比家里的芒果还好吃！”&lt;/p&gt;
&lt;p&gt;阿军补充说：“这些是不打农药的绿色果子，外面还不一定能买得到，希望明年还可以继续吃到。”&lt;/p&gt;
&lt;p&gt;阿航一下子吃完三个果：“请问还有吗？我还没有吃够。”&lt;/p&gt;
&lt;p&gt;萧影对他说：“我这个送给你，我家也种扁桃果树，平时已经吃得很多。”&lt;/p&gt;
&lt;p&gt;“谢谢！那我就不客气了。”&lt;/p&gt;
&lt;p&gt;说完阿航接过果子，三下五除二就吃完。我看见不少同学只吃一个，另外的留起来回到宿舍再吃，大家都很珍惜自己的劳动成果。&lt;/p&gt;
&lt;p&gt;这一年来，我们看着扁桃树从开花到结果、直至成熟，这些果树也见证了班级过去这些日子的欢声笑语、喜怒哀乐，看见教室里大家洋溢着欢笑，我内心很感动，可是想到明年必然会有部分同学要离开，忧伤的心情也不时左右我的思绪，我只能安慰自己还好我们依然在同一所校园。&lt;/p&gt;
&lt;p&gt;几天之后，考试结果出来了，我的理科考得不错，综合各个科目也还可以，我注意到田茉的文科分数很高，理科也考得非常好，我为她感到高兴，看来她已经走出前阵子的低迷状态。阿哲、阿鲲、阿航和阿军的理科考得也不错，也许是为了让大家度过一个美好的假期，学校领导将全校和班级排名暂时延后，一直等到高二开学文理班决定之后再实施分班计划。&lt;/p&gt;
&lt;p&gt;放假前的周日晚上，世界杯决赛终于来了，今天傍晚的时候，体育委员阿航和班长联合学校体育部，专门向学校申请今天晚上全校取消晚自习，让学生们尽情地欣赏世界杯决赛，我想到前两个月我们还逃课踢球，以为学校领导会拒绝请求。也许是考虑到考试已经结束，学校最终批准了这个申请，感谢阿航他们的努力，我们可以坐在教室里一起欣赏世界杯决赛！&lt;/p&gt;
&lt;p&gt;阿鲲很早就来到教室，他已经做好今天继续带着耳机来听世界杯决赛，现在可以丢下耳机。班级同学里有希望巴西队夺冠，也有希望德国队夺冠，我没有特别的偏好，喜欢的阿根廷早早已经被淘汰。&lt;/p&gt;
&lt;p&gt;阿航很自信地预测：“我认为今晚德国队可以夺冠，德国的守门员非常厉害，世界杯比的是防守。”&lt;/p&gt;
&lt;p&gt;“我也认为拥有伟大守门神卡恩的德国队一定可以笑到最后一分钟。”&lt;/p&gt;
&lt;p&gt;曾经一直支持英格兰队的阿斌附和阿航的看法，他最喜欢的球星贝克汉姆输给巴西队之后已经返回英国，现在他希望德国队能够为自己喜欢的球队复仇。&lt;/p&gt;
&lt;p&gt;阿鲲不甘落后：“巴西队会夺冠，他们的进攻很犀利，这次决赛不会像以前的决赛那样闷。”&lt;/p&gt;
&lt;p&gt;“我支持巴西队，拥有‘外星人’罗纳尔多的巴西队今晚能夺冠。”&lt;/p&gt;
&lt;p&gt;阿军支持阿鲲的说法，他最近迷上巴西队，不过他最喜欢的球员不是罗纳尔多，而是里瓦尔多，阿军踢的是后卫，里瓦尔多也是后卫，里瓦尔多的射门犹如重炮轰击，在关键时刻总能通过任意球破门得分。&lt;/p&gt;
&lt;p&gt;阿瑾最喜欢的球星是罗纳尔多，他希望罗纳尔多能拿到一座大力神杯，现在他和阿鲲都支持巴西队。&lt;/p&gt;
&lt;p&gt;我和阿哲没有特别要支持的队伍，只是抱着欣赏一场伟大球赛的心情来观看比赛，我们都希望两个队伍都能踢出自己的水平，为大家献上一场美妙的比赛。&lt;/p&gt;
&lt;p&gt;北京时间晚上七点整，亚洲地区举办的首个世界杯决赛准时开始，这是激动人心的时刻，班里的女生也一起观看比赛，个别女生还加入竞猜冠军的队伍。&lt;/p&gt;
&lt;p&gt;没有任何顾忌之后，男生们不再克制自己的冲动，每个人都为自己队伍的进攻发出欢呼声，也会为他们的失误发出深深的叹息，甚至连平时沉默的阿鲲也为巴西队的进球大声欢呼。&lt;/p&gt;
&lt;p&gt;九十分钟后，来自意大利的“光头裁判”科里纳吹响了比赛终场哨声，最终巴西队凭借绝对实力和“外星人”罗纳尔多的两粒进球收获大力神杯，他们成为第一支五次获得世界杯冠军的队伍。&lt;/p&gt;
&lt;p&gt;高二上学期开学之后，分班结果出来了，包括阿宇在内，班里有六位同学根据自己的科目特点选择去文科班，也有几位同学为了坚持理科的理想而离开五零八班。班级重组之后，所有的宿舍也进行了一次重组，三零六宿舍几乎全部被打散，我和阿风都加入阿航所在的宿舍。&lt;/p&gt;
&lt;p&gt;很多同学似乎已经习惯了班级重组，初中的时候他们就经历过这样的重组，县城里的很多学校都是到初二结束的时候才分快班和慢班。我和阿军是第一次经历这样的重组，虽然很早之前就知道高二会分文理班，但是真正到来的时候还是多少有些惆怅。&lt;/p&gt;
&lt;p&gt;重组的班级、打散的宿舍、新来的同学，大半熟悉、小半陌生的环境里，我感觉自己似乎又重新进入了一次学校，还好我不是被变动者，开始的时候我把自己藏在数学和学习的那个小小角落里，我知道那里最熟悉也最安全。&lt;/p&gt;
&lt;p&gt;我能感觉到个别被迫离开班级的同学带着几分失意，青春敏感的时期，也许这是我很难想象的一种失落，成长原本就带着痛，只是他们比我提前承受更多，我想他们最终也会比我更快地成熟，他们的心也会变得比我更宽。还好我看到他们很快站了起来，我们也依然是同学，我经常和阿宇一起讨论历史，踢球的时候也会叫上曾经在一起踢球的兄弟们。&lt;/p&gt;
&lt;p&gt;新加入的同学里，除了小部分迟疑者和谨慎者怀有排斥之外，大部分都是积极乐观者。我看到了阿程、阿隆和阿扬的乐观向上，我也会一直记着阿霖在校园宿舍小品为大家留下的欢声笑语，我更忘不了阿名为新的班级足球队落下的少年泪水。无论如何，五零八班又重新变成了一个整体，这个时候，所有人的目标都已经只剩下一个，那就是高考。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》十二、爱因斯坦错了</title>
      <link>https://dodoro.chouxiangpai.com/archives/1339/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1339/</guid>
      <description>&lt;p&gt;学校中间有一个大礼堂，位置靠近光明之路雕塑，周边是篮球场、排球场和足球场，大礼堂的外观与众不同，高高的屋顶镶嵌着一排排整齐的深红色瓦片，淡黄的墙面搭配红色的窗户格栅，这是校园内唯一的一座苏式建筑。礼堂横跨东西，两头各有一个小小的阁楼，它的内部被分成两个部分，靠近饭堂方向是全校最大的报刊阅览室，另外一边是学校音乐室，校园合唱班就是在这里练习合唱。这段时间我经常在晚读之前来这里阅读杂志，总能听到隔壁在练习《半个月亮爬上来》男女声二重唱，歌词透露着委婉的抒情，旋律充满着浪漫的风情。&lt;/p&gt;
&lt;p&gt;阅览室有各种各样的杂志，我最喜欢的是《现代物理知识》，这本杂志以通俗易懂的文章简单介绍宇宙微波辐射、太阳黑子、量子理论、平行宇宙和黑洞等现代物理知识。我第一次接触到量子力学，这是一门面向微观世界的学科，相对论则是一门描述宏观宇宙空间的学科，我懵懵懂懂地阅读这些知识，很多概念对我来说非常陌生，包含了太多的专业术语，我希望能找到一些入门的书籍，以简单的方式帮助我了解宇宙的奥秘。&lt;/p&gt;
&lt;p&gt;这天我回到教室，看见阿哲正在阅读霍金的《时间简史》，我想或许他比我知道更多，于是问他：“你知道宇宙物理学相关理论吗？”&lt;/p&gt;
&lt;p&gt;“我初中对大爆炸理论很感兴趣，通过霍金的这本著作，我也大概了解一些宇宙学的概念，包括黑洞、虫洞和弯曲时空，现在有很多理论来解释我们的宇宙，平行宇宙就是其中的一种理论，这种理论认为可能存在多个不同时间轴的宇宙。”&lt;/p&gt;
&lt;p&gt;我佩服阿哲的知识，原来他不仅喜欢哲学，也喜欢宇宙学，我也和他分享自己的想法：“我最近也喜欢理论物理学，我觉得二十世纪的理论物理学进展将会对人类的哲学观产生极大的冲击。”&lt;/p&gt;
&lt;p&gt;“我也这么认为，我推荐你阅读最近出版的诺贝尔百年鉴系列图书，里面有一本书《追寻自然之律：二十世纪物理学革命》，简单明了地介绍最近一个世纪的物理学发展。”&lt;/p&gt;
&lt;p&gt;第二天我就从图书馆借到这本图书，马上被这本书深深地吸引，我第一次知道相对论包括狭义相对论和广义相对论，初中的时候我听过相对论这个名词，当时并不理解。我还从图书馆借来《狭义相对论》，并详细阅读洛伦茨变换的数学公式及推导过程，爱因斯坦就是通过这个公式，得出了光速不变原理，光速不变是狭义相对论非常重要的结论。我现在终于理解“狭义相对论是对牛顿经典力学纠正”这句话的意思，牛顿力学是狭义相对论在低速情况下的近似描述。&lt;/p&gt;
&lt;p&gt;爱因斯坦还将引力加入到狭义相对论，并基于黎曼几何构造出引力场方程，以此提出广义相对论，黎曼几何属于非欧几里德几何。爱因斯坦引力场方程是一个二阶非线性偏微分方程组，这个方程属于黎曼几何，基于纯数学方法，很难获得这个方程的精确解。爱因斯坦花了很大努力才得到方程的近似解，并得出很多伟大的预言，这些预言包括时空弯曲和引力时间延迟效应。&lt;/p&gt;
&lt;p&gt;相对论被提出来后不久，数学功底非常扎实的理论物理学家史瓦西得到引力场方程的一个非平凡精确解，这个解带来震惊世界的黑洞理论，霍金大力发展黑洞理论，并由此引出了大量关于时空穿梭、平行宇宙的理论和科幻故事。&lt;/p&gt;
&lt;p&gt;阿哲非常喜欢科幻故事，每个月都买《科幻世界》杂志，他也很大方地借给我阅读，我们一起讨论里面的故事。阿哲很佩服爱因斯坦，他不止一次跟我说过：“爱因斯坦是有史以来最伟大的科学家。”&lt;/p&gt;
&lt;p&gt;我也承认爱因斯坦的伟大，他拥有丰富的想象力和敢于突破前人理论的勇气，然而即使是爱因斯坦，也曾经犯过一些错误。我从图书馆找到诺贝尔百年鉴的另一本书《微观绝唱：量子物理学》，这本书详细介绍量子物理学的过去、现在和可能的未来。量子物理学可以精确地解释微观世界，虽然爱因斯坦通过对光子的研究参与并发展了量子力学，但是爱因斯坦并不接受量子力学。量子物理学有一条测不准原理，即量子状态是一种概率状态，微观世界是一个基于概率统计的世界，爱因斯坦有一句著名的话：上帝不喜欢掷骰子。从这个意义上来说，爱因斯坦的观点有问题。&lt;/p&gt;
&lt;p&gt;我读完了《微观绝唱：量子物理学》，这几天脑子里反复浮现二十世纪上半叶的量子物理学大师：提出辐射量子假说的普朗克、提出新原子结构和对应原理的波尔、发现物质波理论的德布罗意、基于矩阵理论完成量子力学体系的海森堡、提出波动方程的薛定谔。这些物理学大师和数学大师一样，都是我学习科学知识的榜样。当天晚上我梦见自己和波尔一起讨论量子力学，还梦见和爱因斯坦辩论，我大声地说波尔的观点是对的，爱因斯坦是错的。&lt;/p&gt;
&lt;p&gt;第二天早上起床后，阿宇从上铺低下头对我说：“你昨晚说梦话了，大喊一声：爱因斯坦错了。”&lt;/p&gt;
&lt;p&gt;我有些尴尬，跟他解释：“这只是关于量子物理学的不同观点，爱因斯坦不认同量子物理学观点，量子物理学却能准确解释微观世界。”&lt;/p&gt;
&lt;p&gt;阿宇似乎不管什么量子物理学，他激动地说：“我佩服你敢质疑提出伟大相对论的科学巨匠爱因斯坦。”&lt;/p&gt;
&lt;p&gt;过了几天，五零八班被安排在花圃里劳动，我注意到田茉每次来花圃都很开心，看得出来她非常喜欢这个花圃。我和她一直到下课结束后都没有离开，我们一起给新种的朱槿花浇水，她问我：“听说你做梦的时候说爱因斯坦错了，听起来很有意思，可以解释一下为什么吗？”&lt;/p&gt;
&lt;p&gt;我被问得有些尴尬，红着脸地回答她：“那是阿宇乱说，不过爱因斯坦在量子物理学方面确实想错了，你也对量子力学感兴趣吗？”&lt;/p&gt;
&lt;p&gt;“我不懂量子力学，只是在书上看到过薛定谔的猫。没想到你们男生课外时间除了踢球，还会想这么多事情，你要是真的对这些内容感兴趣，以后可以读宇宙物理学。”&lt;/p&gt;
&lt;p&gt;我赶紧纠正她：“我要报的是数学系，不过宇宙物理学属于理论物理范畴，而数学是理论物理学的基础。”&lt;/p&gt;
&lt;p&gt;“那你可以先读数学系，学好数学之后就能更好地研究宇宙物理学，我还不知道自己以后要学什么。”&lt;/p&gt;
&lt;p&gt;“我其实也只是瞎看瞎想，这些东西都是课外活动打发时间乱翻，真要进入专业领域，还有很多知识需要学习。”&lt;/p&gt;
&lt;p&gt;最近课外活动的大部分时间，我们确实都在踢球，下个月学校将举办校园足球联赛。今天是个好天气，放学后我迫不及待地来到球场，今天我们还要进行一场友谊赛，阿航专门约另外一个高年级班级和我们比赛，这是足球联赛前的最后一次练习赛。今天我和阿鲲还是踢后卫，我们负责防守，下午的时候阿航就说对方有个前锋以前是初中足球校队的队员，他的速度很快，如果我们能够防住他，就不用担心校园足球联赛的队伍。&lt;/p&gt;
&lt;p&gt;这位前锋个子不高，可是动作敏捷，很轻松地带球突破我们中场的防线，我看见他正往我这边进攻，于是冲上去顶住球，没有想到他突然转身，他的头撞到我的鼻子，我感觉头一阵眩晕，紧接着鼻子流出很多血，两分钟后血才止住，我以为只是和往常一样流鼻血，于是继续踢球。&lt;/p&gt;
&lt;p&gt;吃完饭回到宿舍，阿宇说我鼻子看起来有点奇怪，我通过镜子发现鼻子确实有点歪，多次确认后内心突然一阵慌张，鼻子极有可能已经被撞坏。阿航看见我很担心，给我提建议：“还是去医院看一下吧，否则破相就不好，我陪你一起去。”&lt;/p&gt;
&lt;p&gt;我在阿航的陪伴下，来到县人民医院，这是我第一次来到县城里的医院，现在已经下班，医院冷冷清清，散发着一股酒精和苯酚的味道，幸亏有阿航陪在旁边，否则我肯定会感到很凄凉。阿航家在邕城，也去过大医院，熟悉医院的流程，他帮我挂了急诊，正好今天外科医生值班，医生检查完毕后对我说：“小伙子，你的右边鼻梁骨折，得做一个小手术。”&lt;/p&gt;
&lt;p&gt;我听得有点发慌，居然要做手术，以前听到做手术，就说明是非常严重的疾病，医生看见我有些犹豫，继续说：“这只是一个小手术，矫正鼻梁骨，也不用开刀，我会给你打麻药，不会很痛，要是不做手术，以后可就要破相了。”&lt;/p&gt;
&lt;p&gt;想到可能会破相，我下决心忍一忍同意做这个手术，于是赶紧交钱，十几分钟后医生开始手术，阿航鼓励我：“别担心，我会陪在你的身边。”&lt;/p&gt;
&lt;p&gt;阿航的话让我万分感动，没有家人陪在身边，这时候有一位好兄弟在旁边，我内心顿时涌起一阵暖流。&lt;/p&gt;
&lt;p&gt;医生先用棉花涂麻醉药，再把这些麻药涂到我的鼻子里面，我感觉鼻孔一阵刺激，接着鼻腔内部变得麻木。过了两分钟，医生开始拿起手术的工具，他小心地把工具深入鼻子开始矫正，我感到一阵又一阵的痛，鼻孔里有大量的鲜血流出。阿航看几眼后就把目光移开，估计他被吓着了。&lt;/p&gt;
&lt;p&gt;医生止血之后，用纱布填满我的两个鼻孔，固定完毕，手术完成，他对我说：“这个纱布要留在里面几天时间，这段时间不要再让鼻子受到撞击，下周再来一趟医院，去掉纱布就没有问题了。”&lt;/p&gt;
&lt;p&gt;阿航叫了一辆三轮车，我们回到学校的时候第三节自习课的铃声已经响起，我发自内心感谢阿航：“今晚太感谢你了，还占用你那么多时间，实在抱歉。”&lt;/p&gt;
&lt;p&gt;“好兄弟，别那么客气，祝你早日康复！”&lt;/p&gt;
&lt;p&gt;晚自习下课前，班主任来到教室看见我的样子，问我怎么回事，我跟他撒了个谎：“走路的时候，不小心撞到墙上了。”&lt;/p&gt;
&lt;p&gt;后来的几天里，我的鼻子一直塞着纱布，阿鲲说我是刚刚从战场上负伤归来。周五晚上劳动委员小组开会，田茉才注意到我受伤的鼻子，开完会她很关心问我：“你鼻子塞成这样，一定很难受吧？”&lt;/p&gt;
&lt;p&gt;“还好，用嘴巴呼吸就行，我自己没关系，只是睡觉的时候打呼噜很厉害，我的舍友们说呼噜声响彻宿舍，估计他们比还我难受。”&lt;/p&gt;
&lt;p&gt;“听说你是撞到墙上弄伤的，听起来太不可思议了。”&lt;/p&gt;
&lt;p&gt;我赶紧跟她解释：“那是骗老师的话，我是在踢球的时候不小心被人撞到鼻子，撞击太强，鼻梁骨折了。”&lt;/p&gt;
&lt;p&gt;“看来你们男生还是更喜欢踢球嘛，我还以为你是做梦的时候摔下床，撞到地板弄伤。”&lt;/p&gt;
&lt;p&gt;田茉的半开玩笑的话让我感到一阵尴尬，她一定想起我前段时间做梦的时候说爱因斯坦错了的传闻。&lt;/p&gt;
&lt;p&gt;我其实很想告诉她，前两天连续两个晚上我都做了同一个梦，她也出现在这个梦里。我梦见了未来的自己，这是二十多年之后发生的事情，梦里我飞跃时空，苦苦寻求数学的突破，终于找到了解开宇宙奥秘的一把钥匙。&lt;/p&gt;
&lt;p&gt;这是一个关于终极理论的梦想，从爱因斯坦以来，科学家们一直梦想着能够发现一种终极理论，这样的理论可以调和相对论和量子物理学之间的矛盾，最终解释我们这个宇宙的奥秘。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》十五、历史宿命论</title>
      <link>https://dodoro.chouxiangpai.com/archives/1353/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1353/</guid>
      <description>&lt;p&gt;五月天里，阳光明媚，这是一个花果飘香的季节，三零六宿舍热闹非凡，宿舍里的“桥镇三剑客”带来自家产的“三月红”荔枝，五零八班的男生们正在品尝鲜美的荔枝。荔枝与香蕉、菠萝、龙眼并称南国四大果品，这四种水果也是桥镇盛产水果，这里地处亚热带，加上壮族人民勤劳的努力，桥镇每年都是硕果累累。品尝美味的荔枝，让我想起苏东坡先生的感叹：“日啖荔枝三百颗，不辞长作岭南人。”&lt;/p&gt;
&lt;p&gt;荔枝收获的季节意味着炎热的夏天已经到来，这样的大热天里，我们最期待的就是去学校旁边的灵水湖游泳，学校的师生有一个特权，不用购买门票，只需要佩戴校牌就可以自由进出灵水湖。&lt;/p&gt;
&lt;p&gt;灵水湖很宽阔，水面大约有三万平方米，这是一个很特别的大型岩溶河泉群，据说总共有九个大泉眼，湖水清澈透碧，熟知历史的阿宇告诉我们：“灵水湖自古以来就有‘碧琉璃’的美称。”&lt;/p&gt;
&lt;p&gt;灵水湖最大的特点是水温长年保持在二十摄氏度左右，号称全国三大恒温泉水湖之一，冬暖夏凉，这里是绝妙的游泳胜地，一年四季都有人在湖里游泳。&lt;/p&gt;
&lt;p&gt;今天我和阿军、阿哲、阿航、阿风和阿宇相约到灵水游泳，午后的时光正好，阳光灿烂，我们在清澈的湖里游泳，靠近出水口的地方有铁栏杆围着，里面有大型水管，这些水管将灵水湖的泉水运送到县城里的千家万户，这是大自然给予的馈赠。&lt;/p&gt;
&lt;p&gt;阿风的学校就在灵水的西北方向，他对我们说：“我以前也偶尔跟同学来这里游泳，十块钱的门票很贵，我们都是从灵水桥附近的栏杆翻越进来游泳。”&lt;/p&gt;
&lt;p&gt;阿航也来过这里游泳：“灵水湖在邕城也很有名，我初中的时候和家人专门坐车来这里游泳。”&lt;/p&gt;
&lt;p&gt;“何止在邕城有名，灵水湖在全国都很有名，这里曾经是省游泳队的训练场所，七十年代的时候，连越南的国家游泳队也来这里训练。后来这里还建设国家体育训练基地，每年冬天的时候，全国各地的游泳、水球、跳水、潜水队员都会到灵水湖进行训练。”&lt;/p&gt;
&lt;p&gt;我们总是可以从阿宇那里获得很多过去的知识，我想起来灵水路靠近灵水湖大门的地方有一个院子，门口写着：国家游泳队训练基地。我继续问他：“听说徐霞客曾经到过我们县城，不知道他是否来过灵水湖。”&lt;/p&gt;
&lt;p&gt;“我读过徐霞客的游记，并认真阅读涉及到县城和邕城的内容，很遗憾没有看到关于灵水湖的记载，甚至没有看到关于伊岭岩的记载，关于徐霞客游伊岭岩和灵水湖，更多的是人们的推测。据考证，徐霞客在邕城及周边游历长达一百多天，很可惜的是这段时间，徐霞客游邕城的日记全部遗失，只有仅存的九月初九日记里面记载了邕城、高峰和武缘。”&lt;/p&gt;
&lt;p&gt;我听完阿宇解释，觉得徐霞客在邕城的日记丢失是一件非常遗憾的事情。我想他很可能是来过县城，这么一位对山川河流、奇峰秀水那么钟爱的大旅行家，怎么可能错过千姿百态的奇洞伊岭岩和三大恒温泉之一的灵水湖。&lt;/p&gt;
&lt;p&gt;阿航一直观察湖里游来游去的小鱼，他还试图去抓，我告诉他：“你就别枉费心机啦，水里是鱼儿的世界，没有捕鱼工具你不可能抓住它们。”&lt;/p&gt;
&lt;p&gt;人越来越多，阿风和阿航他们游到湖中间的训练场，那是依托湖水建造的天然游泳道，这时候还有一些小朋友正在进行游泳训练。我游不了那么远，打算就这么泡在水里，阿哲和阿宇也不擅长游泳，刚刚他们已经上岸。不久之后，我也打算上岸，正要离开的时候，看见田茉和萧影也来到了灵水湖，她们手上提着一个小包往更衣室走，看样子也是来游泳。&lt;/p&gt;
&lt;p&gt;几分钟后，田茉从更衣室走出来，身材偏瘦的她，身穿一件淡蓝色的露肩连体泳衣，优雅的泳衣包裹着纤细的腰身，不仅完美呈现出身体曲线，也透露着几丝神秘感，我觉得她全身都散发出美好，这是一种少女独有的纯净之美。此时的她，宛如一个美丽的天使，她正往我这边走，每走一步都拨动了我心里的琴弦，然而我没有勇气迎上去，于是从水里绕到另外一边，迅速离开游泳区。我换完衣服出来扫了一眼湖面，很快就从人群中看见田茉已经在浅水区域游泳，我目不转睛地看着她，突然很后悔刚才没敢面对她打招呼。&lt;/p&gt;
&lt;p&gt;我带上换下的衣服不舍地离开灵水湖，看见阿哲和阿宇正坐在远处的一棵榕树下休息，阿宇喜欢并熟知历史，阿哲喜欢哲学也乐于思考，他们平时很少互相对话，我想和他们凑在一起谈天论地，期待我们三个人在一起会碰出思想的火花。&lt;/p&gt;
&lt;p&gt;我走过去和他们并排坐在一起，我先引出话题：“我最近看到关于宿命论的观点，很多哲学家认为宇宙中的一切都已经命中注定，部分哲学家认为人类的历史发展也是如此。甚至被认为是随机过程的概率论也是如此，比如一个骰子抛出之后，它的正反就已经注定，骰子抛出的那一刹那，力度、方向就确定，所以落下过程中它的轨迹就已经确定。你们相信历史宿命论吗？”&lt;/p&gt;
&lt;p&gt;阿哲接过我的话：“我不确定是否有宿命论。文艺复兴时期的很多哲学家和科学家相信宿命论，我认为他们是建立在忠诚于上帝的基础之上。这种宿命论的观点往往夹杂着神秘主义和超自然主义，但是这种观点拒绝认真细致分析每一种主义的来龙去脉，往往只把符合自己结论的论据拿来使用。我一直觉得宗教和神学喜欢超自然的现象，他们对神秘事物总是抱着推崇的心态。”&lt;/p&gt;
&lt;p&gt;阿宇也有自己的看法：“我也不确定。我曾经在历史书上看到过一种观点：历史的发展不一定按照一定的规律，如果未来一定是完美和进步，那么我们何须努力？如果未来注定万劫不复，那么我们再努力也是无用。既然自人类诞生文明以来这么长时间，大量的先哲们孜孜不倦地为改变人类的历史而努力，我认为他们都相信历史并不是必然和注定，这也是为什么我打算大学的时候学习历史，希望深入的学习能够获得答案。”&lt;/p&gt;
&lt;p&gt;阿哲听完阿宇的论述之后说：“一般抱着决定论的人，内心都有希望有一个明确的真理。可是真理是什么？我给不出答案，我认为我们只能无限接近真理。”&lt;/p&gt;
&lt;p&gt;阿宇接着说：“虽然没有绝对的真理，但是我认为存在一些人类最基础的共同价值，比如真实、善良和美好，或者说美丽。”&lt;/p&gt;
&lt;p&gt;课堂的知识曾经一度让我相信历史发展的必然，人类社会的发展遵循必然的发展过程。这种哲学的核心以进化论和唯物论为基础，并深受柏拉图和黑格尔学说的影响，认为人类历史的发展必然遵循一定的规律。他们的对话给我很大启示，结合我的阅读感受，我隐隐之中感觉到还有其他更能自圆其说的叙述。&lt;/p&gt;
&lt;p&gt;达尔文的进化论揭示出了物种进化的规律，物竞天择、适者生存，大量古生物遗迹留下很多证据都支持达尔文的学说，这么看起来，似乎课堂知识的历史观无懈可击，可是我记得孟德尔的遗传学也提到突变的作用，地球的历史甚至经历巨大变化，冰川时代和小行星撞击彻底改变过地球上的物种，生物的进化并不一定完全按照历史发展的规律来发展。那么到底是进化的作用更大，还是突变的作用更大？&lt;/p&gt;
&lt;p&gt;也许正如阿宇所说，如果历史必然会如此发展，我们完全就无需努力，坐着等待那一天的到来。当然，也还有另外一种观点，认为这种历史必然发展的观点是一种美好和进步的理想，虽然历史不是必然，但是我们可以通过努力去实现这种理想。&lt;/p&gt;
&lt;p&gt;我也曾经认真思考过这两种观点，我还不确定哪种观点就是真理。我看到一些哲学家的看法是：如果这只是一种理想，那么它就不能冠以科学的称号，而只能称之为形而上学的学说，或者类似一种基于个人的宗教信仰。提到宗教信仰，我想到的是黑暗中世纪，还有文艺复兴时期的宗教冲突，而罗素先生留下来的忠告历历在目：“这种信仰最危险的特点使人联想起中世纪的教会，他们狂热地接受在一本圣典中表述的学说，不愿批判地审查这些学说，而是残酷迫害拒绝接受这些学说的人。”&lt;/p&gt;
&lt;p&gt;足球赛的风波之后，阿宇和阿军也加入我们的跑步行列，今天傍晚他们第一次跟我们跑步，几个人一边聊天一边慢跑，从学校小南门出发，穿过灵水桥，再往前走来到渡头村东江和西江汇流处，远远就看见一座塔，这是县城里的一座古建筑文江塔，高高的塔尖立在河畔留下倒影，我心想是不是西湖的雷峰塔也长这样子。&lt;/p&gt;
&lt;p&gt;我们一直跑到文江塔前，这时候阿宇又给我们普及知识：“我从县志上看到关于文江塔的记载，塔高四十米，是一座七层八角塔，每层有拱门圆窗和其他形状的花格窗共八个。塔基用条石浆砌，楼板以杉木构建。塔身挑檐釉瓦，彩绘浮雕。塔壁夹墙有宽一米五的螺旋梯共一百八十七级，上至塔的顶层，顶层供奉文章之神魁星塑像。”&lt;/p&gt;
&lt;p&gt;我们很认真地听他讲解，我对这座塔有很大的兴趣，这是我从小到大看到的第一座古建筑，以前只是在电视上、书本上看到过古建筑的样子。&lt;/p&gt;
&lt;p&gt;阿宇继续：“文江塔最早建于清道光六年，也就是一八二六年，当时武缘县隶属思恩府，太守李彦章批准了武缘县令的建塔请求。武缘县各界名流人士踊跃协助建塔，两年后，这座气势恢弘的七级浮屠便屹立于武缘河岸。”&lt;/p&gt;
&lt;p&gt;阿军对这段历史也很感兴趣：“为什么在清朝后期才考虑修建这座塔呢？”&lt;/p&gt;
&lt;p&gt;阿宇看了他一眼，笑着说：“这个和大明山的传说有关，县城东南方向的大明山原名叫镆铘山，镆铘是古代宝剑名，镆铘剑影下的武缘属龙虎之地，武夫辈出，文人少有，当时的人们希望建文江塔于东西两江会合处，能够阻滞龙虎之势，保佑振兴武缘县的文风。”&lt;/p&gt;
&lt;p&gt;我觉得阿宇的描述听起来有些玄乎，我倒是对塔的年代有些疑惑：“我看这个塔的样子挺新，不像是近两百年的建筑。”&lt;/p&gt;
&lt;p&gt;阿宇抬头看着塔，发出叹息：“这个说来话长，文江塔自建成以来，多次被损毁，八十年代才由县政府拨款建成。二十年代旧军阀互斗，粤军入侵县城讨伐陆荣廷，他们焚毁塔内部分设施及塔边凉亭庙宇。四十年代日军入侵邕城，从桥镇方向炮击文江塔，将顶层南面炸开一个大窟窿。大跃进期间，又有人把文江塔当作高炉来炼钢，将木柴、矿石堆放到塔内焚烧，结果钢铁没练成，塔却被损毁更严重，后来就没人再管这座破烂不堪的建筑，一直到改革开放后才重建。”&lt;/p&gt;
&lt;p&gt;听完阿宇的这番话，我才知道这座塔历经这么多风风雨雨，一座塔就是县城、甚至国家的近现代史，我们站在塔下抬头仰望，银灰色的塔身，黛绿色的翘檐，金色的琉璃瓦，已经退了色的天蓝色的“文江塔”三字印在塔上。&lt;/p&gt;
&lt;p&gt;我希望这座塔一直屹立于此，它一定会继续为后来者诉说它的过去，我想它更希望自己的过去能够为后人指出一条光明的路途，正如阿宇所说：只有真实地面对过去，才可能有未来。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》十八、后记</title>
      <link>https://dodoro.chouxiangpai.com/archives/1361/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1361/</guid>
      <description>&lt;p&gt;高中最后两年，班主任不再重新选班干部，只是对个别岗位做了调整，我一直担任正劳动委员，田茉也一直是副劳动委员，我们在一起合作。我一直珍藏那份心意，我曾经小心翼翼地试探过她是否知道我就是那个来自火星的家伙，她似乎只是感受到我的友好，却没有猜出我的想法。我的理智也告诉我、并提醒我，这时候永远不要去捅破那层薄薄的纸片，更何况我不知道那层薄纸后面是满满的幸福还是失落的荒园，我需要这点暖暖的、稳稳的幸福，用来驱赶备考的孤独和压抑的酸楚。&lt;/p&gt;
&lt;p&gt;跟所有同学一样，我和田茉都努力地学习，认真地看书。课外的间歇，我依然会跑去阅读课外书籍，我在图书馆的阅览室经常看见她的身影，从大礼堂阅览室阅读理论物理学后走出来，我经常能听到她广播里的声音和她播放的音乐，我想象着那首《爱江山更爱美人》就是她放出来的歌曲。&lt;/p&gt;
&lt;p&gt;高三的生活，每天不是做题就是测验，班级里也充斥着浓浓的你追我赶，竞争本是好事，可是过了头的话会导致同学间的那种说不出来的人情冷漠。班主任似乎也意识到了这一点，他不只一次提醒我们：真正的对手是省内其他学校，同一个学校里特别是同一个班级里，大家要抱着互相学习的心态，毕竟最终所有人都会水涨船高。或许他已经忘记了，这群人都是原来乡镇里曾经傲视群雄的猛虎，现在关在同一个笼子里，怎么可能不会暗地里较劲，个别按捺不住的时候还要怒吼示威。&lt;/p&gt;
&lt;p&gt;灵水已经不允许游泳，高二下学期的那场非典疫情之后，学校顺势从半封闭式管理变成全封闭管理，周一到周日上午没有班主任的假条谁都不能走出校门一步，这使得本来就很紧张压抑的高三变得更加让人透不过气，辛亏每周还有半个白天的自由时间，就这么一点点可怜的时间里，我依然会经常叫上阿航、阿宇、阿哲、阿瑾和阿军他们，一起奔赴县体育场踢球、或来到灵水湖畔漫步，我们在日落时光，回忆一起经历的那些自由自在、无忧无虑的日子，那是我们高中最美的时刻，这点回忆能给予我们勇气，来战胜备考的孤独、煎熬和透露几分压抑的班级空气。&lt;/p&gt;
&lt;p&gt;高考如期提前到来，从我们这一届开始提前一个月高考，“七七”变成了“六七”，我已经不太记得自己如何走出考场，只记得最后一门科目考试结束的那一天下午，高三宿舍楼下起了“纸雨”——练习题和作业本从楼上洒落而下，这是压抑一年多之后的宣泄，五零八班的男生没有参与这样的狂欢，我们脑子冷静和清醒，我们一直认为我们是这一届里最富有理性的代表。&lt;/p&gt;
&lt;p&gt;不久考试分数公布，我们这一届没有顶尖高分者，几乎注定没有班主任期待的那两所超级名校，班主任和年级领导或许有些失望，选择志愿的时候，老师们也没有过多关心我们如何根据自己的特点选择专业，只是说尽量选择叫得上名的学校就行。对学校来说这是一个结束，而对我们来说却是另外一个新的开始，大部分人将走向五湖四海，前程似锦又充满不确定性。&lt;/p&gt;
&lt;p&gt;提交完志愿之后，我们来到春霞园和明秀园聚会烧烤，这里曾经是陆荣廷和李宗仁故居所在地。班长没有邀请老师，而是叫上了所有曾经在五零八班留下足迹的同学，往事已成烟云，我想他一定是希望在踏上新的征途之前，大家相聚在一起，敞开心扉，一笑泯恩仇。&lt;/p&gt;
&lt;p&gt;我和阿军很早就来到聚会地点，我们和阿航、阿哲、阿宇、阿风和阿瑾坐在一起，谈笑间我们追忆逝水年华，也谈论着未来。往事已成烟云，铭记过去的同时，年轻的我们更向往未来，我们对即将到来的大学充满无限想象和期待，哪怕此时此刻我们还缺少一张录取通知书。我不时地往公园入口的方向看去，我期待看见一个人的身影。&lt;/p&gt;
&lt;p&gt;终于田茉来了，她穿着小短裙，头发后面的小辫子又变长了，那一刹那，我被她迷住了，好想冲上去给她一个大大的拥抱，当然这只是我的想象，我不可能迈出这一步，甚至连表白的勇气都没有。这方面我确实太胆小、怯懦，明明高考已经结束，我安慰自己说是时机还没有到来，其实我更害怕的是被拒绝，如果说出来被拒绝，那么这份珍藏三年的美好就永远地消失得无影无踪。看见班里的其他男生上去和她打招呼，我有些失落地把目光移开。&lt;/p&gt;
&lt;p&gt;我坐在烧烤炉旁，看着武缘河水缓缓流动，突然想起初中的时候看到的赫拉克利特的话：人不可能同时跳进同一条河，因为河水一直在流动。我一直觉得自己是一个乐观的人，此时却感受到淡淡的忧伤，或许再乐观人的内心里也藏有悲观的影子。&lt;/p&gt;
&lt;p&gt;聚会期间我不时地往田茉的方向看去，她脸上一直挂着欢笑，好几次我打算找机会和她说话，可是看见班里的男生热情地为她递上烤好的食物，我最终都放弃了尝试。萧影专门带来相机，大家陆陆续续合影留念，这应该是我们高中生活的最后一次见面，今日一别，也不知道何时会再次重逢，我真的很想再多留下点和田茉的美好记忆。&lt;/p&gt;
&lt;p&gt;眼看聚会即将结束，田茉离开之前，我终于鼓起勇气邀请她跟我拍一张合影，可是她没有同意，这时候阿航也走了过来，他很想试一试新式相机。萧影不愿意让他拿相机，他执意要抢过来，一不小心按下快门，我听到声音迅速回头，他对我笑了笑。刚才的镜头似乎正对着我和田茉，我没有走上去问阿航是否照到我们，如果拍下来这是我和她的第一张两个人的合影，我心里打算让天来注定，此时此刻我想到的是关于宿命论的说法。&lt;/p&gt;
&lt;p&gt;“人生中的遭遇都是早已注定的，一切事情都由人无法控制的力量所促成。”&lt;/p&gt;
&lt;p&gt;包括笛卡尔、牛顿和高斯在内的很多数学家都相信宿命论，他们认为数学定理是被发现而不是被创造，数学定理和公式就在那里，可能是上帝创造它们，也可能是宇宙之初就诞生，人类只是去发现它们的存在。&lt;/p&gt;
&lt;p&gt;我其实也不确定是否存在宿命论，就如同我不知道是否会有历史决定论，从哲学层面来说这是马克思之路，这是一条和罗素完全不一样的道路，我现在还不知道哪条是光明之路。&lt;/p&gt;
&lt;p&gt;七月初的时候，我在家里从电视新闻上看到县城下起了一场大暴雨，这场大雨淹没了很多街道，甚至淹没了五海桥，灵水湖罕见地满溢而出。我记得民间里一直流传着这样的传说：武缘高中背靠灵水，大雨会带来鲤鱼跳龙门。这场大雨来得太晚，也许就因为我们提前一个月考试，我想如果是七月七日高考，是不是我们将跳出大龙门，每个人的结果都会完全不一样。&lt;/p&gt;
&lt;p&gt;漫长的等待之中，我陆续接到同学们拿到录取通知书的好消息，包括阿瑾、阿航和阿鲲在内，我和大部分同学都实现了自己的愿望，考入自己心目中的重点大学，阿宇进入自己梦想大学的历史系，阿军留在省内，阿风和其他两位同学进入军校，阿哲去了北京。&lt;/p&gt;
&lt;p&gt;田茉考得很好，她也选择去北京，我直到提交志愿的那天，才看到她的志愿，我没有考虑过北京，我一直听学长说那里消费很高，北京的高校在这里的分数线普遍偏高，而我的分数也去不了那里的好大学，更何况我还非数学专业不上。我选择去了中南地区，那所学校有我喜欢的一位数学家，当我通过网站查到自己被数学系录取的时候，我知道我实现了自己理想的第二步，数学男孩终于获得脱胎成为数学王子的机会，哪怕那只是一丝机会。&lt;/p&gt;
&lt;p&gt;我和阿军一起去学校领录取通知书，来到校门口，我再次注视校门口的金色大招牌，这里曾经是我们的神圣之所、向往之光和梦想之地，如今这里却只留下了让我们一生忘不掉、抹不去的无畏理想、少年泪水和残血青春。&lt;/p&gt;
&lt;p&gt;我们在校园里正好遇到了阿航、阿哲和阿宇，我们一起沿着光明之路走，这三年来所有的老师都说这条路可以通向远方、通向世界、通向未来。&lt;/p&gt;
&lt;p&gt;我们都相信，我们有一条光明之路。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》十六、火星人的来信</title>
      <link>https://dodoro.chouxiangpai.com/archives/1357/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1357/</guid>
      <description>&lt;p&gt;六月的灵水路上多了几分火红，从教室的窗口就可以看到路边那棵满树结花的凤凰树，花朵灿烂绽放，红彤彤的一片又一片，远望犹如一只只停歇在树上的凤凰，十分壮观。&lt;/p&gt;
&lt;p&gt;凤凰树广泛种植于岭南地区，它的树冠横展而下垂，浓密阔大而招风，在热带地区担任遮荫树的角色，它拥有鲜红、橙色的花朵和鲜绿色的羽状复叶，被誉为世上最色彩鲜艳的树木之一，凤凰花开，如飞凰之羽，若丹凤之冠。&lt;/p&gt;
&lt;p&gt;这是我第一次看到美丽的凤凰花，上个月的一次班级外出劳动，我从田茉那里得知这棵凤凰树，她告诉我们县城很多地方零零星星都种有凤凰树，凤凰花代表离别、思念和火热的青春。&lt;/p&gt;
&lt;p&gt;随着火热的凤凰花开，韩日世界杯已经拉开帷幕，半年前阿鲲就告诉我中国队很不幸地被分在“死亡之组”，阿瑾却说不管我们分哪个组都是死亡之组。大家都在讨论这次比赛，重点是如何才可以小组出线，阿鲲很郑重地说：“最重要的是对阵哥斯达黎加的比赛，如果能战胜哥斯达黎加，逼平土耳其，那么我们就有机会出线！”&lt;/p&gt;
&lt;p&gt;据阿瑾从《体坛周报》获得的信息，阿鲲的话代表所有球迷一厢情愿的愿望，阿瑾不抱太大的希望，他认为我们能进一个球就很不错。&lt;/p&gt;
&lt;p&gt;我们迎来了第一场比赛，对于中国人来说，今天是一个极其重要、不能忘却的日子，中国队有史以来首次亮相世界杯决赛圈舞台，对手是哥斯达黎加。比赛不是在周末，下午上课之前很多男生都带上收音机来到教室，阿斌、阿鲲、阿瑾和阿军都打算通过收音机收听这场重要的比赛。&lt;/p&gt;
&lt;p&gt;我只听了一点开头就埋头写作业，我同意阿瑾的判断，这场比赛我们获胜的概率其实很小，我打算课外活动课的时候看一点回放就可以。大约二十分钟后，教室后排发出了一个声音：“我靠，天啊！”&lt;/p&gt;
&lt;p&gt;阿斌带着耳机忍不住喊出声音，大家回头看他，旁边的人问他是不是丢球了，我看见阿鲲紧握拳头，神色凝重，看来出大事了。阿斌抬起头，才意识到自己带着耳机，他压低声音说：“孙继海受伤下场了，被对方飞铲倒下。”&lt;/p&gt;
&lt;p&gt;我记得阿瑾说过：孙继海长期效力海外，作为目前亚洲第一中后卫，他是中国队后防线上的定海神针，并且能够频繁为队员送出助攻。上半场刚刚进行一半就失去一员大将，我感到赢下这场比赛的希望更渺茫。&lt;/p&gt;
&lt;p&gt;第二节课上课不久，后排的男生又发出一阵骚动，他们愁眉苦脸，阿鲲甚至双手抱着头顶，绷着脸咬牙，原来我们在六十分钟的时候丢了第一个球。&lt;/p&gt;
&lt;p&gt;第三节上课之前，我们已经落后两个球，距离比赛结束只有不到十分钟，很多男生已经摘下耳机，大家都认为比赛几乎已成定局。我看见阿鲲还挂着耳机，他并没有放弃，我对他说：“别浪费时间了，你还是好好复习吧，我觉得这场比赛我们输定了。”&lt;/p&gt;
&lt;p&gt;阿鲲依然怀有最后一丝希望：“以我看球的经验，足球比赛不到最后时刻不知道结果，这也是足球的魅力。”&lt;/p&gt;
&lt;p&gt;这时候阿瑾凑上来打击他：“很可惜，这条定律并不适合中国队。”&lt;/p&gt;
&lt;p&gt;最终阿鲲期待的奇迹没有发生，中国队输掉了比赛，阿鲲很沮丧，这场比赛的失利几乎意味着不可能小组出线。第二天阿鲲收听电台广播，主持人计算着中国队出现的概率，只存在理论上的出线机会。&lt;/p&gt;
&lt;p&gt;第二场对阵巴西的比赛是在周末，我们都抱着观看巴西队表演的心态来看待这场比赛，巴西队最后也很轻松地以四个球的优势拿下比赛，两场失败意味着中国队已经提前告别世界杯，阿瑾告诉我们：“最后一场对阵土耳其的比赛是荣誉之战。”&lt;/p&gt;
&lt;p&gt;几天之后土耳其又以三比零完胜中国队，我们连输三场，丢了九个球却一球未进，阿军不停叹息：“只能等待四年后再来。”&lt;/p&gt;
&lt;p&gt;阿瑾却很悲观：“我们下一轮进入世界杯，大概得等到中国自己举办世界杯的时候了。”&lt;/p&gt;
&lt;p&gt;随着中国队告别世界杯，这阵子的足球热潮开始降温，男生们逐渐收回心来努力备考，这是高一结束前的期末考试。面对这次考试，所有人都很紧张，上个月年级领导突发决定，打算趁着分文理班的时候重组民族班，以往都是让其他班的同学填补去文科班同学的位置，这次领导们打算让考得太靠后的同学也离开民族班。&lt;/p&gt;
&lt;p&gt;我们都没有想到过学校会来这一招，这个听起来有些残忍。具体的措施并没有确定，也没有公开，有些人说是以所有科目的成绩为准，也有些人说是以高考理科科目成绩为准。无论是以哪个成绩为准，我们都知道，每科都考好来，这样才不会受到牵连。&lt;/p&gt;
&lt;p&gt;最近一段时间我们的乐队活动也已经取消，去踢球的人变少了，提前到教室的同学变多了，同学们之间也很少说话，自习课堂不再听到吵闹声，我第一次感觉到学习的压力。我不认为自己会考得很差，可是也提醒自己要拿出十足的劲头学习，也许这就是学校领导的策略，通过压力来赶着我们学习。&lt;/p&gt;
&lt;p&gt;田茉的状态似乎不太对劲，这个学期我们的座位已经调整，我和她在同一列，她就在我的前两排，我观察她总是很晚才来到教室，最近一直听到她咳嗽，已经持续一周多，偏偏在这个关键的时刻里田茉生病了，我看到她的脸上总是挂着难受的愁苦。&lt;/p&gt;
&lt;p&gt;临考前的一个月，老师们总是进行测验，田茉的最近两次测验中，数理分数掉得厉害，我想着要是真的以理科分数计算，万一她理科考得不理想，会不会明年就直接去文科班。我越想越着急，希望能为她做点什么，除了把劳动委员的各种事务都包揽过来，我似乎做不了什么。&lt;/p&gt;
&lt;p&gt;每天从后面看见她咳嗽的样子，我真的想做点什么，最后我终于忍不住了，今天课外活动课结束后，等到所有人都离开教室之后，我以火星人的名义给她写了一张鼓励她的纸条：&lt;/p&gt;
&lt;p&gt;“看到你最近总是咳嗽，数理测验的成绩也下降了不少，我一直觉得你是一个聪慧的人，请保重身体，一定可以早日恢复，无论如何，请记住有一双眼睛永远在为你加油！”&lt;/p&gt;
&lt;p&gt;我小心翼翼地改变自己的笔迹，采用类似卡通圆润的字体，我并不想让她知道我是谁，生怕这样反而会对她造成困扰，我在纸条的最后面署名：火星人。终于等到教室一个人都没有，我站起来往前走，心里扑通地跳，像一个要做坏事的孩子，我来到她的座位前，紧张地扫一眼教室前后两个门，确认没有人之后，我迅速把纸条从课桌的缝隙塞进去，然后闪电般离开教室。&lt;/p&gt;
&lt;p&gt;我终于鼓起勇气给她写点东西，这是我第一次给女生写纸条，不严格地定义的话，这也勉强算是一封情书，虽然上面没有任何表白的内容，也没有任何爱慕的意思。离开教学楼后，我步子变得轻快起来，穿过已经结满果子的扁桃树，我带着一股兴奋感回到宿舍。&lt;/p&gt;
&lt;p&gt;傍晚时分，我直到上课铃响的前一分钟才来到教室，我从后面偷偷观察田茉，她和往常并没有太大变化，正在座位上认真地看书。我不知道她是否看到纸条，希望我这份真心的祝福能给她带去好运，早点摆脱生病的困扰，迅速投入复习之中。&lt;/p&gt;
&lt;p&gt;第三节课是化学自习课，班主任扛着一大叠批改好的试卷来到教室，他表情严肃，脸色有些发黑。同桌阿风对我说：“从班主任的表情来看，昨天我们班的化学测验结果估计很差。”&lt;/p&gt;
&lt;p&gt;“这么快就改完试卷，速度越来越快了，班主任难道都不休息吗？”&lt;/p&gt;
&lt;p&gt;阿斌一边说一边把数学课本偷偷换成化学课本，他最近正在猛补数学。班长用手从桌子下方提醒还在着迷看小说的阿益，他收到提醒后迅速把化学课本放到最上面。我看见阿航还在座位上努力摆弄电子产品，我知道他正在试图维修被我弄坏的文曲星。&lt;/p&gt;
&lt;p&gt;这个学期以来，班里不少人买了文曲星学习机，里面有一款经典的游戏《英雄坛说》，班里喜欢武侠小说的男生们迷上了这款游戏，大家都希望成为平安小镇上的英雄人物。前几天阿航从女生那里借来文曲星，晚自习下课之后，我们一起躲在卫生间里轮流玩游戏，我接过文曲星后，不小心把它弄掉到了装满水的桶里，捞起来之后文曲星就再没有正常运行过。&lt;/p&gt;
&lt;p&gt;我很感激阿航，他把一切责任都包揽过来，也没有和我提赔偿的事情，我觉得他才是真正的英雄。班主任站上讲台把试卷放下，阿航依然在努力地操作文曲星，他一定是希望靠自己的力量让文曲星重新复活。&lt;/p&gt;
&lt;p&gt;“同学们好，昨天的化学测验我已经改完，虽然有很多同学做得不错，可是也有不少同学的成绩不太理想，必须要加倍努力。”&lt;/p&gt;
&lt;p&gt;说完后他把试卷分成两份，他和以前测验完的手法一样，开始花上十分钟时间把考得好的学生名字念一遍，我们都知道他要表达的意思：我就不直接点名谁成绩差，考不好的你们自己知道。&lt;/p&gt;
&lt;p&gt;过了三天，我很开心地看见田茉咳嗽消失了，脸上又重新挂上微笑，第二周的测验，她的物理和数学成绩也恢复了正常。看到这样的景象，我内心充满欢乐，这才想起来她的成绩一直很靠前，倒是我需要关心一下自己，我要加倍努力，别最后离开班级的人是我。&lt;/p&gt;
&lt;p&gt;两周后我们迎来高一结束前的期末考试，还是和往常一样和高二年级的班级交叉考场考试，这一次我们的黑板前面也开始堆积试卷，大部分都是这个学期的测验，看来不用等到高二，老师已经开始让我们感受到高考的压力。&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》十四、激情足球赛</title>
      <link>https://dodoro.chouxiangpai.com/archives/1350/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1350/</guid>
      <description>&lt;p&gt;课外活动和周末的时间，足球场是男生的乐园，距离韩日世界杯还有不到一个月的时间，这是亚洲第一次举办如此重要的赛事，学校里开始弥漫着世界杯的氛围，与此同时，校园足球联赛也即将拉开帷幕。体育部组织热爱足球的学生参加裁判培训，阿鲲和阿瑾都报名参加，他们最终都拿到了国家一级裁判的证书，学校足球联赛的裁判将由这些受训的学生来担任。&lt;/p&gt;
&lt;p&gt;阿宇拿起阿鲲的裁判证书，笑着说：“没想到我们的阿鲲同学居然都当上裁判，太厉害了，我看好你。”&lt;/p&gt;
&lt;p&gt;阿瑾总是喜欢和阿鲲开玩笑：“哈哈，我们的阿鲲同学应该会被分为边裁。”&lt;/p&gt;
&lt;p&gt;阿鲲听完后低着头、不说话，我知道他其实一直梦想当主裁判，他跟我说过自己从小学就开始看足球比赛，他对足球规则了如指掌，我相信他的话，而且我觉得他将会是一名非常公正的金哨。&lt;/p&gt;
&lt;p&gt;这两天队长阿瑾热情地组织班级足球队，我、阿航、阿哲和阿军都加入球队，阿航也把阿风拉进来，他认为阿风篮球接得很好，运动细胞也好，非常适合当守门员。现在最重要的事情是选队服，课外活动时间，阿瑾召集我们在一起：“我们先来讨论一下班级队服吧。”&lt;/p&gt;
&lt;p&gt;阿鲲提议：“我们就选择阿根廷的队服吧。”&lt;/p&gt;
&lt;p&gt;班级里很多男生都喜欢阿根廷队，阿鲲对阿根廷更是情有独钟，他从开始看球就支持阿根廷队，他最喜欢的球星是阿根廷的马拉多纳，一九九四年世界杯的时候，刚读小学三年级的他就亲眼见证球王马拉多纳重现江湖，他专门买了一期关于马拉多纳传奇经历的足球杂志。&lt;/p&gt;
&lt;p&gt;包括阿斌和阿瑾在内，几乎所有的人都赞同阿鲲的提议，阿瑾继续说：“那我们开始选号码吧，我打算选九号。”&lt;/p&gt;
&lt;p&gt;阿鲲跟我说这个号码是巴西队罗纳尔多的号码，罗纳尔多是阿瑾最喜欢的球员，我很早以前就听说过罗纳尔多这个名字，他经常出现在电视上的金嗓子喉宝广告里。&lt;/p&gt;
&lt;p&gt;阿斌选择七号，这是英格兰队贝克汉姆的号码，也是阿斌最喜欢的球员，班里很多同学喜欢贝克汉姆。&lt;/p&gt;
&lt;p&gt;我对号码没有什么概念，也没有崇拜的球星，等到大家都选择完自己号码的时候，阿鲲问我：“阿靖，你打算选哪个号码？”&lt;/p&gt;
&lt;p&gt;我想了想，自己是十月出生，我问他：“十号有人选了吗？没有人选我就来选这个号码。”&lt;/p&gt;
&lt;p&gt;阿瑾、阿斌和阿鲲惊讶地看着我，阿鲲偷偷问我：“你确定要选十号吗？”&lt;/p&gt;
&lt;p&gt;我自信满满地跟他说:“没错，我正好是十月出生，我喜欢这个号码，它或许能给我带来好运。”&lt;/p&gt;
&lt;p&gt;几天之后，队服下来，我穿上十号队服，阿鲲看着我说：“穿上这件十号，你的身材和马拉多纳倒是挺像。”&lt;/p&gt;
&lt;p&gt;我这才醒悟，原来这个号码是马拉多纳的号码，不仅如此，我翻开阿鲲的杂志，才知道十号也代表着队伍的灵魂。我这么烂的水平，踢后卫的位置，居然大言不惭地选择十号。号码已经印上去，生米煮成熟饭，就这样，我成为五零八足球队里的伪十号先生。&lt;/p&gt;
&lt;p&gt;两周之后，我们迎来第一场比赛，对手是高二年级的民族班。阿瑾是自由人，阿融和阿路是前锋，阿鲲、阿锐和阿航是中场，阿哲、阿斌和阿军都是后卫，守门员是阿风，我穿着沉重的十号队服站在后卫线上。&lt;/p&gt;
&lt;p&gt;比赛开始了，对方比我们高一个年级，也就是比我们多踢了一年球，他们配合地非常好。没想到第一个球就往我这里进攻，我很紧张，脑子里想起阿鲲的话：如果不行就大脚踢走。于是我猛地大脚踢向足球，把球提到对方场地的界外。&lt;/p&gt;
&lt;p&gt;比赛继续，对方发出来的球被阿瑾断下，我们都很兴奋，不过大家都不敢往前压。阿瑾一个人进攻，过中场后，通过假动作晃过一名防守队员，阿路和阿融都被对方死死防住，没有人配合阿瑾，球被很快又被对方断了下来。&lt;/p&gt;
&lt;p&gt;对方继续发起进攻，他们从中场大脚往前吊球，方向往阿鲲的这边，我看见阿鲲似乎没有觉察到球的方向，大声提醒他：“球往你这边来了，你要多注意，我会配合你协防。”&lt;/p&gt;
&lt;p&gt;阿鲲听到提醒后，主动迎上去，他跳跃起来打算用头击球，没想到这个球直接打到他的上手臂，站在球场的裁判像一只饥饿的狼突然看见了兔子，他冲上来，吹起口哨的同时，举起一张红牌！&lt;/p&gt;
&lt;p&gt;阿鲲一脸发懵，他两手举起来向裁判抗议，阿瑾赶紧跑过来，他让我稳住阿鲲的情绪，自己上去和裁判理论。&lt;/p&gt;
&lt;p&gt;“刚才并不是故意手球，这个位置是禁区外，最多也就是一张黄牌。”&lt;/p&gt;
&lt;p&gt;这时候对方也想过来给裁判压力，裁判有些犹豫，他问一下边裁，最终改判成黄牌，阿鲲逃过一劫，我心里松一口气。我记得阿鲲说过，如果是红牌，他不仅要马上被罚下场，甚至会错过下一场比赛。&lt;/p&gt;
&lt;p&gt;这次的波折打乱了我们的节奏，对方连续发起两次猛烈的进攻后连进两个球，我们非常沮丧，阿瑾鼓励我们：“大家别着急，还有很多时间。”&lt;/p&gt;
&lt;p&gt;上半场结束之前，我们又丢了一个球，中场休息期间阿航给我们加油鼓劲，现场助威的同学也让我们不要放弃，我观察拉拉队，没看见田茉的身影，这时候多么希望她在旁边给我们加油助威。&lt;/p&gt;
&lt;p&gt;下半场双方交换场地，不到十分钟时间，我们又丢了一个球，大家似乎都已经很累，对方也觉得自己胜券在握，他们的后卫也开始加入进攻队伍，不断往前压上，没过多久，对方后卫也进了一个球。&lt;/p&gt;
&lt;p&gt;对方的队员一边踢球一边笑，这笑声虽然没有恶意，但是激起了我的斗志，我并不想就此放弃，从后场接过阿军的传球后，我快速往前带球，正要给阿瑾传球，他示意我继续往前带，于是我带球穿过中场，前面有一名队员防守，他看起来非常紧张。&lt;/p&gt;
&lt;p&gt;我听到后场的其他防守队员说：“我靠！十号上来了，注意防守。”&lt;/p&gt;
&lt;p&gt;紧接着，我听到球场旁边的啦啦队也大声地呼喊：“十号，加油！十号，加油！”&lt;/p&gt;
&lt;p&gt;我受到很大鼓舞，加速向前，继续靠近那名防守队员，这时对方其他两名防守队员跑回来防守，与此同时，阿瑾也从边路跟了上来。对方高估我的实力，刚才一名队员我都犹豫要不要过，何况是三个人，我已经打算传给阿瑾，我在奔跑的过程中把球踢到阿瑾的前面，可是力气太大，球踢出界外。&lt;/p&gt;
&lt;p&gt;我的奔跑似乎给队伍带来一些勇气，大家重新燃起斗志，趁着对方后卫还落在中场的时候，我们发起一次进攻，这次是阿融从中场带球，他正在稳定地带球向前。阿融从初中就一直踢球，控球和射门都非常好，我们在一起踢球的时候见识过他的球技，今天他没有发挥出水平，希望他能抓住这次机会。&lt;/p&gt;
&lt;p&gt;阿融带球来到靠近禁区附近，他把球传给阿瑾后快速往左边路奔跑，他们用一次看起来没那么漂亮的二过一配合晃过一名防守队员。对方似乎有些放松，我心想一定要拿下这个球，阿瑾继续带球向前突，对方回防的两名队员围堵他，他又把球传给边路的阿融，阿融这边只有最后一名防守队员，我们都以为他要带球过人后直接射门，没想到他把球传给刚刚跑入禁区的阿路，没人防守的阿路接过阿融的传球，左脚抽射，球进了！球场内外沸腾起来，我们大声欢呼，终于进了一个球，太兴奋了！我感动地泪水在眼珠里打转，这个球是我们努力争取来的结果。&lt;/p&gt;
&lt;p&gt;这时候我听到对方的大个头队长大声地喊话：“回防，回防，后卫要注意防守，别老想着进球就一个劲往前跑，居然让低年级的队伍进球，再丢一个球，今晚都不用吃饭了。” 阿瑾跟我们说：“还剩下不到十分钟，我们不能再让他们进球了，大家尽量拖时间。”&lt;/p&gt;
&lt;p&gt;对方被进一个球之后，不再敢太靠前，最终的比赛分数定格在五比一，我们第一场比赛以惨败告终，大家低着头回到宿舍。&lt;/p&gt;
&lt;p&gt;阿瑾鼓励我们：“大家别太在意，对方毕竟是高二的学生，他们的实力比我们强很多，前两天的比赛，高一班级都输了，我们是目前唯一进球的低年级队伍，我们要对自己有信心。”&lt;/p&gt;
&lt;p&gt;打进唯一进球的阿路回应他：“大家别放弃，下一个队伍也是高一班级，我们有希望拿下比赛。”&lt;/p&gt;
&lt;p&gt;阿鲲低着头默默地换鞋子，他今天差点收获一张红牌，我知道他一定非常沮丧和不甘心，吃了那张黄牌不久，他明显变得被动很多，下半场又被换下来。阿风坐在一边也不说话，这是他第一次当守门员，今天他把守的大门被踢进了六个球，自信心遭受巨大打击。&lt;/p&gt;
&lt;p&gt;阿航安慰阿风：“被踢进这么多球并不是你的过错，我们这种级别的比赛，不可能像职业球赛的守门员一样，能够做出飞身扑救。”&lt;/p&gt;
&lt;p&gt;我和其他人都能接受阿航的说法，我只是内心也极其不甘心，这是我的第一场正式足球比赛，只怪自己的球技太差。&lt;/p&gt;
&lt;p&gt;今天后卫线上阿哲的表现最好，他连续几次用大脚化解了对方的猛烈进攻，我看见他却坐在一边沉思，也许他正在思考下一场比赛的防守策略。&lt;/p&gt;
&lt;p&gt;阿航为我们总结失败的教训，他认为我们缺乏整体配合，需要更多的训练。距离下一场比赛还有一周多的时间，我们每天课外活动都到球场练球，阿军每天课外活动下课后，第一个冲出教室，奔向足球场为我们占场地。阿航每天利用午睡前的时间，带着阿风到灵水湖的草地练习扑球。&lt;/p&gt;
&lt;p&gt;几天之后，我们终于迎来第二场比赛，这场比赛非常重要，输球就会被淘汰。比赛当天，经过大家商量之后，我们打算比赛之前，提前到球场做热身运动。课外活动前一节课上课不久，已经换好球鞋和球衣的男生，开始陆续逃离教室，阿路和阿哲忘记带球衣，他们打算下课之后再过来。&lt;/p&gt;
&lt;p&gt;比赛开始，我们重新站在球场上，对手也是高一学生，这一次我们更有信心。比赛前阿航还专门研究对方的队员情况，他说对方的左右后卫都是临时凑人，以前很少踢球，这两个人是我们的突破口。这次阿瑾和阿路配合打双前锋，考虑到阿路是左脚射门，他们从左路进攻，阿路在禁区内获得多次射门机会，两次都差点得手，对方的右后卫水平果然和我们差不多。&lt;/p&gt;
&lt;p&gt;我和阿鲲负责中间后防，对方的前锋队长水平也很好，阿航说过他原来在实验学校就一直踢球，我们承受不小的压力，每次这位前峰带球接近大禁区的时候，我们只能采用大脚解围的方式来化解对方进攻。&lt;/p&gt;
&lt;p&gt;上半场已经进行到一半，比赛有些焦灼，双方都没有获得进球，我感觉状态良好，至少我们可以拿下一个平局。球又到我的脚下，阿鲲鼓励我带球向前，我似乎找到上一场比赛那次进攻的感觉，于是从中路带球开始奔跑，对方的防守队员开始向我这边涌来，我心想这次哪怕是四个后卫同时包夹，也要自己尝试突破一次，此时此刻，我脑子里浮现阿鲲的杂志上用分镜头讲解的马拉多纳过人的景象。&lt;/p&gt;
&lt;p&gt;我刚过中场，裁判连续吹响几次哨声，阿瑾示意我停下来，我回头看见队员们正在离开球场，裁判也往旁边走，球场旁边站着班主任！我们的班主任居然来到球场，听阿瑾的意思，老师要求我们队友全部下场，我离开的过程中，对方的队长说：“哎呀呀，你们老师怎么不懂规则啊，足球比赛不能暂停。”&lt;/p&gt;
&lt;p&gt;我想这位队长以为我们的班主任是来教我们排兵布阵，他完完全全错了！我来到球场外，看见班主任表情严厉，他正在训斥体育委员，语气带着愤怒，我们所有人低着头。原来我们逃离教室的时候被校长发现，他转告班主任。比赛直接终止，下周的最后一场比赛也被取消，所有人都要接受处罚。&lt;/p&gt;
&lt;p&gt;我们期待半年多的足球联赛就这样无疾而终，我们多么希望班主任等比赛结束之后再惩罚，更希望能保留下次比赛的资格，可是一切都已经无法挽回，班主任一个人完全决定整个球队的生杀大权。按照班主任的要求，每个人还要写近两千字的检讨书。&lt;/p&gt;
&lt;p&gt;阿风坐在一边有些郁闷：“从上初中之后，我就没写过检讨书，到时候别被记录到档案里。”&lt;/p&gt;
&lt;p&gt;阿军安慰他：“我认为没事，那么多人都写，我们只是逃了半节课，又没犯什么大错，班主任也就是要给我们一次教训。”&lt;/p&gt;
&lt;p&gt;阿风和阿航表示他们以后再也不会踏进足球场一步，这场风波之后，五零八班的足球活动暂时销声匿迹。&lt;/p&gt;
&lt;p&gt;课外活动时间，我和阿风、阿航开始一起去跑步，我们沿着小红桥跑，一直跑到学校对面的河岸，阿风说他们以前的初中学校离灵水也不远，他们经常来这里跑步。跑步的过程，好几次我们遇到萧影和田茉，她们也在跑步，田茉穿着之前打排球的运动服和鞋子跑步，女生运动完之后总是透着一股活力之美，我看着田茉用手擦拭额头的汗水，她的手抚过刘海的表情深深印入我的脑海。&lt;/p&gt;
&lt;p&gt;我们一起从小南门返回学校，萧影问我们：“听说你们男生前阵子逃课踢球被班主任抓住，还要求写检讨书，这个是真的吗？”&lt;/p&gt;
&lt;p&gt;我心想：这当然是真的事情，男生搞起这么大的一件事情，说不定已经弄得全校皆知。 阿航回答她：“是的，最要命的是被校长看见，班主任非常生气，大家受到比较大的打击，现在都不踢球了，所以我们才来跑步。”&lt;/p&gt;
&lt;p&gt;田茉转头看了一眼我们：“你们胆子也真够大，不过也比较倒霉，说不定如果不被校长撞见的话就没什么事。”&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《光明之路》四、管弦乐队</title>
      <link>https://dodoro.chouxiangpai.com/archives/1207/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1207/</guid>
      <description>&lt;p&gt;开学不久之后，学校各种社团开始招新，高一的同学对学校各种活动都充满好奇心，社团都希望能抓住这一时刻把积极的学生纳入门下。这是一所正在努力创建示范高中的学校，学校喊出的口号是大力培育人文见长的学生，重点培养学生的人文与科学精神，并关注促进学生素质的全面发展，学校社团建设就成了素质教育的一个大亮点。&lt;/p&gt;
&lt;p&gt;老师为新生提供各种社团活动。体育部提供摄影社团，他们有机会触摸到摄像机；新星文学社吸引热爱文学的同学，很多喜欢读书的同学都加入这个社团；灵水通讯社则吸引那些立志做记者的学生，班里也有女生加入通讯社。&lt;/p&gt;
&lt;p&gt;田茉普通话说得非常标准，我看见她参加学校广播社，广播室负责每天早上、午饭期间和课外活动为全校师生广播新闻、好文章，穿插播放歌曲。每逢周三和周五的课外活动，我最喜欢坐在宿舍前面的亭子里，聆听田茉的广播，我想如果自己普通话好点，也应该加入广播社，我和她就可以有共同的话题。&lt;/p&gt;
&lt;p&gt;阿航是副班长，他成功入选体育部后对我们说：“以后校园比赛，虽然我不会偏向我们班，但是绝对不会让我们被不公对待。”&lt;/p&gt;
&lt;p&gt;我对社团活动没有任何概念，也不知道要参加什么社团，我倒是希望参加类似布尔巴基学派那样专门探讨数学问题的社团，我问了一圈，没有任何关于数学的社团，我听初中时候的阿贝学长说社团活动多少会消耗一些学习时间，当然他也不反对我参加，只是需要做好时间规划。&lt;/p&gt;
&lt;p&gt;目前为止，三零六宿舍的同学都没有参加任何社团，课外活动课的时候我们都懒洋洋地在宿舍发呆，偶尔听阿宇讲历史故事打发时间，阿锐、阿鲲和阿瑾看体育杂志和报纸，阿益依然捧着古龙的小说，这已经是他开学以来看的第三本，班里的很多男生都是喜欢金庸的小说，阿益很认真地跟我说：“古龙虽然没有金庸出名，可是古龙的小说更有侠气。”&lt;/p&gt;
&lt;p&gt;我正打算先冲个澡，这样可以早点去图书馆阅览室看书，阿航领着一位微胖的学长来到三零六宿舍。&lt;/p&gt;
&lt;p&gt;“三零六宿舍的同学们，大家好，这位是比我们大一届的阿睿学长，他希望我们踊跃参加学校的管弦乐队社团。”&lt;/p&gt;
&lt;p&gt;阿航说完之后，这位阿睿学长继续怂恿我们：“参加管弦乐队是一件很棒的事情，乐队里面有小号、萨克斯、小鼓、长号、吉他等乐器，掌握一种乐器会给你们的魅力加不少分，你们甚至可以组建自己的乐队，希望大家前来报名，报名的地点就在食堂二楼。”&lt;/p&gt;
&lt;p&gt;学长的话并不能打动我，何况我一直觉得自己是个五音不全的人，阿军和阿宇倒是很有热情，宿舍里最坦然的是阿鹏、阿锐和阿益，他们三个一直盯着自己的书，对学长的话无动于衷，阿宇称他们为“桥镇三剑客”，他们吃饭、上课的路上总是形影不离、步调一致。&lt;/p&gt;
&lt;p&gt;阿航带着学长又到另外两个宿舍宣传乐队，就这样五零八班的十几个男生被拖到食堂二楼，在阿军的强烈要求之下，我陪着他来到管弦乐队招新的地方。&lt;/p&gt;
&lt;p&gt;我们走到二楼，已经聚集很多学生，偶尔听到乐器发出噼里啪啦的吵闹声，这些吵闹声毫无规则，听着这个声音我感到头胀，不过既然已经上来，就只好跟着过去瞧一瞧。&lt;/p&gt;
&lt;p&gt;阿睿学长大声地对我们说：“各位同学好，左边是笛子、吉他、小鼓和萨克斯，请大家排好队，每个人试一下，会有人观察大家的演奏。右边是小号、长号、次中音和圆号，也请每位同学都试一试，可以多试几种乐器，如果能够把乐器吹响，请联系乐队老师。”&lt;/p&gt;
&lt;p&gt;班里的几个女生也来了，萧影正在试萨克斯，我还看见阿定也在试长号，他吹得很不错。我就这么站在旁边观看，大家热情高涨地尝试各类乐器，左边的同学都能把乐器弄出声音，而且还能弄出曲子的调子，估计有些学生以前有演奏的基础；右边的同学则不同，大部分人都吹不出乐器的声音，宿舍里的阿宇和其他几个同学也都没有吹响乐器，他们叹了口气就放弃尝试，然后离开饭堂。&lt;/p&gt;
&lt;p&gt;轮到阿军和阿哲，没想到他们奇迹般地吹响了乐器，阿军吹响长号，阿哲吹响次中音，他们很高兴地去找旁边的老师。&lt;/p&gt;
&lt;p&gt;乐队老师把他们的信息登记下来，并对他们说：“你们留下来，等一下再吹给我看一下。”原来他们还不能直接被录用，这只是第一轮筛选。&lt;/p&gt;
&lt;p&gt;十几分钟已经过去，阿睿学长抱着大圆号向我们喊话：“请问一下，有没有人来试一下圆号？”&lt;/p&gt;
&lt;p&gt;我往他的声音方向看一眼，他那里门庭冷落，一个人抱着巨大的圆号孤零零地站在那里，似乎没有人愿意去吹那个大家伙。&lt;/p&gt;
&lt;p&gt;阿军对我说：“听说今天为止都没有人吹响那个圆号。”&lt;/p&gt;
&lt;p&gt;这时候阿航走过去，他接过圆号，猛吸一口气，然后努力地往乐器口里吹气，我看见他满脸涨红，可是他吹出的气像被圆号吸走一样，一点声音都没有。阿航不甘心地说：“难道这个圆号会吸星大法不成？”&lt;/p&gt;
&lt;p&gt;阿航看起来很不服气，阿睿学长让他再试一次，并且告诉他吹的时候不要一口气吹完。阿航又试一次，这次圆号终于发出今天的第一声。&lt;/p&gt;
&lt;p&gt;“好的，你已经被录取了！”阿睿学长高兴地拍了拍阿航的肩膀，阿航抱着圆号自豪地向我们炫耀，他是今天第一个被乐队录取的成员。&lt;/p&gt;
&lt;p&gt;我们都称赞阿航的能耐，这时候旁边一位学长说：“这里最大的乐器不是圆号，而是大号，那家伙已经躺在那里两年多，没有人愿意去吹它。”&lt;/p&gt;
&lt;p&gt;我往乐器室看一眼，果然有一个大家伙，它已经落满灰，乐队老师走过来说：“大号是因为太大，不方便携带，其实大号更容易吹。”&lt;/p&gt;
&lt;p&gt;我们都希望阿航试一试大号，阿航张开双臂，扛起这个大家伙开始猛吹，大号发出低沉的响声，这声音有一股穿透力，从乐器室传到食堂四周，一直回荡好几回。&lt;/p&gt;
&lt;p&gt;食堂二楼的人越来越少，超过三分之二的学生都已经被淘汰，马上要进入下一轮的选拔赛。阿军怂恿我：“阿靖，你也去试一下。”&lt;/p&gt;
&lt;p&gt;我原本不打算试，看到阿军和阿定都吹响乐器，于是打算试一试，我看了看各种乐器，感觉小号不错，于是走上去拿起小号，没想到我一下子就吹响小号，而且声音非常响亮。&lt;/p&gt;
&lt;p&gt;旁边负责小号的学长说：“你是今天所有学生里吹得最响亮的人，我邀请你加入我们管弦乐队。”就这样我加入学校管弦乐队，成为一名小号手。&lt;/p&gt;
&lt;p&gt;乐队一共招募十五位新成员，我和阿军、阿定都成功入选，我觉得我们三个是学校乐队里的“灵镇三剑客”。除了我和阿军，五零八班总共有七名成员都加入了乐队，分别演奏长号、圆号、次中音、萨克斯、笛子、小号，占据整个乐队将近一半成员。&lt;/p&gt;
&lt;p&gt;阿航开心地说：“我觉得我们班可以组建一个乐队，就叫五零八乐队。”&lt;/p&gt;
&lt;p&gt;从此以后，我、阿航、阿军和阿哲开始参加乐队的训练，虽然我和阿哲不在同一个宿舍，但是我们在乐队里迅速混熟，我喜欢和阿哲聊天，他对事物的看法总是独树一帜。乐队的学生有一个特权：我们每天早上不需要参加早操。从起床到早读之前的这段时间，我们练习乐器，刚开始的时候，大家都非常努力地参加训练，慢慢地，个别队员把这个当作睡懒觉的机会，一直到别人做早操的时候才慢悠悠晃上来。后来值周的同学和老师提意见，乐队老师要求所有的成员在早操时间之前必须到位。&lt;/p&gt;
&lt;p&gt;我们几个练习地非常刻苦，每天总是第一批到食堂二楼，阿军比我还早，他几乎都是第一个来。第一个月老师还要求我们每周抽出两天的课外活动练习乐器。我吹的是活塞上下运动的立键式小号，总共有三个活塞，每按下一个活塞，都会增加空气通过管道的总长，从而使小号发出的音调变低。老师教我们如何通过控制嘴唇间的空隙、呼气量及震动的力度来改变音调、音量及音饰。&lt;/p&gt;
&lt;p&gt;学长和乐队老师非常有耐心，乐队老师还专门教我们如何使用腹部吸气和吹气，我之前对乐器没有任何概念，在老师和学长的帮助下，我奇迹般地学会校歌、军歌和国歌。 阿哲总是指着我的小号说：“早知道我也学习小号，你吹出来的声音特别响亮，我的次中音声音偏低，某些音听起来像放屁的声音。”&lt;/p&gt;
&lt;p&gt;阿军对他说：“你应该学习长号，长号音色可以调节，强奏时洪亮辉煌，弱奏时圆润柔和。”&lt;/p&gt;
&lt;p&gt;我们几个都顺利掌握三首歌曲的吹法，一个月后，我们迎来第一次演出，为升旗仪式演奏国歌。乐队还有一名指挥，是大一级的学姐，听说她以后立志学习音乐。&lt;/p&gt;
&lt;p&gt;准备出发之前，乐队老师鼓励我们：“你们不用太担心，今天每种乐器都安排一位学长配合。如果实在太紧张，我允许个别同学偷懒，但是不能所有人都滥竽充数，否则可就要出现冷场。”&lt;/p&gt;
&lt;p&gt;我觉得我不会滥竽充数，国歌已经练习很久，如果这个都吹不好，那就可以直接退出乐队。&lt;/p&gt;
&lt;p&gt;老师看着阿鑫说：“今天由阿鑫同学来吹引曲，你也不用有太大的压力，就按平时的训练就没有问题。”&lt;/p&gt;
&lt;p&gt;阿鑫和阿定在一个班，我们都是同一届，他长得匀称、皮肤白皙，在乐队里深受大家欢迎，他也是小号手，音律感比较好，听阿定说他还会跳现代舞。阿军认为其实我吹得比他熟练，我确实吹的比阿鑫要熟练，毕竟我的练习量起码是他的两倍，乐队老师让我试过几次，我总是会按自己的节奏吹。&lt;/p&gt;
&lt;p&gt;乐队负责指挥的学姐也跟老师提出抗议：“阿靖吹引曲的时候根本不看我的指挥，整个乐队都被他带着走，后半程不是我在指挥乐队，而是我跟着乐队的节奏去画指挥线。”&lt;/p&gt;
&lt;p&gt;终于等到出演时刻，我们穿着乐队服装，扛着自己的乐器排队来到国旗下面，我还是有些紧张，下面是两千多名同学，还有很多老师，我看到五零八班的队伍，努力扫视好几轮，居然没有看到田茉的身影，我很想让她看到我的第一次演出。&lt;/p&gt;
&lt;p&gt;“立正，升国旗、奏国歌，请大家行注目礼。”&lt;/p&gt;
&lt;p&gt;随着值周老师声音落下，负责指挥的学姐站在乐队的前面开始领我们演奏歌曲，阿鑫用小号吹起国歌的引子，清脆响亮的小号声响起，他今天表现不错，我正想着这是一个非常好的兆头，他却吹破了最后一个音，幸亏紧接着是响亮的鼓声，还有各种乐器响起来的声音，我想大部分同学应该不会太在意刚刚失误的那个破音。&lt;/p&gt;
&lt;p&gt;我们跟着指挥的节奏演奏，非常努力地演奏自己手中的乐器，随着国旗升到顶部，我们完成第一次演出，我觉得我吹得不错。&lt;/p&gt;
&lt;p&gt;“今天大家的表现非常好！特别是第一次参加演出的同学，你们已经可以独当一面。”&lt;/p&gt;
&lt;p&gt;乐队老师给予我们很高的评价，老师还告诉我们，乐队每个学期都会下乡一到两次，主要是参加新农村建设示范村的文艺演出，这是学校和县里合作的项目，我们都期待可以和乐队一起外出演出。&lt;/p&gt;
&lt;p&gt;乐队的训练时间都在早操期间和课外活动时间，等到我们都学会基本曲目之后，课外活动时间就不用再去训练。我和阿军觉得很无聊，学习压力没有那么大，我们总是无所事事地在校园里游荡，偶尔会去图书馆或者阅览室看书。&lt;/p&gt;
&lt;p&gt;后来在阿瑾和阿鲲的鼓励下，我们周末开始跟着男生一起去踢足球，慢慢地发展到课外活动都去踢球。我和阿军上高中之前从来没有碰过足球，以前只是偶尔打打篮球，我对足球的规则、足球的影响一概不知，完全是一个门外汉。&lt;/p&gt;
&lt;p&gt;班里有组织打篮球的同学，篮板非常稀缺，大部分人也和我一样只是初中的时候摸过篮球，慢慢地越来越多的男生加入踢球队伍，最后除了原来打篮球比较好的几个人，其他大部分从乡镇来的男生都加入踢球队伍。&lt;/p&gt;
&lt;p&gt;阿瑾非常高兴：“大家对足球抱着那么大的热情，看来我们班明年的足球队有戏了。”&lt;/p&gt;
&lt;p&gt;阿鲲和阿锐也这么认为：“希望我们在校园联赛中至少能从小组出线。”&lt;/p&gt;
&lt;p&gt;阿鲲和阿瑾一样喜欢足球，他们专门订阅《足球周刊》杂志，每周还会买一份《体坛周报》，也就是从这两份报刊上，我第一次听说世界杯和欧洲杯，第一次听说贝克汉姆、马拉多纳、李铁、孙继海等球星，不过我对这些并不太在意，足球对我来说只是另外一个篮球。&lt;/p&gt;
&lt;p&gt;我们每天在学校的黄土高坡球场奔跑，一直踢到太阳落山。有时候踢球踢得太晚，甚至连吃饭的时间都没有，回到宿舍冲完澡就飞奔到教室，总有个别同学没有赶在晚读上课之前来到教室，这时候就会被门口守着的班主任抓住。&lt;/p&gt;
&lt;p&gt;没有吃饭的学生晚自习下课之后只能吃泡面，吃完面还得洗衣服，偶尔的时候洗衣服的人积压太多，一直到晚睡铃声响起都没有轮完，为此班主任经常在宿舍窗口训话：“我就没有见过哪一届的男生像你们这样，天天打球、天天洗衣服、天天吃泡面。”&lt;/p&gt;
&lt;p&gt;《光明之路》 &lt;a href=&#34;http://dodoro.chouxiangpai.com/guangming&#34;&gt;http://dodoro.chouxiangpai.com/guangming&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>十三、终极理论之梦</title>
      <link>https://dodoro.chouxiangpai.com/archives/1341/</link>
      <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1341/</guid>
      <description>&lt;p&gt;“宇宙一直都处于和谐状态，它遵循着一种优美、奇妙的数学法则。”&lt;/p&gt;
&lt;p&gt;我坐在超级量子计算机前，重温少年时代在笔记本上写下的这句话，这也是我这么多年以来孜孜不倦进行理论物理研究的原动力，我一直坚信可以依赖数学去追寻和破解宇宙的奥秘。我轻轻地合上笔记本，继续完成宇宙模型模拟运算的收尾工作，这个数学模型基于无穷维微积分基本定理，接近傍晚时分，我怀着无比激动的心情完成了这项工作。&lt;/p&gt;
&lt;p&gt;十年前我正在攻读数学博士，数学家将分析、几何和代数结合起来之后，意外证明黎曼猜想，并发现广义无穷维微积分基本定理，我第一直觉是这个定理将会是破解宇宙之谜的金钥匙。通过多年的努力，我终于将这个定理运用于超弦理论，彻底调和超弦理论的内在矛盾，并建立超弦量子引力学。&lt;/p&gt;
&lt;p&gt;明天凌晨，这个实验室的粒子加速器将达到宇宙大爆炸的奇点温度，到时候就可以验证我们的宇宙模型，不出意外的话，完整的超弦量子引力学将会得到证明，最终将引力、电磁作用力、强力和引力四种最基本的自然力统一起来，整个物理学、乃至整个宇宙将建立统一的理论，一百五十年来，为了这个梦想，人类已经耗尽几代最优秀天才的生命。&lt;/p&gt;
&lt;p&gt;自从我踏入理论物理学着一个领域，唯一的梦想就是建立完整的大统一理论，实现爱因斯坦、霍金等物理学家的心愿，现在梦想就要变成现实，我们这个设立在地球上最大沙漠的核子研究中心将成为全球瞩目的焦点。&lt;/p&gt;
&lt;p&gt;我转头望着窗外的夕阳，美丽的余辉一泄千里，铺满整个沙漠，也许理论物理学也会像这轮落日达到它的终极状态，所有的物理学分支都会被统一起来，虽然物理学的发展永无止尽，但是都不可能再超越这个范畴。&lt;/p&gt;
&lt;p&gt;人类在这个星球上繁衍生息几万年，近两千年来创造无数文明，特别是近两百多年，人类的文明达到全所未有的规模，明天之后物理学将达到登峰造极的顶点，从牛顿到爱因斯坦，从相对论到量子物理学，直至大统一理论，都是一个个光辉的成就。&lt;/p&gt;
&lt;p&gt;正当我沉浸在对明天梦想实现的想象中的时候，实验室的大门突然被打开，一群人闯了进来，其中几个人的肩章贴着联合国维和部队字样，另外的人员衣着和我一样，走在最前面的人像下命令一样大喊：“请你们立即中止粒子加速器！”&lt;/p&gt;
&lt;p&gt;我先被吓了一跳，接着很快就镇定下来：“你们是谁？这里是星际探索公司的私人实验室，我们有合法经营资格，保安为什么允许你们进来？”&lt;/p&gt;
&lt;p&gt;这时候站在最后面的一位男子走到前面，他举起胸前的牌子：“我们是联合国宇宙监督委员会的科学家，我们已经获得联合国的特许，要求你们必须马上停止目前的实验。旁边这位是NASA的宇宙空间研究员，你有什么问题可以问她，但是今天必须停止粒子加速器。”&lt;/p&gt;
&lt;p&gt;我顺着他手指的方向，看见一位年纪和我相仿的女子背对着我，两条辫子搭在米白色的格子裙上，她正在观察大屏幕上的运算数据，等到她转身过来的时候，我愣住了，她长得和田茉一模一样，她对我微笑：“老同学你好，还认识我吗？我是田茉。”&lt;/p&gt;
&lt;p&gt;她果然是田茉，已经很多年不见她，我内心激动和震撼，可是现在不是叙旧的时刻，我赶紧问她：“中止实验的理由是什么？”&lt;/p&gt;
&lt;p&gt;“你们的加速器为了获得宇宙奇点温度，需要大量的能量，产生这种能量的过程会形成一个小黑洞，这个黑洞…”&lt;/p&gt;
&lt;p&gt;没等她说完，我就抢过她的话：“这个黑洞不会对地球造成任何伤害，我们已经论证过，这么小的黑洞并不会引发大面积时间坍塌，更不会吞噬地球。”&lt;/p&gt;
&lt;p&gt;“问题不在这里。这个黑洞会破坏宇宙的平衡与和谐，最终酿成大祸。”&lt;/p&gt;
&lt;p&gt;这是我第一次听到这种说法：“我不理解你说的意思。”&lt;/p&gt;
&lt;p&gt;“相信你也知道，我们的这个宇宙诞生于大约一百三十八亿年前的大爆炸，根据哈勃望远镜的观察结果，宇宙正在加速膨胀。”&lt;/p&gt;
&lt;p&gt;我又忍不住打断她：“我知道这个理论，这种膨胀最终会停止，宇宙要么永远停止、并处于一片死寂之中，要么收缩之后重新发生大爆炸，可是这个和我们的实验没有关系。”&lt;/p&gt;
&lt;p&gt;“很有关系。我们不久之前获知，宇宙中的黑洞是对应于宇宙膨胀的另外一种反力量，当这两种力量平衡的时候，宇宙才能在大爆炸之后处于平静状态，如果这种平衡状态被打破，那么宇宙的和谐将会被破坏。你们在原本不可能产生黑洞的空间里制造黑洞，就会破坏这种平衡状态。”&lt;/p&gt;
&lt;p&gt;我读过霍金先生的著作，了解他提出的宇宙循环理论，虽然目前没有被证实，但是宇宙确实可能存在所谓的平衡状态。看见我听进了这段话，她继续说：&lt;/p&gt;
&lt;p&gt;“宇宙中的每一个黑洞都是一个宇宙奇点，它们最终会被连接起来，形成超级奇点网络，并酝酿下一次宇宙大爆炸。如果人为制造黑洞破坏平衡，那么超级奇点就不完整，我们的宇宙最终会被其他宇宙吞没，不仅仅是我们现在这个宇宙，所有存在于我们这个宇宙空间的其他时间轴的平行宇宙都将彻底消失。这就意味着，我们人类及宇宙的过去、现在和未来将彻底消失。”&lt;/p&gt;
&lt;p&gt;以前我们进行论证的时候没有考虑过这个问题，田茉的这番话让我感到震惊，我走到量子计算机前校验眼膜，打算下达中止命令，可是我还有一丝不甘心：“你刚才说的这些或许只是一种假说。”&lt;/p&gt;
&lt;p&gt;“你说的很对，我们一开始也不相信超级奇点网络理论，但是我们最近从太外空中获知一些关键信息，又分析了近几年观测到的数据，我们有很大的把握认为这个假说完全正确。”&lt;/p&gt;
&lt;p&gt;基于对田茉的信任，我中止了粒子加速器，按下按钮的那一刻，宿命论的悲观涌上心头，我问她：“那是不是我们什么都不用做，也不需要进行任何探索，任由宇宙这么发展就可以了？”&lt;/p&gt;
&lt;p&gt;田茉叹了口气：“很长一段时间内原本可以暂时这样，可是我们人类的求知和求生的欲望改变了这一切。人类这几十年来为了探索外太空，发出太多的信号，去年旅行者号已经发回收到的外星生命回应信息。”&lt;/p&gt;
&lt;p&gt;我感到万分震惊：“难道NASA已经确认存在外星生命？”&lt;/p&gt;
&lt;p&gt;“从目前收到的信号来看，宇宙中确实存在和我们一样的外星文明，我们甚至推测它们极有可能会来征服人类。这个外星文明原本不知道我们的存在，或者至少要很久才会知道我们的存在，然而人类发出的信号暴露了我们，我们必须在不破坏宇宙平衡的前提下，尽快找到宇宙之谜。”&lt;/p&gt;
&lt;p&gt;我想到另外一种可能性：“外星文明极可能不只一个，即使我们不破坏宇宙平衡，万一其他外星生物破坏这种平衡了怎么办？”&lt;/p&gt;
&lt;p&gt;“我们就是收到外星生物的警告信息，才发现宇宙超级奇点网络，它们比我们更珍惜现在的这个宇宙。这些外星生命拥有更高的智慧和科技，它们现在离我们还非常遥远，暂时还不可能来到地球，可是正如霍金先生的预言，为了防止更低等的生物破坏宇宙平衡，它们很可能会来消灭我们。”&lt;/p&gt;
&lt;p&gt;我感到更悲观：“听起来很不可思议，我们无法进行粒子加速实验，就不能验证宇宙模型，那么我们将永远无法解开宇宙的奥秘。”&lt;/p&gt;
&lt;p&gt;“我们已经找到一个办法，这或许是目前唯一的办法。”&lt;/p&gt;
&lt;p&gt;我很激动：“请告诉我，是什么样的办法？”&lt;/p&gt;
&lt;p&gt;“从宇宙现有的黑洞中获取数据，以此验证时间、空间和引力的模型，最终解开宇宙的奥秘。”&lt;/p&gt;
&lt;p&gt;我陷入绝望：“这个几乎不可能，距离人类最近的黑洞有将近一千光年的距离，按照相对论，我们的宇宙飞船无法达到光速，达到那里将耗尽几代人的生命，何况目前的星际旅行并不完全成熟。”&lt;/p&gt;
&lt;p&gt;“我们可以通过虫洞快速达到那里。”&lt;/p&gt;
&lt;p&gt;“这种想法更加不可能，虫洞只有在黑洞附近才会产生。”&lt;/p&gt;
&lt;p&gt;“现实并不完全是这样，我们已经在太阳系发现一个虫洞，这个虫洞连接着遥远的黑洞，NASA已经做好宇宙飞船，我们将通过这个虫洞去寻找黑洞，并进入黑洞获得相关数据。”&lt;/p&gt;
&lt;p&gt;我心中燃起希望，同时又有些担忧：“你刚才说‘我们’，难道你也要跟着去吗？”&lt;/p&gt;
&lt;p&gt;“是的，不久之后我将跟随宇宙飞船一起出发。”&lt;/p&gt;
&lt;p&gt;我怀着私心问她：“我是否可以和你们一起去？”&lt;/p&gt;
&lt;p&gt;“你必须跟我们一起去，这也是我们今天来到这里的目的之一，你和我将成为一对搭档，返回之前还需要在外太空验证宇宙模型。不过你需要做好永远回不来的准备，这极有可能是一条不归路。”&lt;/p&gt;
&lt;p&gt;我心想只要和田茉在一起去哪里都无所谓：“我愿意为人类冒这个险，更愿意为你冒这个险，我一直都很喜欢你，这句话我很久以前就想对你说出来。”&lt;/p&gt;
&lt;p&gt;田茉刚刚还很严肃的脸上泛起一圈红晕，她微笑地伸出双臂，我知道她在等待我的拥抱，我终于没有任何的顾忌，冲上去紧紧抱住了她……&lt;/p&gt;
&lt;p&gt;睡梦中我感到有些透不过气，猛地从梦中醒来，原来只是一场梦，我坐在床上，深呼几口气，冷静下来，脸庞随即露出甜甜的微笑，这是一个美美的、长长的少年之梦。&lt;/p&gt;
&lt;p&gt;人类必须解开宇宙之谜，这样才可能超越宇宙的往复循环，只有找到宇宙的奥秘，才能在这个宇宙空间的各种时间轴的平行宇宙中来回穿梭，最终实现人类文明永续。探索终极理论之路很遥远、也不确定，可是人类必须走下去，这或许是人类未来的一条光明之路。&lt;/p&gt;
&lt;p&gt;选自《光明之路》&lt;/p&gt;</description>
    </item>
    <item>
      <title>终于把北京市工作居住证办理下来了</title>
      <link>https://dodoro.chouxiangpai.com/archives/1180/</link>
      <pubDate>Fri, 30 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1180/</guid>
      <description>&lt;p&gt;北漂了十三年，刚来的时候就听说北京市工作居住证，当时的上司也办理了这个证件，我因为收入不符合没有办理下来，后来换了两三家单位，待的很久的单位没有资格办理，有资格办理的单位待的时间又不够。&lt;/p&gt;
&lt;p&gt;最近这家公司一开始说给落户，可是一拖再拖，后来退而求其次要求办理工作居住证，可是发现公司虽然是高新企业，并且收入纳税都满足，但是却没有资格办理，原因是之前的老板为了省钱社保都只按最低工作缴纳，而这样子的后果是：北京社保局根本就不给办理工作居住证。&lt;/p&gt;
&lt;p&gt;后来新换了boss，全公司都按照工资基数缴纳社保，三年过去之后，终于可以办理了。注：社保局目前只追溯前三年的社保和纳税记录。具体办理的要求是：必须是全日制的学学士学位，或者拥有高级职称、或者纳税额度很高，前两者还要满足一定的工资和纳税要求。具体实际就不知道如何操作，从2018年之后就没有纸本了，都是电子确认单。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1180/images/image-1619749519219.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;现在办理速度非常快，基本上10个工作日就可以完成，这个工作居住证号称北京绿卡，基本上权利和户籍差不多，对于刚参加工作的人，可以获得购房、摇号买车等权利，有小孩的人则可以办理一大一小北京医保，义务教育阶段也勉强等同于户籍人口(虽然排在这些人之后)。&lt;/p&gt;
&lt;p&gt;我倒是觉得这是“伪绿卡”，因为它无法解决最重要的高考问题，这才是最大的利益所在。虽然如此，还是挺高兴，可以省去幼生小问题，明年也可以把小孩的社保迁到北京了。明天假期，正好带着这点高兴投入假期。我们其实期待另外一张真正的绿卡，那才是大大大头。God bless us！&lt;/p&gt;
&lt;p&gt;除了户籍问题之外，北京已经算是一座非常开放的城市了，雾霾问题真不是北京独有，而且我一直都说，最终北京肯定是第一个解决雾霾问题的城市，除非有大的制度变化。毕业后一直在这里工作、生活，我对北京没有太大的抱怨，我在这里挥洒青春，也收获幸福(婚姻、房产、收入)。&lt;/p&gt;</description>
    </item>
    <item>
      <title>重新研究网站内容管理系统（CMS）</title>
      <link>https://dodoro.chouxiangpai.com/archives/1177/</link>
      <pubDate>Thu, 15 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1177/</guid>
      <description>&lt;p&gt;公司是校企，今年打算跟学校合作，承接学校很多信息化建设的网站，功能基本都是信息展示和会员，如果完全重新开发，非常浪费人力资源，所以我想起了CMS系统，这是十几年前非常流行的建站系统。我毕业做的第一个产品就是CMS,当时用ASP.NET技术来开发，参考了非常流行的dedecms、phpcms等同用建站系统，所以我对内容管理系统了解非常深刻。&lt;/p&gt;
&lt;p&gt;这次我们用到的是一个迅睿CMS，也是php语言开发的内容管理系统，我曾经写过一年多的php，对这门语言也比较熟悉。原来本来打算使用微软的开源系统OrchardCMS，这款内容管理系统也非常优秀，代码经典、封装很好，我也研究过他的程序代码，加上部门的同事都是使用.NET语言，但是发现使用OrchardCMS的人不多，插件也少，站长使用不活跃，最终放弃了。&lt;/p&gt;
&lt;p&gt;迅睿CMS免费开源系统是基于PHP7语言采用最新CodeIgniter4作为开发框架生产的网站内容管理框架，提供“电脑网站+手机网站+APP接口”一体化网站技术解决方案。它拥有强大稳定底层框架，以灵活扩展为主的开发理念，二次开发方便且不破坏程序内核，为WEB 艺术家创造的PHP建站程序，堪称PHP万能建站框架。&lt;/p&gt;
&lt;p&gt;上面这段话是官方的介绍，其实我喜欢这个CMS的原因是它的开源协议很好：可以免费使用在任何地方，可以自主进行二次开发；购买授权可以免费使用插件，并且获得升级支持服务，一次授权可以无限次使用。这个就比其他内容管理系统要好，其他都不允许用于商业用途，只给小站长免费开放，购买一次只能用一个站点。&lt;/p&gt;
&lt;p&gt;说到网站内容管理系统，最核心的就是模板语言和标签系统，当然还有内容模块里的模型：通过模型可以自定义任何功能模块的数据模型，然后通过标签语言嵌套HTML页面形成模板，最后发表出来。&lt;/p&gt;
&lt;p&gt;C#和php都是我可以接受的开发语言，我对语言其实没有太大排斥。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用Github Action将.NET Core发布到docker Hub</title>
      <link>https://dodoro.chouxiangpai.com/archives/1137/</link>
      <pubDate>Mon, 15 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1137/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;去年公司已经完成所有产品的.NET Core改造工作，团队成员也逐步积累了docker和devops的知识，今年的主要任务之一就是把核心的产品迁移到devops生产线上。本来是打算用微软的Azure平台，因为真的太好用了，我自己的测试站点就一直用Azure来做持续交付工作。但是公司原来的产品、数据、备案都在阿里云上，迁移的话会有大量的工作，包括数据迁移、备案迁移都很麻烦。加上目前国内这种政治绝对正确的要求，搞不准哪天就因为用Azure就撞雷了，虽然很无语，但是也没有办法。&lt;/p&gt;
&lt;p&gt;这几天一直在想方案，前年是打算用开源的持续集成(CI)工具Jenkins来配合阿里云，不过去年发现GitHub Action用起来更加顺畅，而我们的代码基本都是托管在GitHub上面，阿里云去年也发布了自己的K8S平台ACK，我们打算当小白鼠，正式使用看看效果如何。&lt;/p&gt;
&lt;p&gt;不过在使用ACK之前，我们希望能够把Github上面的代码持续发布到docker Hub上面，去年已经完成了这部分工作，今天整理一下步骤和流程。&lt;/p&gt;
&lt;h2 id=&#34;一创建docker-hub账号&#34;&gt;一、创建docker Hub账号&lt;/h2&gt;
&lt;p&gt;首先是到 &lt;a href=&#34;https://hub.docker.com/&#34;&gt;https://hub.docker.com/&lt;/a&gt; 创建一个账号，并且创建一个自己的repository，可以是公开的，也可以是私有的。另外，设置和GitHub的连接： &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1137/images/image-1617352132067.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;二创建dockerfile&#34;&gt;二、创建Dockerfile&lt;/h2&gt;
&lt;p&gt;通过VSCode或者VS创建自动Dockerfile，如果是VS，就右键项目(不是解决方案)，添加Docker支持，VS会自动生成这个项目的Dockerfile文件，不用做任何修改。 &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1137/images/image-1617352255123.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;三提交整个解决方案&#34;&gt;三、提交整个解决方案&lt;/h2&gt;
&lt;p&gt;我们的项目一般都是位于一个解决方案里面，所以一个解决方案可能保护多个项目，这个没有问题，把整个解决方案都提交到GitHub上面，当然必须是本地可以编译通过并且可以运行的代码。网上很多教程都没有说清楚这种项目的打包细节，我后面会重点说一下，因为对于一个初学者，很容易在这里迷茫。&lt;/p&gt;
&lt;h2 id=&#34;四设置github的密钥&#34;&gt;四、设置GitHub的密钥&lt;/h2&gt;
&lt;p&gt;需要把第一步创建的Hub账号填写到GitHub的settings里面： &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1137/images/image-1617353001890.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;五编写action的workflow&#34;&gt;五、编写Action的WorkFlow&lt;/h2&gt;
&lt;p&gt;通过Github的Action，可以创建很多类型的工作流WorkFlow，非常方便。 &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1137/images/image-1617352492125.png&#34;&gt; 可以看到，几乎涵盖了所有国内外常用云平台的模板。 &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1137/images/image-1617352575322.png&#34;&gt; 当然了，也包含了几乎所有常用开发语言的模板，太牛了。&lt;/p&gt;
&lt;p&gt;Github上还有非常多通用的Action，你可以直接引用来使用，这里我不多说，贴一个我们可以运行的WorkFlow：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;.NET&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;on&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;push&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;branches&lt;/span&gt;: [ &lt;span style=&#34;color:#ae81ff&#34;&gt;master ]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;pull_request&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;branches&lt;/span&gt;: [ &lt;span style=&#34;color:#ae81ff&#34;&gt;master ]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;jobs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;docker&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;runs-on&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;ubuntu-latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;steps&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;uses&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;actions/checkout@v2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Setup .NET Core&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;uses&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;actions/setup-dotnet@v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;with&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;dotnet-version&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;3.1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Push to Docker Hub&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;uses&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;docker/build-push-action@v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;with&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;username&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;${{ secrets.DOCKER_USERNAME }}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;password&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;${{ secrets.DOCKER_PASSWORD }}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;dockerfile&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;./Academy.PCCore/Dockerfile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;repository&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;academy/academypc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;tags&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;v0.0.1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;tag_with_ref&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里重点说一下后面的这几个变量： 1、username和password就是第四步里面设置的变量。 2、dockerfile的路径问题，路径“./”就是指当前在Github的这个respository的根目录，比如： &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1137/images/image-1617353172668.png&#34;&gt; 这里我只需要将Academy.PCCore项目打成docker，Dockerfile也在这个文件夹的根目录。 3、repository，这个就是在Docker Hub里面创建的仓储Respository的路径，两边一定要一直，否则无法提交。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们相识第二十年</title>
      <link>https://dodoro.chouxiangpai.com/archives/1121/</link>
      <pubDate>Thu, 25 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1121/</guid>
      <description>&lt;p&gt;前言：一篇笨拙的文字，几张随拍的照片，献给二十年前相遇于此、命中注定的我们。这也是一次为了忘却的纪念。&lt;/p&gt;
&lt;h2 id=&#34;一梦想初会&#34;&gt;一、梦想初会&lt;/h2&gt;
&lt;p&gt;二十年前的九月，我从三轮摩的跳下来，抬头就看见武鸣高中的校门，深红色的瓷砖镶嵌着门柱，闪闪发光的金字大招牌，这个景象和我预想中的差不多。这里就是我一直梦回牵绕的理想之地，这一个多月来我曾经无数次想象第一次看见它时的激动心情，然而此时此刻，我却似乎变得镇定和平静，我知道我还有更远的目标要去实现。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210225155252.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1121/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210225155252-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;走进校门，我看见这条路直接通到一个由钢笔、毛笔和铅笔组成的雕像，雕像的下面有四个字：光明之路。我看着远处的校训，这四个字正对大门，大概是想告诉学生：进入武鸣高中之后，一直往前走就可以通向光明之路。可是什么是真正的光明之路呢？又由谁来定义光明和黑暗呢？&lt;/p&gt;
&lt;h2 id=&#34;二三零六宿舍&#34;&gt;二、三零六宿舍&lt;/h2&gt;
&lt;p&gt;我们的宿舍楼在校门右边教学楼旁边，那时候这栋楼只有三层，左右两边各有一个楼梯，楼的外立面贴着和我家楼房一样的竖长条白色瓷砖，楼顶则镶嵌一排泥黄瓷砖，刚才听学长说我们这一届的男生都住在这里，一楼已经有很多人住进来。我和阿师的宿舍在三楼，我们费很大的力气把行李提到楼上，走出楼梯后向右走，经过几个宿舍后来到三零六宿舍，我想着未来三年我都将在这里生活。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210225155231.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1121/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210225155231-225x300.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;三县城见闻&#34;&gt;三、县城见闻&lt;/h2&gt;
&lt;p&gt;开学的第二周，我和阿俊、阿师去逛街，我们沿着灵水路步行十几分钟后来到旧五海桥，桥头有几个小商贩在路边售卖邮票、信封和各类文具。我们三个人在桥上，穿过武鸣河，继续往前走来到一条大马路，这是一条分岔路，直走会经过派出所，走在街道上能闻到浓浓的煮粉味道。街道的尽头是一个巨大的市场，我站在十字路口，西边是一个大型市场，柱子上写着南门菜市。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210225155241.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1121/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210225155241-225x300.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我们来到文化广场，西边是县图书馆，看起来已经很有年代，图书馆的门前有一棵开着花的大树，一直高到五层楼顶，我闻到了浓郁的清香。我从来没有见过这样的大树，长椭圆形的绿叶上开满了花，花瓣洁白清香，看起来像是在微笑。坐在大榕树下的一位阿婆告诉我们这是一棵白兰花树。我喜欢这棵大树，更喜欢它的花香，香气扑面而来，甜润浓烈。&lt;/p&gt;
&lt;h2 id=&#34;四大礼堂&#34;&gt;四、大礼堂&lt;/h2&gt;
&lt;p&gt;学校中间有一个大礼堂，位置靠近光明之路雕塑，周边是篮球场、排球场和足球场，大礼堂的外观与众不同，高高的屋顶镶嵌着一排排整齐的深红色瓦片，淡黄的墙面搭配红色的窗户格栅，这是校园内唯一的一座苏式建筑。礼堂横跨东西，两头各有一个小小的阁楼，它的内部被分成两个部分，靠近饭堂方向是全校最大的报刊阅览室，另外一边是学校音乐室，校园合唱班就是在这里练习合唱。这段时间我经常在晚读之前来这里阅读杂志，总能听到隔壁在练习《半个月亮爬上来》男女声二重唱，歌词透露着委婉的抒情，旋律充满着浪漫的风情。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/a74b81cb39dbb6fddb5f8d890924ab18962b37ae.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1121/images/a74b81cb39dbb6fddb5f8d890924ab18962b37ae-300x168.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;五文江塔&#34;&gt;五、文江塔&lt;/h2&gt;
&lt;p&gt;文江塔高四十米，是一座七层八角塔，每层有拱门圆窗和其他形状的花格窗共八个。塔基用条石浆砌，楼板以杉木构建。塔身挑檐釉瓦，彩绘浮雕。塔壁夹墙有宽一米五的螺旋梯共一百八十七级，上至塔的顶层，顶层供奉文章之神魁星塑像。&lt;/p&gt;
&lt;p&gt;文江塔自建成以来，多次被损毁，八十年代才由县政府拨款建成。二十年代旧军阀互斗，粤军入侵县城讨伐陆荣廷，他们焚毁塔内部分设施及塔边凉亭庙宇。四十年代日军入侵邕城，从桥镇方向炮击文江塔，将顶层南面炸开一个大窟窿。大跃进期间，又有人把文江塔当作高炉来炼钢，将木柴、矿石堆放到塔内焚烧，结果钢铁没练成，塔却被损毁更严重，后来就没人再管这座破烂不堪的建筑，一直到改革开放后才重建。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210225155244.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1121/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210225155244-225x300.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;没想到这座塔历经了这么多风风雨雨，一座塔就是县城、甚至国家的近现代史，我们站在塔下抬头仰望，银灰色的塔身，黛绿色的翘檐，金色的琉璃瓦，已经退了色的天蓝色的“文江塔”三字印在塔上。&lt;/p&gt;
&lt;p&gt;我希望这座塔一直屹立于此，它一定会继续为后来者诉说它的过去，我想它更希望自己的过去能够为后人指出一条光明的路途，只有真实地面对过去，才可能有未来。&lt;/p&gt;
&lt;h2 id=&#34;六劳动委员&#34;&gt;六、劳动委员&lt;/h2&gt;
&lt;p&gt;高中最后两年，班主任不再重新选班干部，只是对个别岗位做了调整，我一直担任正劳动委员，她也一直是副劳动委员，我们在一起合作。我一直珍藏那份心意，我曾经小心翼翼地试探过她是否知道我就是那个来自火星的家伙，她似乎只是感受到我的友好，却没有猜出我的想法。我的理智也告诉我、并提醒我，这时候永远不要去捅破那层薄薄的纸片，更何况我不知道那层薄纸后面是满满的幸福还是失落的荒园，我需要这点暖暖的、稳稳的幸福，用来驱赶备考的孤独和压抑的酸楚。&lt;/p&gt;
&lt;h2 id=&#34;七各奔东西&#34;&gt;七、各奔东西&lt;/h2&gt;
&lt;p&gt;我和阿俊一起去学校领录取通知书，来到校门口，我再次注视校门口的金色大招牌，这里曾经是我们的神圣之所、向往之光和梦想之地，如今这里却只留下了让我们一生忘不掉、抹不去的无畏理想、少年泪水和残血青春。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%85%89%E6%98%8E%E4%B9%8B%E8%B7%AF.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1121/images/%E5%85%89%E6%98%8E%E4%B9%8B%E8%B7%AF-225x300.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我们在校园里正好遇到了阿岗和阿师，我们一起沿着光明之路走，这三年来所有的老师都说这条路可以通向远方、通向世界、通向未来。我们都相信，我们有一条光明之路。&lt;/p&gt;</description>
    </item>
    <item>
      <title>牛年第一天跑步</title>
      <link>https://dodoro.chouxiangpai.com/archives/1109/</link>
      <pubDate>Thu, 11 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1109/</guid>
      <description>&lt;p&gt;回家正好一周时间，今天是牛年大年初一，下午午睡起来之后，决定跑一次步，这也是我高中毕业十几年之后再次在武鸣跑步。&lt;/p&gt;
&lt;p&gt;下楼之后沿着兴武大道往东边跑，路上行人和车辆很少，这几年县城都是如此，现在每年回老家，在县城待的时间都比较长，对这里已经非常熟悉。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210223101246.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1109/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210223101246-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;原计划在中央大草坪跑圈，可是太阳赛得厉害，于是一直跑到了大绣球广场，这是一个巨大得绣球，壮族姑娘一般都会给自己心仪的小伙子送一个绣球，我想起了大学时候小熊给我送的那个小绣球。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210223101242.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1109/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210223101242-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;回来的路上，拍了几张照片，这个应该是洋紫荆花，这种话在岭南非常常见。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210223101250.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1109/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210223101250-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最后回到原点，跑了5.5公里。&lt;/p&gt;</description>
    </item>
    <item>
      <title>阔别二十年的灵马二中</title>
      <link>https://dodoro.chouxiangpai.com/archives/1102/</link>
      <pubDate>Mon, 08 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1102/</guid>
      <description>&lt;p&gt;二十年后，带着家人重返初中时候的母校，学校已经发生巨大的变化，唯一没有变化的是校门和那几棵陪伴我经历了三年刻苦时光的榕树，还有建校之初就有的主教学楼。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222134405.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1102/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222134405-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;初一那时候宿舍楼没建好，我们就住在这栋教学楼的二层，两个班的男生住一个教室，高年级学长住在校外的粮所。当年我住的宿舍楼已经不在，那时生活的记忆却非常清晰：每天早上六点半，宿舍的灯准时自动打开，紧接着广播自动播放音乐，广播里大都放八、九十年代的歌曲，偶尔会有五、六十年代的歌曲，这些歌曲很多都散发着浓浓的革命味道，当然也有很多歌颂美好新生活。喇叭挂在宿舍楼的顶层，异常响亮，成绩好或者上进的好学生一般都会马上起床，也有不少学生总希望能多睡几分钟懒觉。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222135326.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1102/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222135326-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这里是我梦想起飞的地方，通过二中我走出了大山，跨越大半个中国定居于北京，也许将来我会走得更远，二十年前拿到武高民族班录取通知书的场景一直深埋于我的脑海：好几日我都沉浸在欢乐之中，我感受到了和达也进入甲子园的喜悦，进入民族班就意味着只要努力，重点大学就触手可得，最终实现数学家的梦想。回到家里后，我再一次登上最高的山峰马鞍峰，七色云彩挂在天空，那天我似乎看见神马飞天，我感谢大山和山神，当时我知道自己已经插上了理想的翅膀，将展翅高飞，飞到遥远地方，实现心中的理想。&lt;/p&gt;
&lt;p&gt;校门口的大榕树也已经长大，往昔历历在目，我们永远是二中的老三届。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222134411.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1102/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222134411-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们种下的那些树</title>
      <link>https://dodoro.chouxiangpai.com/archives/1095/</link>
      <pubDate>Sat, 06 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1095/</guid>
      <description>&lt;p&gt;结婚那一年，我们在这里种下一棵龙眼树和一棵荔枝树，专门选了独生苗，虽然它们长得很慢，但是会长得很久很高很大。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222133328.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1095/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222133328-225x300.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;去年的时候，我们又陪女儿种下这棵桂花树，一年过后，树已比她高，今年满树结花。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222133337.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1095/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222133337-225x300.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;看到高中同学曾经写过这样一句话：故乡是我心中的耶路撒冷，十年前北上求学的时候，我就已经把心埋在了故乡。虽然故乡不是我的耶路撒冷，但是无论走得多远多久、无论故乡被改造得多么面目全非，我都会一直在心中给她留有一个位置，而我也希望和爱人、新的家人分享这份感觉，所以就有了这些树。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222133344.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1095/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222133344-225x300.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;此时我们坐在我儿时看星空的楼顶，晴朗的夜空依然异常美丽，开阔的天空可以清晰地看见银河和肉眼可见的星座。满天繁星，万籁俱寂，心如止水，这是故乡留给游子的最后一点奢华。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222133353.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1095/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210222133353-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]“开源、共享、创新” 2020 中国.NET开发者大会</title>
      <link>https://dodoro.chouxiangpai.com/archives/1272/</link>
      <pubDate>Tue, 05 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1272/</guid>
      <description>&lt;h2 id=&#34;2020年中国net开发&#34;&gt;2020年中国.NET开发&lt;/h2&gt;
&lt;p&gt;在2019年上海中国.NET开发者大会的基础上，2020年12月19日 继续以“开源、共享、创新” 为主题的第二届中国 .NET 开发者峰会（.NET Conf China 2020）在苏州人工智能智能产业创新中心拉开帷幕。微软云（Microsoft Azure）和葡萄城作为本次峰会白金赞助，明源云作为银牌赞助，朝夕教育作为铜牌赞助，泰链智能和递易智能作为星牌赞助，还有很多合作伙伴给予了峰会大力支持！本次大会以线下城市苏州为中心，覆盖北京、上海、深圳、广州、长沙、成都、徐州、山东、西安、武汉等地区，是中国 .NET 开发者的大聚会，今年由于疫情的特殊原因，组委会特意控制大会的参与人数为300人，加强线上直播方便全国的开发者参与，在CSDN和思否的战略媒体合作和线上大会直播支持下，线下参会人数突破了400人（含讲师，志愿者及合作伙伴），CSDN和思否线上直播累计触达突破40万人次。&lt;/p&gt;
&lt;p&gt;除了大会外，我们在会前（12月18日）安排了 .NET Conf Eve（带着大家提前了解大会细节），在大会当天（12月19日）安排了采访环节同步直播，通过采访大会讲师，合作伙伴，志愿者，观众等从不同维度报道大会盛况。第二天（12月20日）特别安排了 Blazor 及 NCF 工作坊。让对Coding感兴趣的伙伴们带上电脑，沉浸式现场开发。&lt;/p&gt;
&lt;p&gt;本次峰会完全由来自.NET技术圈开发者们的志愿者进行组织。从大家看到的精美海报，到活动现场的许多志愿者、主持人，这些都是来自对.NET 技术充满热情的优秀开发者们；尤其是那些为大家带来精彩内容的老师们，他们有时候为了PPT上的每一页内容，需要花费大量的业余时间；除了这些之外，我们还能看到许多细节，如那些设计精美的PPT、那些设计精良的文化衫、甚至还有那些小巧玲珑的贴纸图案、海报，无一不是来源于社区志愿者的精心奉献。&lt;/p&gt;
&lt;h2 id=&#34;群英集聚力求卓越&#34;&gt;群英集聚，力求卓越&lt;/h2&gt;
&lt;p&gt;来自全国各地的超过400名 .NET 开发者受邀参与这次大会，超过40万人次通过直播参与大会，来自各领域的40多位资深讲师就 .NET Core ，跨平台，微服务、K8S、机器学习、大数据、IoT、混沌工程、DevOps以及自主创新等当前最为热门的科技专题做了多场精彩绝伦的演讲，与全国的 .NET 开发者一起共享技术盛宴。如此规模的中国 .NET 开发者峰会能够成功举办离不开社区伙伴、企业伙伴和志愿者的多方努力，他们共同携手，打造了中国最具影响力的 .NET 开发者峰会。&lt;/p&gt;
&lt;h2 id=&#34;开源共享创新&#34;&gt;“开源、共享、创新”&lt;/h2&gt;
&lt;p&gt;这次大会的主题是“开源 共享 创新”， 这象征着中国 .NET 社区走向开放、走向世界、走向辉煌的未来趋势和历史使命。曾经， .NET 技术的发展只能依靠微软，而今，要依靠的不仅仅是微软，更是真正的社区力量。6年来，在微软 CEO 萨提亚·纳德拉的带领下，微软发生了巨大的变化，微软通过成立 .NET 基金会(dotnetfoundation.org)全面扶持开源项目。据 GitHub 最新发布的年度报告显示，按贡献者列出的增长最快的开源项目，用于跨语言和平台构建应用程序和网站的工具包和框架在今年有了显著的增长，全球.NET开发者500万，其中200万已经使用.NET Core, 在中国也有50万.NET开发者，.NET Core开发者也有20万。与此同时， .NET 社区在中国也发生了巨大变革，互联网大时代的一波波浪潮或许不会再滚滚而前，但产业互联网的大势已经拉开，而这意味着未来的时代将会成为 .NET 开发者们的主场，在 github/gitee 上活跃着很多中国的.NET 开源开发者组织，例如NCC、盛派开发者、Abp，龙芯.NET等。龙芯团队正式在大会上发布了龙芯.NET。&lt;/p&gt;
&lt;p&gt;本次峰会持续两天，议题涵盖：云原生应用开发、 .NET 在云服务、游戏开发、区块链、大数据、机器学习、物联网的应用等。图文直播曝光量22697人次，主题演讲视频直播高峰在线观看10万人次。&lt;/p&gt;
&lt;h2 id=&#34;大会亮点-大神云集&#34;&gt;大会亮点 大神云集&lt;/h2&gt;
&lt;p&gt;.NET 社区汇集全球富有实践经验的讲师、开源贡献者，来自微软、葡萄城、龙芯、明源云、蔚来汽车等超40位.NET领域权威技术专家齐聚苏州。大会开始前，来自苏州工业园区的领导** 进行了大会致辞，微软全渠道事业部CTO徐明强博士为我们带来《.NET,应您所想的应用开发平台》从.NET生态动力、.NET在全球影响力、中国.NET社区和.NET5的技术提升等多个方面微软近年来在.NET5和开源生态上做出的努力，微软大中华区Azure事业部总经理林家伟还带来了 远在美国的Julia Liuson 和 的大咖视频，龙芯.NET项目和JVM项目负责人敖琪在大会上正式发布了龙芯.NET, 来自日本东京的桂素伟线上直播分享了他基于K8S 复杂项目交付等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>国产化系统下的.NET Core实践(Topic：NET Core Practice for Localization  Systems)</title>
      <link>https://dodoro.chouxiangpai.com/archives/1254/</link>
      <pubDate>Sun, 20 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1254/</guid>
      <description>&lt;p&gt;这两三天一直在苏州，参加2020年中国.NET开发者大会，我第一次以讲师的身份参加技术大会，以前都是作为听众，这一次也是代表公司出去做技术交流，为此做了不少准备工作。&lt;/p&gt;
&lt;p&gt;我从大学就是用C#和.NET，一直默默关注C#开源社区，2010年玩过Mono，2013年采用Xamarin开发Android应用，从2019年起开始带来团队实践.NET Core项目，公司核心的产品已经迁移到.NET Core，今年以来带领团队完成国产化系统下的.NET Core项目改造。&lt;/p&gt;
&lt;p&gt;我的演讲主题是国产化系统下的.NET Core实践经验和心得，这是我们过去一年多以来的实践和心得，主要包括以下几个重点：&lt;/p&gt;
&lt;p&gt;1、国产系统现状和要求，包括CPU、操作系统和中间件的要求，如何突破目前中间件对Java的特殊保护，到底是用java重写还是迁移.NET  Core，给出实用的迁移建议；&lt;/p&gt;
&lt;p&gt;我的建议是“尽量不要重复造轮子，坚持使用DotNet”，而解决方案是如下：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1254/images/image-1621927132986.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;2、国产化各种准备工作，重点技术预研，特别是现有系统的各个类库对.NET  Core的支持情况，最终做出技术评估；&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1254/images/image-1621927265906.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;3、项目迁移工作，除了按照官方要求迁移之外，还需要考虑系统在各个平台的可移植情况，我们迁移过程中遇到的问题和解决办法；&lt;/p&gt;
&lt;p&gt;1）、现有系统的各个类库对.NET Core的支持情况：官方API和类库基本没有问题；重点注意第三方类库，比如Lucence.NET，Zip解析等 2）、客户迁移的要求情况：如果服务器CPU架构必须是申威，要重视；如果是龙芯可以拖一拖，但是其实可以和客户提系统支持的要求。&lt;/p&gt;
&lt;p&gt;4、项目测试，模拟各种国产CPU搭建测试环境，并对系统进行测试；&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1254/images/image-1621927402911.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;5、国产专用服务器上的系统部署实践，部署过程中的问题和解决方案。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1254/images/image-1621927432006.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;结语：开源，自由、开放的社区是创新的力量之源，这也是互联网诞生的初心。今天主持人说到会90后超过一半，还是很希望90后、00后和未来者们都知道什么是网站URL地址，都知道怎么使用搜索引擎，不要只是被困在算法和移动应用之中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>安可国产化系统下的DotNet Core实践</title>
      <link>https://dodoro.chouxiangpai.com/archives/1086/</link>
      <pubDate>Sun, 27 Sep 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1086/</guid>
      <description>&lt;p&gt;这两个月来带领团队实践安可国产化系统下的DotNet Core，我们积累了一些经验，这里做一下记录。&lt;/p&gt;
&lt;h2 id=&#34;1dotnet-core可以在安可下面运行吗&#34;&gt;1、DotNet Core可以在安可下面运行吗？&lt;/h2&gt;
&lt;p&gt;首先，答案是肯定的。目前除了龙芯架构的服务器不支持DotNet Core（龙芯团队已经在努力，他们预计会尽快支持DotNet Core的下一个版本），其他所有平台架构的都支持，目前我们实际客户的操作系统有：ARM64(包括其扩展Aarch64)、X64，这些服务器包括飞腾、华为鲲鹏等国产服务器。&lt;/p&gt;
&lt;h2 id=&#34;2迁移麻烦吗工作量有多大&#34;&gt;2、迁移麻烦吗？工作量有多大？&lt;/h2&gt;
&lt;p&gt;非常靠谱。DotNet兼容性做得非常好，只要是它支持的架构的服务器，都可以很好地运行。 &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1086/images/image-1606442212707.png&#34;&gt; 唯一需要考虑的是，如果项目用到的第三方库比较多，需要逐个验证迁移工作，大部分流行的第三方库都已经支持DotNet Core。&lt;/p&gt;
&lt;h2 id=&#34;3java重写还是迁移&#34;&gt;3、Java重写还是迁移？&lt;/h2&gt;
&lt;p&gt;除非你们团队已经没有DotNet开发人员了，否则千万不要用Java重写，一方面是工作量大，另一方面是java的项目换到安可环境也是需要做很多适配工作。 而且我可以很负责任地说：DotNet Core的运行效率超级棒！几乎可以用飞快来形容。&lt;/p&gt;
&lt;h2 id=&#34;4迁移过程中有哪些经验&#34;&gt;4、迁移过程中有哪些经验？&lt;/h2&gt;
&lt;h4 id=&#34;代码经验&#34;&gt;代码经验&lt;/h4&gt;
&lt;p&gt;我们的代码几乎无缝转移过去，唯一的地方就是全文检索lucene.net，现在这个项目已经有更新，发了十几个bata版本，我认为可以用，所以升级过来了。 另外，安可要求只能用国产达梦数据库，需要做适配，还好这些数据库基本都是开源改过来的，适配不是问题，就是一些日期等细节需要主义。&lt;/p&gt;
&lt;h4 id=&#34;服务器经验&#34;&gt;服务器经验&lt;/h4&gt;
&lt;p&gt;我们第一个项目是迁移到政务系统，要求非常严格，有专用的服务器。我们先是在通用测试服务器下（Aarch64架构CPU，中标麒麟操作系统和银河麒麟操作系统），运行起来没有任何问题。后来在专用服务器下，架构和CPU都不变，但是专用服务器涉密，所以不能随意使用命令安装库，也不能更新系统库，只需要找到合适的包用专用服务器工具安装就可以，如果是系统库文件，就让厂商安装。&lt;/p&gt;
&lt;h2 id=&#34;5最大的问题是什么&#34;&gt;5、最大的问题是什么？&lt;/h2&gt;
&lt;p&gt;最大的问题是，安可要求服务器必须通过中间件安装系统，这些中间件其实就是web服务器，比如金蝶之类的，这里很崩溃，因为这些国产中间件只支持java,其实就是另外一个tomcat，我也认为他们基于开源改造。 后来我们的解决办法是，前后端分离，通过金蝶发布前端web站点，后端启动5000端口提供DotNet Core服务，这个并不违法安可要求。DotNet Core基于最开放的MIT开源协议，比java开放多了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于IT国产化盛宴的几点感想</title>
      <link>https://dodoro.chouxiangpai.com/archives/1083/</link>
      <pubDate>Mon, 24 Aug 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1083/</guid>
      <description>&lt;p&gt;这三周来牺牲社交时间，我亲自出马、带着团队三名精干主力在“中标麒麟龙芯”下编译.Net Core 3.0、并调试程序，编译通过但Bug太多，以失败而告终，最后放弃这个平台，这不是我们的问题，这是龙芯团队的问题，他们的CPU对彻底开源的.NET支持台还很差(也许明年会好些)，不过目前我们支持“中标麒麟兆芯”，这个平台也完全符合安可要求。&lt;/p&gt;
&lt;p&gt;从我接触到的情况来看，目前最鸡血的是那些国字号相关的企业，不过如果不涉密，但大部分也只是买来应付检查，因为国产服务器真的是几乎不能用。还有一些比较聪明的单位，直接购买云国产操作系统，但是这些国产云操作系统就是一个幌子，因为它们也是跑在“洋芯片”、寄生在“洋软件”下面而已。&lt;/p&gt;
&lt;p&gt;Java的码农请别吐槽C#，两门语言都是“美帝”发明的开发语言哦，要说彻底支持符合国产要求，别忘了Java的SDK还有专利费，而且Java的拥有者Oracle告谷歌的侵权诉讼案还没结束呢，哈哈。&lt;/p&gt;
&lt;p&gt;另外，很想对那些摇着民族主义旗号大喊国产的人，有本事从应用软件到开发语言彻底国产，还有哦，wifi现在澳洲公司还在收专利费、互联网也是MIT的发明、Apache基金会的总部现在还设在美国的马里兰州……这只是一场分蛋糕大盛宴，曲终人必散，苦的是那些重复造轮子的码农，还好我们已经脱离苦海。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数学基础、集合论和选择公理</title>
      <link>https://dodoro.chouxiangpai.com/archives/1079/</link>
      <pubDate>Fri, 03 Jul 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1079/</guid>
      <description>&lt;p&gt;这几天又重新学习复习了一下数学基础：逻辑主义、形式主义和直觉主义。我自己当然更倾向于基于公理化集合论的逻辑主义，这也是目前大部分数学家的选择。&lt;/p&gt;
&lt;h2 id=&#34;一数学基础&#34;&gt;一、数学基础&lt;/h2&gt;
&lt;p&gt;数学上，数学基础一词有时候用于数学的特定领域，例如数理逻辑，公理化集合论，证明论，模型论，和递归论（可计算性理论）。但是寻求数学的基础也是数学哲学的中心问题：在什么终极基础上命题可以称为真? 目前占统治地位的数学范式是基于公理化集合论和形式逻辑的。实际上，几乎所有现在的数学定理都可以表述为集合论下的定理。在这个观点下，所谓数学命题的真实性，不过就是该命题可以从集合论公理使用形式逻辑推导出来。&lt;/p&gt;
&lt;h2 id=&#34;二公理化集合论&#34;&gt;二、公理化集合论&lt;/h2&gt;
&lt;p&gt;基础集合论可以用非正式的、直觉的方式学习，在小学中就可以用文氏图说明。基础集合论直观地假设集合就是一群符合任意特定条件的对象的组合，但此假设会造成悖论。最简单及著名的是罗素悖论及布拉利-福尔蒂悖论。公理集合论的形成就是为了避免这些集合论的悖论。 许多数学家研究的公理集合论系统假设所有的集合形成累计层次。这类的系统可分为二类： 1、只由集合构成：这类系统包括最常用的公理集合论：含选择公理的策梅洛-弗兰克尔集合论（ZFC），由亚伯拉罕·弗兰克尔和陶拉尔夫·斯科伦扩展了策梅罗集合论所得。其他和ZFC有关的集合论有： 1）、策梅洛集合论是由德国数学家恩斯特·策梅洛创立，将分类公理代替替代公理。 2）、广义集合论，策梅洛集合论的一小部分，已足以处理皮亚诺公理及有限集合。 3）、克里普克-普拉特克集理论，省略了无穷公理、幂集公理和选择公理，削弱了分类公理和替代公理的公理架构。 2、由集合和真类构成：这类系统包括冯·诺伊曼-博内斯-哥德尔集合论，是设计生成同 ZFC同样结果的集合论公理系统，但只有有限数目的公理而不使用公理模式。单论只涉及集合的内容，此理论的强度和ZFC相当。另外比ZFC强的Morse-Kelley集合论及Tarski–Grothendieck集合论也属于这一类。&lt;/p&gt;
&lt;h2 id=&#34;三选择公理&#34;&gt;三、选择公理&lt;/h2&gt;
&lt;p&gt;选择公理：对于所有的集族，均存在选择函数。 罗素解释：假设有许多（甚至是无限）双鞋子，则我们可以选取每双鞋左边的鞋子构成一个具体的选择。然而，假设有无限双袜子（假设每双袜子都没有可区分的特征），在对于所有的集族，均存在选择函数。 哥德尔证明了选择公理与ZF的相对协调性。保罗·寇恩用力迫法证明了选择公理独立于ZF。也就是说：哥德尔和寇恩证明了，无论接受选择公理与否，都不会导致矛盾，只是身处不同的『数学世界』而已。 不过，除了一些研究集合论的数学家和逻辑学家以外，大部分数学家都选择接受选择公理，因为在含有选择公理的数学世界里，事情会简单一些。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]基于DDD的微服务设计和开发实战</title>
      <link>https://dodoro.chouxiangpai.com/archives/1075/</link>
      <pubDate>Tue, 16 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1075/</guid>
      <description>&lt;p&gt;你是否还在为微服务应该拆多小而争论不休？到底如何才能设计出收放自如的微服务？怎样才能保证业务领域模型与代码模型的一致性？或许本文能帮你找到答案。&lt;/p&gt;
&lt;p&gt;本文是基于 DDD 的微服务设计和开发实战篇，通过借鉴领域驱动设计思想，指导微服务项目团队进行设计和开发（理论篇详见《当中台遇上 DDD，我们该如何设计微服务？》）。本文包括三部分内容：第一部分讲述领域驱动设计基本知识，包括：分层架构、服务视图、数据视图和领域事件发布和订阅等；第二部分讲述微服务设计方法、过程、模板、代码目录、设计原则等内容；最后部分以一个项目为例讲述基于 DDD 的微服务设计过程。&lt;/p&gt;
&lt;h2 id=&#34;目标&#34;&gt;目标&lt;/h2&gt;
&lt;p&gt;本文采用 DDD（领域驱动设计）作为微服务设计指导思想，通过事件风暴建立领域模型，合理划分领域逻辑和物理边界，建立领域对象及服务矩阵和服务架构图，定义符合 DDD 分层架构思想的代码结构模型，保证业务模型与代码模型的一致性。通过上述设计思想、方法和过程，指导团队按照 DDD 设计思想完成微服务设计和开发。&lt;/p&gt;
&lt;p&gt;通过领域模型和 DDD 的分层思想，屏蔽外部变化对领域逻辑的影响，确保交付的软件产品是边界清晰的微服务，而不是内部边界依然混乱的小单体。在需求和设计变化时，可以轻松的完成微服务的开发、拆分和组合，确保微服务不易受外部变化的影响，并稳定运行。&lt;/p&gt;
&lt;h2 id=&#34;适用范围&#34;&gt;适用范围&lt;/h2&gt;
&lt;p&gt;本文适用于按照 DDD 设计方法进行微服务设计和开发的项目及相关人员。&lt;/p&gt;
&lt;p&gt;以下情况不适用：&lt;/p&gt;
&lt;p&gt;“我们的目标是按期盖出一栋大楼来，不要跟我提什么方法，有这啰嗦的时间，还不如抓紧点时间搬砖，把楼给我快点盖好！”。&lt;/p&gt;
&lt;p&gt;“我的工作就是让软件运行起来，能工作一切就 OK！我不需要那么多约束，什么设计方法、扩展性、业务变化、领域模型、响应能力与我无关。别耽误工期啦！先上线再说！”。&lt;/p&gt;
&lt;p&gt;“好的软件是自己演进出来的，我们不需要设计！”。&lt;/p&gt;
&lt;p&gt;哈哈，开个玩笑啦！其实设计不会花太多时间的！&lt;/p&gt;
&lt;h2 id=&#34;正文内容&#34;&gt;正文内容&lt;/h2&gt;
&lt;p&gt;不耽误大家时间了，言归正传。 &lt;a href=&#34;images/46aa321555b55a8f11943da6f9f5d9ed.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1075/images/46aa321555b55a8f11943da6f9f5d9ed-259x300.png&#34;&gt;&lt;/a&gt; DDD 分层架构视图 DDD 分层架构包括：展现层、应用层、领域层和基础层。&lt;/p&gt;
&lt;p&gt;基于DDD的微服务设计和开发实战&lt;/p&gt;
&lt;p&gt;DDD 分层架构各层职能如下：&lt;/p&gt;
&lt;p&gt;展现层 展现层负责向用户显示信息和解释用户指令。&lt;/p&gt;
&lt;p&gt;应用层 应用层是很薄的一层，主要面向用户用例操作，协调和指挥领域对象来完成业务逻辑。应用层也是与其他系统的应用层进行交互的必要渠道。应用层服务尽量简单，它不包含业务规则或知识，只为下一层的领域对象协调任务，使它们互相协作。应用层还可进行安全认证、权限校验、分布式和持久化事务控制或向外部应用发送基于事件的消息等。&lt;/p&gt;
&lt;p&gt;领域层 领域层是软件的核心所在，它实现全部业务逻辑并且通过各种校验手段保证业务正确性。它包含业务所涉及的领域对象（实体、值对象）、领域服务以及它们之间的关系。它负责表达业务概念、业务状态以及业务规则，具体表现形式就是领域模型。&lt;/p&gt;
&lt;p&gt;基础层 基础层为各层提供通用的技术能力，包括：为应用层传递消息、提供 API 管理，为领域层提供数据库持久化机制等。它还能通过技术框架来支持各层之间的交互。&lt;/p&gt;
&lt;p&gt;服务视图 微服务内的服务视图 微服务内有 Facade 接口、应用服务、领域服务和基础服务，各层服务协同配合，为外部提供服务。 &lt;a href=&#34;images/99fd33d90786205dd4eea94ff66b7aa8.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1075/images/99fd33d90786205dd4eea94ff66b7aa8-300x158.jpg&#34;&gt;&lt;/a&gt; 基于DDD的微服务设计和开发实战&lt;/p&gt;
&lt;p&gt;1、接口服务 接口服务位于用户接口层，用于处理用户发送的 Restful 请求和解析用户输入的配置文件等，并将信息传递给应用层。&lt;/p&gt;
&lt;p&gt;2、应用服务 应用服务位于应用层。用来表述应用和用户行为，负责服务的组合、编排和转发，负责处理业务用例的执行顺序以及结果的拼装。&lt;/p&gt;
&lt;p&gt;应用层的服务包括应用服务和领域事件相关服务。&lt;/p&gt;
&lt;p&gt;应用服务可对微服务内的领域服务以及微服务外的应用服务进行组合和编排，或者对基础层如文件、缓存等数据直接操作形成应用服务，对外提供粗粒度的服务。&lt;/p&gt;
&lt;p&gt;领域事件服务包括两类：领域事件的发布和订阅。通过事件总线和消息队列实现异步数据传输，实现微服务之间的解耦。&lt;/p&gt;
&lt;p&gt;3、领域服务 领域服务位于领域层，为完成领域中跨实体或值对象的操作转换而封装的服务，领域服务以与实体和值对象相同的方式参与实施过程。&lt;/p&gt;
&lt;p&gt;领域服务对同一个实体的一个或多个方法进行组合和封装，或对多个不同实体的操作进行组合或编排，对外暴露成领域服务。领域服务封装了核心的业务逻辑。实体自身的行为在实体类内部实现，向上封装成领域服务暴露。&lt;/p&gt;
&lt;p&gt;为隐藏领域层的业务逻辑实现，所有领域方法和服务等均须通过领域服务对外暴露。&lt;/p&gt;
&lt;p&gt;为实现微服务内聚合之间的解耦，原则上禁止跨聚合的领域服务调用和跨聚合的数据相互关联。&lt;/p&gt;
&lt;p&gt;4、基础服务 基础服务位于基础层。为各层提供资源服务（如数据库、缓存等），实现各层的解耦，降低外部资源变化对业务逻辑的影响。&lt;/p&gt;
&lt;p&gt;基础服务主要为仓储服务，通过依赖反转的方式为各层提供基础资源服务，领域服务和应用服务调用仓储服务接口，利用仓储实现持久化数据对象或直接访问基础资源。&lt;/p&gt;
&lt;p&gt;微服务外的服务视图&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于龙芯对.NET Core支持的一些进展</title>
      <link>https://dodoro.chouxiangpai.com/archives/1048/</link>
      <pubDate>Thu, 04 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1048/</guid>
      <description>&lt;p&gt;今天邮箱收到github的issue更新提醒，就在昨天，龙芯(loongson)的码农们已经让.NET Core 3.1的FlightFinder例子在MIPS64跑起来了，但是更复杂的程序还得继续改，预计在今年年底加入.NET 5.x（谨慎乐观）。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/image-1591257074861.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1048/images/image-1591257074861-291x300.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;.NET 本身是完全开源，比Java还要开放（想想现在Google和Oracle关于Java的专利案还没结束呢），但是MS官方已经明确.NET Core和未来的版本不会支持MIPS的CPU指令集架构（龙芯就是用这个架构级），因为太小众了，要实现就得社区自己去写。&lt;/p&gt;
&lt;p&gt;龙芯的团队从去年11月份跑Hello World到现在做了不少工作，看社区里的几位工程师也很努力，最终应该会支持（大概率版本会落后），这个值得肯定。但是，对于龙芯来说，社区和生态太难了，要不是去年“安可”要求，估计也不会刺激他们去支持.NET Core。好的结局是“安可”推广成功，gov和army里无关紧要的系统都用（核心系统因为复杂度，怕是很难用上）。&lt;/p&gt;
&lt;p&gt;最最要命的是：技术发展太快了，龙芯所支持的服务器市场现在已经完全靠云计算了，这些云计算不可能采用龙芯等国产芯片，这也是为什么阿里要造出概念化的飞天国产云系统的原因——为了政策需要啊！&lt;/p&gt;
&lt;p&gt;对于科学技术，我坚信市场化和资本化是最有效的驱动力，最近的SpaceX是又一个有力佐证。努力的人很多，最后大都做了前浪。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】插画版Kubernetes指南</title>
      <link>https://dodoro.chouxiangpai.com/archives/966/</link>
      <pubDate>Tue, 02 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/966/</guid>
      <description>&lt;p&gt;插画版Kubernetes指南（小孩子也能看懂的kubernetes教程） 是根据一个视频翻译过来的，比较形象&lt;/p&gt;
&lt;p&gt;编者按：Matt Butcher 是 Deis 的平台架构师，热爱哲学，咖啡和精雕细琢的代码。有一天女儿走进书房问他什么是 Kubernetes，于是就有了这本插画版的 Kubernetes 指南，讲述了勇敢的 Phippy（一个 PHP 应用），在 Kubernetes 的冒险故事，满满的父爱有木有！&lt;/p&gt;
&lt;p&gt;某一天&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/160704211922444.png&#34;&gt;&lt;img alt=&#34;160704211922444&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/966/images/160704211922444-300x200.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;有一天，女儿走进书房问我：『亲爱的爸爸，什么是 Kubernetes 呢？』&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/160704211922441.png&#34;&gt;&lt;img alt=&#34;160704211922441&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/966/images/160704211922441-300x200.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我回答她：『Kubernetes 是一个开源的 Docker 容器编排系统，它可以调度计算集群的节点，动态管理上面的作业，保证它们按用户期望的状态运行。通过使用「labels」和「pods」的概念，Kubernetes 将应用按逻辑单元进行分组，方便管理和服务发现。』&lt;/p&gt;
&lt;p&gt;女儿更疑惑了……于是就有了这个故事。&lt;/p&gt;
&lt;p&gt;给孩子的插画版 Kubernetes 指南&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/160704211922442.png&#34;&gt;&lt;img alt=&#34;160704211922442&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/966/images/160704211922442-300x200.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;很久很久以前，有一个叫 Phippy 的 PHP 应用，她很单纯，只有一个页面。她住在一个托管服务里，周围还有很多可怕的应用，她都不认识，也不想去认识，但是他们却要共享这里的环境。所以，她一直都希能有一个属于自己的环境：一个可以称作 home 的 webserver。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/160704211922446.png&#34;&gt;&lt;img alt=&#34;160704211922446&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/966/images/160704211922446-300x200.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;每个应用的运行都要依赖一个环境，对于一个 PHP 应用来说，这个环境包括了一个 webserver，一个可读的文件系统和 PHP 的 engine。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/160704211922443.png&#34;&gt;&lt;img alt=&#34;160704211922443&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/966/images/160704211922443-300x200.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;有一天，一只可爱的鲸鱼拜访了 Phippy，他建议 Phippy 住在容器里。Phippy 听从了鲸鱼的建议搬家了，虽然这个容器看起来很好，但是……怎么说呢，就像是漂浮在海上的一个小房间一样，还是没有家的感觉。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/160704211922445.png&#34;&gt;&lt;img alt=&#34;160704211922445&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/966/images/160704211922445-300x200.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;不过容器倒是为应用提供了隔离的环境，在这个环境里应用就能运行起来。但是这些相互隔离的容器需要管理，也需要跟外面的世界沟通。共享的文件系统，网络，调度，负载均衡和资源分配都是挑战。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/160704211922447.png&#34;&gt;&lt;img alt=&#34;160704211922447&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/966/images/160704211922447-300x200.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;『抱歉……孩子……』鲸鱼耸耸肩，一摇尾消失在了海平面下…… Phippy 还没有来得及失望，就看到远方驶来一艘巨轮，掌舵的老船长非常威风。这艘船乍一看就是大了点，等到船走近了，Phippy 才发现船体两边挂满了皮筏。&lt;/p&gt;
&lt;p&gt;老船长用充满智慧的语气对 Phippy 说：『你好，我是 Kube 船长』。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/160704211922449.png&#34;&gt;&lt;img alt=&#34;160704211922449&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/966/images/160704211922449-300x200.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;『Kubernetes』是希腊语中的船长，后来的『Cybernetic』和『Gubernatorial』这两个词就是从 Kubernetes 衍生来的。Kubernetes 项目由 Google 发起，旨在为生产环境中成千上万的容器，构建一个健壮的平台。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数学最重要的公式</title>
      <link>https://dodoro.chouxiangpai.com/archives/1019/</link>
      <pubDate>Tue, 02 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1019/</guid>
      <description>&lt;h2 id=&#34;一费马大定理&#34;&gt;一、费马大定理&lt;/h2&gt;
&lt;p&gt;$$ x^n+y^n=z^n \mbox{(n=2,为毕达哥拉斯定理)} $$&lt;/p&gt;
&lt;h2 id=&#34;二欧拉公式&#34;&gt;二、欧拉公式&lt;/h2&gt;
&lt;p&gt;$$e^{i\pi} + 1 = 0$$&lt;/p&gt;
&lt;h2 id=&#34;三牛顿-莱布尼茨公式&#34;&gt;三、牛顿-莱布尼茨公式&lt;/h2&gt;
&lt;p&gt;$$ \int_a^bf(x){\rm d}x=F(b)-F(a) $$&lt;/p&gt;
&lt;h2 id=&#34;四黎曼zeta函数&#34;&gt;四、黎曼zeta函数&lt;/h2&gt;
&lt;h3 id=&#34;整数形式&#34;&gt;整数形式&lt;/h3&gt;
&lt;p&gt;$$\zeta(p) = \sum_{n=1}^{\infty}{\frac{1}{n^p}}$$&lt;/p&gt;
&lt;h3 id=&#34;复数形式&#34;&gt;复数形式&lt;/h3&gt;
&lt;p&gt;$$\zeta(s) = \sum_{n=1}^{\infty}{\frac{1}{n^s}} \mbox{ （其中，} s \in C \mbox{，且 } Re(z) &amp;gt; 1 \mbox{）}$$&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】.NET Core微服务之ASP.NET Core on Docker</title>
      <link>https://dodoro.chouxiangpai.com/archives/956/</link>
      <pubDate>Mon, 01 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/956/</guid>
      <description>&lt;p&gt;原作：Edison Zhou 恰童鞋骚年&lt;/p&gt;
&lt;h2 id=&#34;一docker极简介绍&#34;&gt;一、Docker极简介绍&lt;/h2&gt;
&lt;p&gt;1.1 总体介绍 &lt;img alt=&#34;file&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/956/images/image-1590996258971.png&#34;&gt; 　　Docker 是一个开源的应用容器引擎，基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中，然后发布到任何流行的 Linux 机器上，也可以实现虚拟化。容器是完全使用沙箱机制，相互之间不会有任何接口（类似 iPhone 的 app），更重要的是容器性能开销极低。&lt;/p&gt;
&lt;p&gt;简而言之&amp;gt; 容器是一个打包了应用服务的环境，它是一个轻量级的虚拟机，每一个容器由一组特定的应用和必要的依赖库组成。&lt;/p&gt;
&lt;p&gt;　　Docker和传统虚拟化之间最大的区别在于：容器是在操作系统层面上实现虚拟化，即直接复用本地主机的操作系统；而传统虚拟化则是在硬件层面实现，如VMware vShpere, Xen及Citrix等。&lt;/p&gt;
&lt;p&gt;1.2 Docker结构 　　Docker 使用客户端-服务器 (C/S) 架构模式，使用远程API来管理和创建Docker容器。 　　Docker 容器通过 Docker 镜像来创建。 　　容器与镜像的关系类似于面向对象编程中的对象与类。　　 　　Docker的架构如下图所示，Client 通过接口与Server进程通信实现容器的构建，运行和发布。Client和Server可以运行在同一台集群，也可以通过跨主机实现远程通信。 &lt;a href=&#34;images/image-1590996351005.png&#34;&gt;&lt;img alt=&#34;image-1590996351005&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/956/images/image-1590996351005-300x156.png&#34;&gt;&lt;/a&gt; 　　具体详细内容，请浏览：《几张图帮你理解Docker基本原理及快速入门》&lt;/p&gt;
&lt;h2 id=&#34;二docker的安装&#34;&gt;二、Docker的安装&lt;/h2&gt;
&lt;p&gt;　　（1）准备一台Linux主机，这里以CentOS 7.2为例。当然，你也可以使用Windows，不过你得确保是Windows 10 pro版本及以上，且安装了Hyper-V等一系列的相关软件。&lt;/p&gt;
&lt;p&gt;　　（2）安装docker&lt;/p&gt;
&lt;p&gt;　　# yum install docker&lt;/p&gt;
&lt;p&gt;　　（3）启动docker服务&lt;/p&gt;
&lt;p&gt;　　# systemctl start docker.sevice 　　（4）配置开机启动并验证 　　# systemctl enable docker.service 　　验证：查看docker版本信息 　　# docker version 　　（5）配置docker加速器 =&amp;gt; 原因你懂得，不设置慢死你，云服务器除外&lt;/p&gt;
&lt;p&gt;　　# vim /etc/docker/daemon.json&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;&amp;ldquo;registry-mirrors&amp;rdquo;: [&amp;quot;&lt;a href=&#34;https://d8b3zdiw.mirror.aliyuncs.com&#34;&gt;https://d8b3zdiw.mirror.aliyuncs.com&lt;/a&gt;&amp;quot;]&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;　　然后重启docker服务&lt;/p&gt;
&lt;p&gt;　　# systemctl daemon-reload&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】.NET内存管理五大基础知识</title>
      <link>https://dodoro.chouxiangpai.com/archives/948/</link>
      <pubDate>Mon, 01 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/948/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;以下文章来源于DotNET技术圈&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;作者RICKY&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;LEEKS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;1小对象怎么处理的&#34;&gt;1.小对象怎么处理的？&lt;/h2&gt;
&lt;p&gt;小型.NET对象被分配到小型对象堆（SOH）上。其中有3种：第0代，第1代和第2代。对象根据其寿命向上移动。&lt;/p&gt;
&lt;p&gt;将新对象放在Gen 0上。当Gen 0充满时，.NET垃圾收集器（GC）运行，处理不再需要的对象，并将其他所有内容移至Gen1。如果Gen 1充满，则GC再次运行，也可以将Gen 1中的对象移动到Gen 2中。&lt;/p&gt;
&lt;p&gt;当Gen 2变满时，将发生GC完全运行。这将清除不需要的Gen 2对象，将Gen 1对象移至Gen 2，然后将Gen 0对象移至Gen 1，最后清除所有未引用的内容。每次运行GC之后，都会压缩受影响的堆，以将仍在使用的内存保持在一起。&lt;/p&gt;
&lt;p&gt;这种代代相传的方法可确保事情高效运行-耗时的压缩过程仅在绝对必要时才会发生。&lt;/p&gt;
&lt;p&gt;注意：如果您在Gen 2中看到大量的内存，则表明内存已被保留很长时间，并且可能存在内存问题。这是内存分析工具可以派上用场的地方。&lt;/p&gt;
&lt;h2 id=&#34;2较大的对象会怎样&#34;&gt;2.较大的对象会怎样？&lt;/h2&gt;
&lt;p&gt;大于85 KB的对象被分配到大对象堆（LOH）。由于复制大块内存的开销，它们没有被压缩。当发生完整的GC时，未使用的LOH对象的地址范围将记录在可用空间分配表中。&lt;/p&gt;
&lt;p&gt;分配新对象后，将在此可用空间表中检查足以容纳该对象的地址范围。如果存在，则将对象分配到那里，如果不存在，则将对象分配到下一个可用空间。&lt;/p&gt;
&lt;p&gt;由于对象不太可能是空地址范围的确切大小，因此对象之间几乎总是会留有小块内存，从而导致碎片。如果这些块小于85 KB，则根本没有重用的可能性。因此，随着分配需求的增加，即使碎片空间仍然可用，也会保留新的段。&lt;/p&gt;
&lt;p&gt;此外，当需要分配大对象时，.NET还是倾向于将对象附加到末尾，而不是运行昂贵的Gen 2 GC。这对性能有好处，但是是导致内存碎片的重要原因&lt;/p&gt;
&lt;h2 id=&#34;3垃圾收集器可以在不同的模式下运行以优化性能&#34;&gt;3.垃圾收集器可以在不同的模式下运行以优化性能&lt;/h2&gt;
&lt;p&gt;.NET通过为GC提供多种模式来解决性能与堆效率之间的权衡问题。&lt;/p&gt;
&lt;p&gt;工作站模式为用户提供了最大的响应速度，并减少了由于GC造成的暂停。它可以作为“并发”或“非并发”运行，指的是运行GC的线程。默认值为并发，它为GC使用单独的线程，因此应用程序可以在GC运行时继续执行。&lt;/p&gt;
&lt;p&gt;服务器模式可为服务器环境提供最大的吞吐量，可伸缩性和性能。在服务器模式下，段大小和生成阈值通常比工作站模式大得多，这反映了对服务器的更高要求。&lt;/p&gt;
&lt;p&gt;服务器模式在多个线程上并行运行垃圾回收，为每个逻辑处理器分配一个单独的SOH和LOH，以防止线程相互干扰。&lt;/p&gt;
&lt;p&gt;.NET框架提供了一种交叉引用机制，因此对象仍然可以在堆之间相互引用。但是，由于应用程序响应能力不是服务器模式的直接目标，因此在GC期间，所有应用程序线程都将被挂起。&lt;/p&gt;
&lt;h2 id=&#34;4引用不足会在性能和内存效率之间折衷&#34;&gt;4.引用不足会在性能和内存效率之间折衷&lt;/h2&gt;
&lt;p&gt;弱对象引用了GC根的替代来源，使您可以保留对象，同时在GC需要时可以收集对象。它们是代码性能和内存效率之间的折衷。创建对象需要占用CPU时间，但保持加载状态需要占用内存。&lt;/p&gt;
&lt;p&gt;弱引用特别适用于大型数据结构。例如，假设您有一个允许用户浏览大型数据结构的应用程序，他们可能会返回其中的一些数据。您可以将任何强引用转换为他们浏览的结构为弱引用。如果用户返回到这些结构，则可以使用它们，但如果没有，GC可以根据需要回收内存。&lt;/p&gt;
&lt;h2 id=&#34;5对象固定可以创建在托管和非托管代码之间传递的引用&#34;&gt;5.对象固定可以创建在托管和非托管代码之间传递的引用&lt;/h2&gt;
&lt;p&gt;.NET使用一种称为GCHandle的结构来跟踪堆对象。GCHandle可用于在托管域和非托管域之间传递对象引用，.NET维护一个GCHandles表以实现此目的。GCHandle有四种类型，包括固定的，用于将对象固定在内存中的特定地址。&lt;/p&gt;
&lt;p&gt;对象固定的主要问题是它可能导致SOH碎片化。如果将对象固定在GC期间，则根据定义，该对象无法重定位。根据您使用固定的方式，它会降低压缩的效率，在堆中留下间隙。避免这种情况的最佳策略是在很短的时间内锁定，然后释放。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用Windbg来分析.Net程序的dump</title>
      <link>https://dodoro.chouxiangpai.com/archives/954/</link>
      <pubDate>Mon, 01 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/954/</guid>
      <description>&lt;p&gt;用Windbg来分析.Net程序的dump&lt;/p&gt;
&lt;h2 id=&#34;1-什么是windbg&#34;&gt;1. 什么是Windbg&lt;/h2&gt;
&lt;p&gt;WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具，可以用于Kernel模式调试和用户模式调试，还可以调试Dump文件。 WinDbg是微软很重要的诊断调试工具: 可以查看源代码、设置断点、查看变量, 查看调用堆栈及内存情况。 Dump文件是进程的内存镜像, 可以把程序的执行状态通过调试器保存到dump文件中&lt;/p&gt;
&lt;h2 id=&#34;2-windbg可以解决以下问题&#34;&gt;2. Windbg可以解决以下问题&lt;/h2&gt;
&lt;p&gt;◆ 内存高 ◆ CPU高 ◆ 程序异常 ◆ 程序Hang死&lt;/p&gt;
&lt;h2 id=&#34;3-使用windbg进行调试分析的两种方式&#34;&gt;3. 使用windbg进行调试分析的两种方式&lt;/h2&gt;
&lt;p&gt;使用windbg调试器attach到需要调试的进程。(会暂停进程的运行) 抓取进程的dump文件，使用windbg分析dump&lt;/p&gt;
&lt;p&gt;下载地址:&lt;a href=&#34;https://technet.microsoft.com/en-us/sysinternals/dd996900&#34;&gt;https://technet.microsoft.com/en-us/sysinternals/dd996900&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载之后为压缩包，将文件解压。通过dos命令来生成dump文件。下面为一条语句为示例&lt;/p&gt;
&lt;p&gt;procdump -ma -c 0 -s 3 -n 2 sqlservr.exe -o E:\dumps\&lt;/p&gt;
&lt;p&gt;这条语句的意思为：当sqkservr.exe这个进程运行时间cpu的占用超过0%，时间超过3秒，则在E:\dumps下生成一个dump文件。一直到生成2个为止。下面为命令介绍&lt;/p&gt;
&lt;p&gt;-ma 生成full dump, 即包括进程的所有内存. 默认的dump格式包括线程和句柄信息. -c 在CPU使用率到达这个阀值的时候, 生成dump文件. -s CPU阀值必须持续多少秒才抓取dump文件. -n 在该工具退出之前要抓取多少个dump文件. -o dump文件保存目录. Sqlservr.exe可替换为进程的ID&lt;/p&gt;</description>
    </item>
    <item>
      <title>数学模型概述</title>
      <link>https://dodoro.chouxiangpai.com/archives/919/</link>
      <pubDate>Thu, 28 May 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/919/</guid>
      <description>&lt;p&gt;这一个多月以来，我投入了大量的时间回顾和复习本科基础数学课程，重点是《数学分析》、《高等代数》、《解析几何》、《概率论与数理统计》、《数值分析》、《数学模型》，并且延申阅读了这几个学科的历史。我最关心的是数学模型，这个也是我大学里除了三门基础课程之外学得最好的一门课程，而且我投入了大量时间数学模型的学习，并且参加了校级、国级和美国数学建模比赛，分别获得一等奖、二等奖和一等奖。&lt;/p&gt;
&lt;p&gt;所谓数学模型，其实简单地说就是：使用数学方法解决实际应用问题。除了常见的数学模型，还有其他大量地借用数学方法来解决实际问题的例子，比如爱因斯坦的相对论，其实就是借用非欧几何的数学理论来解决物理问题。关于常见的数学模型，已经有人进行了非常好的整理：线性规划、整数规划、非线性规划、 图与网络模型、插值与拟合、微分方程建模、数理统计、时间序列、支持向量机、多元分析、偏最小二乘回归分析、现代优化算法（模拟退火、遗传算法）、数字图像处理、 综合评价与决策方法、预测方法（微分方程、灰色度预测、差分方程、马尔可夫预测、插值与拟合、神经网络）。&lt;/p&gt;
&lt;p&gt;我后续会比较深入地重新捡起这些算法和模型，并且运用到实际生活中，我这里的实际生活，就是针对实实在在发生和进行的事情。&lt;/p&gt;</description>
    </item>
    <item>
      <title>疫情期间的一些阅读</title>
      <link>https://dodoro.chouxiangpai.com/archives/1233/</link>
      <pubDate>Sun, 24 May 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1233/</guid>
      <description>&lt;p&gt;三百五十多年前，牛顿为躲避瘟疫回到老家，酝酿出了《自然哲学之数学原理》。2020年初，我因新冠疫情躲在北京郊区近两个月，闲暇之余却只是建了几个模、(重)读了几本书。从先哲们那里获取心力，只是为了让自己思想变得更坚定。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20210524090719.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/1233/images/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20210524090719-300x213.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于所学的数学学科介绍</title>
      <link>https://dodoro.chouxiangpai.com/archives/903/</link>
      <pubDate>Thu, 21 May 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/903/</guid>
      <description>&lt;h2 id=&#34;一前言&#34;&gt;一、前言&lt;/h2&gt;
&lt;p&gt;我已经毕业十多年了，大学本科数学四年，前两年我的大部分精力都投入到数学学习，特别是数学分析、高等代数和解析几何，这三门课程我学得非常好，另外运筹学和数学模型学得也还可以，复变函数我自认为理解很好，但是考试分数很差。后两年我开始对编程感兴趣，只有一半多的时间放在专业课上，专业课程包括概率论、实变函数、数值分析、抽象代数、数学物理方程、数论基础、应用数理统计、最优化原理与算法、偏微分方程数值解和泛函分析，这些课程里除了概率论和数理统计，其他的课程学得就没有前两年那么深入。&lt;/p&gt;
&lt;p&gt;这段时间重新翻了翻大学的课程，印象最深的还是那三大基础课程：数学分析、高等代数和解析几何，加上概率论和数学模型，我基本都还能捡回来。我感叹大学的自己曾经一只脚迈进现代数学大门，后来抽身离开；现在还想打开这扇门，虽然里面风景独好，但是发现已经迈不进去了。我重新阅读这些图书，一方面是促进自己在算法和建模方面的工作，另一方面是希望对数学史了解更深刻。&lt;/p&gt;
&lt;h2 id=&#34;二数学分析&#34;&gt;二、数学分析&lt;/h2&gt;
&lt;p&gt;这门学科可以追溯到古希腊欧多克索斯，他提出的穷竭法第一次引出极限理论，另一位伟大的数学家阿基米德则真正让微积分初现萌芽，他是用穷竭法求出了抛物线弓形的面积。由于欧洲罗马帝国和中世纪对古希腊文明的摧残，一直到17世纪文艺复兴之后，微积分才开始得到发展，帕斯卡、费马、沃利斯和巴罗都触及到了微积分的边缘，他们的一些工作其实已经反映出了微积分思想。&lt;/p&gt;
&lt;p&gt;真正创立微积分的人是牛顿和莱布尼茨，牛顿为了研究物理发明微积分，他采用的是流数术；莱布尼茨则采用更加数学的方法创立了微积分，他的方法一直保留至今。客观公正的说，他们两位都是分别独立创立了微积分。这时候的微积分是建立在不严密的基础之上，特别是对于无穷量小这个概念非常模糊，虽然如此，但是基于不严密的微积分，欧拉、拉格朗日、拉普拉斯、勒让德和傅立叶深刻发展了微积分，并且获得了大量原创性成果。&lt;/p&gt;
&lt;p&gt;微积分严密化工作一直到了19世纪才完成，从波尔查诺、阿贝尔和柯西开始，一直到维尔斯特拉斯、戴德金、黎曼和达布，他们先摆脱了无穷小量的幽魂，建立实数理论，完成极限的严格定义和证明，最终完成现代数学分析体系的建立。大学本科的数学分析也只是讲到了19世纪末。&lt;/p&gt;
&lt;p&gt;20世纪的分析学最深刻的变革是勒贝格开创测度论，以此发展出了实变函数，以此衍生了理论化的概率论和随机过程，同时复数的引入，也发展出了基于复变函数的复分析。而以函数空间为基础的泛函和算子理论，则发展出了泛函分析，泛函分析里的希尔伯特空间、巴拿赫空间和广义函数论在物理学获得应用。三角级数发展成傅立叶分析。多变量函数和多维空间的曲面的研究，则发展出了微分几何学、偏微分方程和流形分析。一元线性空间（即线性方程组）理论问题基本都被解决，非线性分析则成为最活跃的数学分析分支之一。这里值得一提的是：罗宾逊将实数推广到超实数，引出了非标准分析。目前，无穷维的微积分理论并没有建立，注意：这里的无穷维并不是指N维空间，因为一般意义上的N维空间并不是无穷维。&lt;/p&gt;
&lt;p&gt;现在活跃的纯数学分析研究方向主要是非线性分析和偏微分方程，这个方向可以产生大量的论文，但是很难产出原创性的理论。另外一方向就是无限维微积分的研究，但也仅限于巴拿赫空间的大量研究，更普遍的无限维微积分似乎已经超出人类的智力范围。非纯粹的数学分析主要就是和其他数学学科的混合研究，比如调和分析。&lt;/p&gt;
&lt;h2 id=&#34;三高等代数&#34;&gt;三、高等代数&lt;/h2&gt;
&lt;p&gt;代数是数学史上最古老的一门学科之一，甚至可以说曾经的代数就代表数学，从最基础的整数和算术到方程，再到统一的线性代数，直至抽象代数，代数的发展一直伴随着人类文明的历史。人类最开始结绳计数就开始和代数(即算术)打交道，而5000多年之前的两河流域文明就出现算术系统，特别是巴比伦文明已经开始研究代数方程。古埃及人、古希腊人和古代中国从几何角度去探讨过方程求解，毕达哥拉斯则认为“万物皆数”，欧几里德证明素数无限。一直到了古罗马时期，被誉为“代数之父”之一的丢番图正式研究不定方程。&lt;/p&gt;
&lt;p&gt;波斯帝国诞生了另外一位也被尊为“代数之父”的花拉子米，他的《代数学》是第一本解决一次方程及一元二次方程的系统著作。中世纪的欧洲，东方数学家在代数方面取得辉煌成就。古波斯的欧玛尔·海亚姆发展出代数几何，并且且找出了三次方程的一般几何解法；古印度的摩诃吠罗和婆什迦罗与古中国的朱世杰解出了许多特定的三次、四次、五次方程的解；古中国的秦九韶甚至证明了中国剩余定理，即关于互素和模的定理。&lt;/p&gt;
&lt;p&gt;文艺复兴之后的欧洲开始研究从东方传来的方程求解，逐渐打开代数大门，特别是对高次方程的一般解法的研究，阿贝尔和迦罗华做出突出贡献，阿贝尔证明五次方程的根式解的不可能性并在椭圆函数的研究中提出阿贝尔方程式，英年早逝的迦罗华则发展出了群论。莱布尼茨继续发展了日本数学家关孝和提出的行列式概念，并通过矩阵来解出线性方程组，加布里尔·克拉默则在更一般情景研究矩阵和行列式上。到了埃米诺特，基于迦罗华理论引伸出了更抽象更一般的群、环、域，并提出了抽象代数。&lt;/p&gt;
&lt;p&gt;抽象代数是人类智慧的集中体现，它使得“代数”这个词在数学世界的意义，从“方程理论”换变成“代数结构理论”，大量天才数学家对抽象代数进行研究。恩斯特·斯坦尼兹研究过一般的域、大卫·希尔伯特、埃米尔·阿廷与埃米·诺特研究过可交换群与一般的环，恩斯特·库默尔、利奥波德·克罗内克与理察·戴德金研究过可交换环的理想，以及费迪南德·格奥尔格·弗罗贝尼乌斯与伊赛·舒尔研究过群的表示理论。&lt;/p&gt;
&lt;p&gt;数论其实也算是代数的一个分支，数论被认为是最纯粹的数学，而数量的核心研究对象是素数，真正让数论成为一们学科是由费马、梅森、欧拉、高斯、勒让德、黎曼、希尔伯特等人发展而来。目前数论的研究围绕几个大的猜想，特别是黎曼猜想，黎曼猜想不仅涵盖了素数分布，还包含了复分析、解析数论等知识。&lt;/p&gt;
&lt;p&gt;我大学所学的高等代数，由一元线性方程组的研究，先引出了向量空间、矩阵，接着探讨线性空间和线性变换，然后抽象出欧氏空间和酉空间，最后从抽象的角度探讨线性代数、几何和分析三者的关联。下图高度概括这种关系：&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20200522090050.png&#34;&gt;&lt;img alt=&#34;微信图片_20200522090050&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/903/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20200522090050-300x208.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id=&#34;四解析几何&#34;&gt;四、解析几何&lt;/h2&gt;
&lt;p&gt;几何的诞生和人类文明同时发展，无论是尼罗河边上的古埃及人、古希腊哲人，还是两河流域的巴比伦人和古代中国人，都对几和进行了或多或少的研究，但是真正数学意义上的几何则来自古希腊人。公元前六世纪泰勒斯的时代，西方世界开始将几何学视为数学的一部分。公元前三世纪，几何学中加入欧几里德的公理，产生的欧几里得几何是往后几个世纪的几何学标准。阿基米德发展了计算面积及体积的方法，许多都用到积分的概念。阿波罗尼奥斯完成圆锥曲线理论，这些工作为一千八百多年后开普勒、牛顿、哈雷等数理天文学家研究行星和彗星轨道提供了数学基础。&lt;/p&gt;
&lt;p&gt;欧洲中世纪期间因为对天文学的研究，所以保留了几何知识的学习，但都是掌握在神父手上，并没有取得任何进展。天文学中有关恒星和行星在天球上的相对位置，以及其相对运动的关系，都是后续一千五百年中探讨的主题。几何和天文都列在西方博雅教育中的四术中，是中古世纪西方大学教授的内容之一。&lt;/p&gt;
&lt;p&gt;勒内·笛卡儿发明的坐标系以及当时代数的发展让几何学进入新的阶段，像平面曲线等几何图形可以由函数或是方程等解析的方式表示。这对于十七世纪微积分的引入有重要的影响。透视投影的理论让人们知道，几何学不只是物体的度量属性而已，透视投影后来衍生出射影几何。欧拉及高斯开始有关几何物件本体性质的研究，使几何的主题继续扩充，最后产生了拓扑学及微分几何。现代概念上的几何其抽象程度和一般化程度大幅提高，并与分析、抽象代数和拓扑学紧密结合。&lt;/p&gt;
&lt;p&gt;这里重点提出非欧几何（或者叫罗巴切夫斯基几何），这是人类颠覆传统欧几里德几何观念的一次巨大思维飞跃，也是几何学发展的新里程碑。非欧几何曾经在高斯的脑子里酝酿，但他没有深入研究，最终是波约尔和罗巴切夫斯基创立，而因为罗巴切夫斯基的方式更完美，做的工作也更多，所以也叫罗巴切夫斯基几何。非欧几何后续又由黎曼、庞加莱等数学家发展和改进，并且需求数学逻辑上的理论支持，最终在20世纪初被爱因斯坦运用于广义相对论，非欧几何的应用于广义相对论与微积分应用于经典物理学一样值得称颂。&lt;/p&gt;
&lt;p&gt;解析几何是欧几里德几何的现代版本，20世纪下半叶中有大幅的进展，主要是因为让-皮埃尔·塞尔及亚历山大·格罗森迪克的贡献，这也产生了概形以及代数拓扑学一些方法的重视，包括许多的上同调理论。千禧年大奖难题中的霍奇猜想就是解析几何学的问题。&lt;/p&gt;
&lt;p&gt;低维度代数簇、代数曲线及代数曲面的研究以及三维代数簇（algebraic threefolds）的研究都有很多进展。Gröbner基理论及实代数几何应用在现在解析几何的一些子领域中。算术几何（Arithmetic geometry）是结合了解析几何及数论的一个新的领域。另外一个研究方向是模空间及复几何。代数几何的方法广泛的用在弦理论及膜宇宙理论中。&lt;/p&gt;
&lt;p&gt;我所学习的解析几何主要是先从向量代数出发，建立仿射坐标系，并研究空间的直线、平面和曲面，同时学习仿射坐标变换、二次曲面的仿射理论，放射变化和保距变换。最后还学习了射影几何的基本知识。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】数学体系解读</title>
      <link>https://dodoro.chouxiangpai.com/archives/898/</link>
      <pubDate>Thu, 14 May 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/898/</guid>
      <description>&lt;p&gt;这篇文章作者是机器学习方面的专家爱林达华先生，他不是数学科班出身，但是能从深入了解数学各个体系，并且意识到数学是获得计算机突破的理论基础，还是挺不错的。他这篇文章里提到的体系有一定的缺陷，但是可以为非数学专业学生提供一个直观的视角。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数学体系解读&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;by MIT 林达华&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;目录 (Contents)&lt;/p&gt;
&lt;p&gt;1 为什么要深入数学的世界&lt;/p&gt;
&lt;p&gt;2 集合论：现代数学的共同基础&lt;/p&gt;
&lt;p&gt;3 分析：在极限基础上建立的宏伟大厦&lt;/p&gt;
&lt;p&gt;3.1 微积分：分析的古典时代——从牛顿到柯西&lt;/p&gt;
&lt;p&gt;3.2 实分析：在实数理论和测度理论上建立起现代分析&lt;/p&gt;
&lt;p&gt;3.3 拓扑学：分析从实数轴推广到一般空间——现代分析的抽象基础&lt;/p&gt;
&lt;p&gt;3.4 微分几何：流形上的分析——在拓扑空间上引入微分结构&lt;/p&gt;
&lt;p&gt;4 代数：一个抽象的世界&lt;/p&gt;
&lt;p&gt;4.1 关于抽象代数&lt;/p&gt;
&lt;p&gt;4.2 线性代数：“线性”的基础地位&lt;/p&gt;
&lt;p&gt;4.3 泛函分析：从有限维向无限维迈进&lt;/p&gt;
&lt;p&gt;4.4 继续往前：巴拿赫代数，调和分析，和李代数&lt;/p&gt;
&lt;p&gt;5 现代概率论：在现代分析基础上再生&lt;/p&gt;
&lt;h2 id=&#34;为什么要深入数学的世界&#34;&gt;为什么要深入数学的世界&lt;/h2&gt;
&lt;p&gt;作为计算机的学生，我没有任何企图要成为一个数学家。我学习数学的目的，是要想爬上巨人的肩膀，希望站在更高的高度，能把我自己研究的东西看得更深广一些。说起来，我在刚来这个学校的时候，并没有预料到我将会有一个深入数学的旅程。我的导师最初希望我去做的题目，是对appearance和motion建立一个unified的model。这个题目在当今Computer Vision中百花齐放的世界中并没有任何特别的地方。事实上，使用各种Graphical Model把各种东西联合在一起framework，在近年的论文中并不少见。&lt;/p&gt;
&lt;p&gt;我不否认现在广泛流行的Graphical Model是对复杂现象建模的有力工具，但是，我认为它不是panacea，并不能取代对于所研究的问题的深入的钻研。如果统计学习包治百病，那么很多 “下游”的学科也就没有存在的必要了。事实上，开始的时候，我也是和Vision中很多人一样，想着去做一个Graphical Model——我的导师指出，这样的做法只是重复一些标准的流程，并没有很大的价值。经过很长时间的反复，另外一个路径慢慢被确立下来——我们相信，一个 图像是通过大量“原子”的某种空间分布构成的，原子群的运动形成了动态的可视过程。微观意义下的单个原子运动，和宏观意义下的整体分布的变换存在着深刻的 联系——这需要我们去发掘。&lt;/p&gt;
&lt;p&gt;在深入探索这个题目的过程中，遇到了很多很多的问题，如何描述一个一般的运动过程，如何建立一个稳定并且广泛适用的原子表达，如何刻画微观运动和宏观分布变换的联系，还有很多。在这个过程中，我发现了两个事情：&lt;/p&gt;
&lt;p&gt;我原有的数学基础已经远远不能适应我对这些问题的深入研究。 在数学中，有很多思想和工具，是非常适合解决这些问题的，只是没有被很多的应用科学的研究者重视。 于是，我决心开始深入数学这个浩瀚大海，希望在我再次走出来的时候，我已经有了更强大的武器去面对这些问题的挑战。&lt;/p&gt;
&lt;p&gt;我的游历并没有结束，我的视野相比于这个博大精深的世界的依旧显得非常狭窄。在这里，我只是说说，在我的眼中，数学如何一步步从初级向高级发展，更高级别的数学对于具体应用究竟有何好处。&lt;/p&gt;
&lt;h2 id=&#34;集合论现代数学的共同基础&#34;&gt;集合论：现代数学的共同基础&lt;/h2&gt;
&lt;p&gt;现代数学有数不清的分支，但是，它们都有一个共同的基础——集合论——因为 它，数学这个庞大的家族有个共同的语言。集合论中有一些最基本的概念：集合(set)，关系(relation)，函数(function)，等价 (equivalence)，是在其它数学分支的语言中几乎必然存在的。对于这些简单概念的理解，是进一步学些别的数学的基础。我相信，理工科大学生对于 这些都不会陌生。&lt;/p&gt;
&lt;p&gt;不过，有一个很重要的东西就不见得那么家喻户晓了——那就是“选择公理” (Axiom of Choice)。这个公理的意思是“任意的一群非空集合，一定可以从每个集合中各拿出一个元素。”——似乎是显然得不能再显然的命题。不过，这个貌似平常 的公理却能演绎出一些比较奇怪的结论，比如巴拿赫-塔斯基分球定理——“一个球，能分成五个部分，对它们进行一系列刚性变换（平移旋转）后，能组合成两个一样大小的球”。正因为这些完全有悖常识的结论，导致数学界曾经在相当长时间里对于是否接受它有着激烈争论。现在，主流数学家对于它应该是基本接受的，因为很多数学分支的重要定理都依赖于它。在我们后面要回说到的学科里面，下面的定理依赖于选择公理：&lt;/p&gt;
&lt;p&gt;拓扑学：Baire Category Theorem 实分析（测度理论）：Lebesgue 不可测集的存在性 泛函分析四个主要定理：Hahn-Banach Extension Theorem, Banach-Steinhaus Theorem (Uniform boundedness principle), Open Mapping Theorem, Closed Graph Theorem 在集合论的基础上，现代数学有两大家族：分析(Analysis)和代数(Algebra)。至于其它的，比如几何和概率论，在古典数学时代，它们是和代数并列的，但是它们的现代版本则基本是建立在分析或者代数的基础上，因此从现代意义说，它们和分析与代数并不是平行的关系。&lt;/p&gt;</description>
    </item>
    <item>
      <title>中国古代数学家</title>
      <link>https://dodoro.chouxiangpai.com/archives/879/</link>
      <pubDate>Wed, 06 May 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/879/</guid>
      <description>&lt;h2 id=&#34;一写在前面的话&#34;&gt;一、写在前面的话&lt;/h2&gt;
&lt;p&gt;数学是一门非常悠久的学科，它和其他自然科学一样，诞生于人类文明发展过程之中；数学是一门利用符号语言研究数量、结构、变化以及空间等概念的一门学科，它是自然科学的工具和语言。&lt;/p&gt;
&lt;p&gt;我第一次接触数学史是在初中，那时候第一本启蒙书是《数学演义》（作者不是王树和），目前已经找不到这本书。我很确定书名是“数学演义”，读这本书的时候大约是在1999年左右，里面讲了大量关于四大文明古国的数学史，包含了初等数学、微积分和数论的知识，从这本书我第一次听说了希尔伯特、费马、莱布尼茨、欧拉、高斯、庞加莱、黎曼等数学家。除了这本书，我还读了大百科全书里面的数学部分，以及其他图书馆能找到的数学科普书籍，从此以后我坚定了立志长大之后成为一名数学家。&lt;/p&gt;
&lt;p&gt;中考结束后的暑假，我阅读了《费马大定理—一个困惑了世间智者358年的谜》，怀尔斯取代华罗庚成为我的偶像。高中时期我在县城的重点高中上学，读了大量数学史和数学家方面的书籍，期间还因此涉猎相对论和理论物理学等方面的知识，我甚至自己推到了洛伦茨变换——这是狭义相对立的基础。&lt;/p&gt;
&lt;p&gt;高考之后，我如愿进入985大学的数学专业，期间系统地学习了本科数学，我自认为数学分析、高等代数、解析几何等基础课程我学得很好，只是没有彻底打开复变函数和泛函分析的大门(前两年已经补了一些回来)。我没有错过浩瀚无边的大学图书馆，阅读了大量数学史和数学思想方面的书籍。对我影响最大的是克莱因，特别是他的那本《数学：确定性的丧失》，这是一本介于数学和哲学的书，我读了好几遍，以前我也是抱着完美纯数学观点，这本书改变了我很多看法，深刻影响了我对数学的理解，甚至间接促成了我最终选择了设计算法和写代码。&lt;/p&gt;
&lt;p&gt;大学阶段的后阶段，我徘徊在理想(数学)与现实(编程)之间。最终倾向理智的我皈依了现实，毕业后从事软件开发工作，十几年来，倒是也接触数学算法和数学模型。我一直觉得自己曾经一只脚迈进现代数学大门，后来抽身离开；现在回过头来还想打开这扇门，虽然里面风景独好，但是发现已经迈不进去了。&lt;/p&gt;
&lt;h2 id=&#34;二中国古代数学家&#34;&gt;二、中国古代数学家&lt;/h2&gt;
&lt;p&gt;今年以来读（重读）了大量数学史方面的书籍：李约瑟的《中国科学技术史-数学》、李迪的《中国数学史简编》、吴文俊主编的《中国数学史大系》、克莱因的《古今数学思想》、斯科特的《数学史》、张奠宙《20世纪数学经纬》、李文林的《数学史概论》。读完书之后我对整个世界数学史和中国数学史有了更深刻的了解，这也是我重新系统地思考中国古代数学和数学家。&lt;/p&gt;
&lt;p&gt;综合各类文献，如果以真正意义上的数学（即数学定义为：透过抽象化和逻辑推理的使用，由计数、计算、量度和对物体形状及运动的观察而产生），我觉得首位中国古代数学家是赵爽(赵君卿)或者刘徽（因两者生卒年不详所以很难定义谁是第一位），他们两位有比较详实的文献记载，并且所作的工作符合真正意义上的数学工作，赵爽在注解《周髀算经》中严格证明了毕达哥拉斯定理（或勾股定理），刘徽则在注解《九章算术》中做了大量原创新的数学发现，他还写了一部《海岛算经》。至于国内学者推断的张苍、桑弘羊、耿寿昌、许商、刘歆、郑玄，这些人要么在史书传略里没有提到他们的作品，要么只是作为政府官员参与编著古代算经，并没有可靠的历史文献证明他们的数学才华。当然，我并不完全否认这些人可能做出的数学贡献，有如我不否认公元4000年左右前为了修建埃及金字塔而做出数学贡献的无名氏，以及公元3000年左右前在巴比伦泥巴刻下勾股数和公式的无名氏。&lt;/p&gt;
&lt;p&gt;这里我不得不提一下商高，看到一些研究者努力去证明商高是第一位数学家，或者商高证明了勾股定理，我对此完全不敢苟同。首先，商高和周公的对话是否真的证明了勾股定理，我还是抱怀疑态度；其次，周公和商高的对话首次出现在《周髀算经》，但是这本书大概率是成书于西汉年间（甚至更晚），我不否认《周髀算经》是汉代之前积累而成，但是具体源头到哪里目前没有任何实证，我更倾向于相信这本书和《九章算术》一样是在汉代经过多人汇集先前的知识汇编而成，并且大部分真正意义的数学知识是在汉代的时候产生。&lt;/p&gt;
&lt;p&gt;中国古代数学真正繁荣时期是汉代(含三国魏晋)和宋代两个时期，这段时间产生大量原创性极高的数学，还有很有造诣的数学家，清代末期西方数学传入，加上西学东渐，中国人开始真正研究现代数学。历数中国古代数学家（标注红色是比较纯粹研究数学的数学家），除了上面提到的&lt;strong&gt;赵爽&lt;/strong&gt;和&lt;strong&gt;刘徽&lt;/strong&gt;，还有：具有独创精神的&lt;strong&gt;王孝通&lt;/strong&gt;，努力汇编算经、勉强可以称数学家的李淳风和的张丘建，有详细记载但著作失传的祖冲之和祖暅（只能怪动荡的南北朝），发明大衍术的&lt;strong&gt;僧一行&lt;/strong&gt;，学会开三次方的&lt;strong&gt;贾宪&lt;/strong&gt;，著作失传的刘益和蒋周，身兼科学家的沈括，古中国数论大师、证明中国剩余定理的&lt;strong&gt;秦九韶&lt;/strong&gt;，精通算经的&lt;strong&gt;杨辉&lt;/strong&gt;，发明天元术的&lt;strong&gt;李治&lt;/strong&gt;，精于天文算术的王恂，善于解线性方程的&lt;strong&gt;朱世杰&lt;/strong&gt;，编写《九章算法类比大全》的隐士吴敬和珠算先驱王文素，重新挖掘《九章算术》的珠算大师&lt;strong&gt;程大位&lt;/strong&gt;，翻译《几何原本》的徐光启，接触西方数学的李子金和杜知耕，会通中西数学的&lt;strong&gt;梅文鼎&lt;/strong&gt;，研究三角函数的明安图，研究古代算经的李锐，系统介绍和研究西方数学的&lt;strong&gt;李善兰&lt;/strong&gt;和&lt;strong&gt;华蘅芳&lt;/strong&gt;，清代末期数学研究工作者夏鸾翔、丁取忠、时曰醇、黄宗宪、席淦、陈志坚，还有发掘古中国数学经书的&lt;strong&gt;刘彝程&lt;/strong&gt;，发起和创建中国数学协会的&lt;strong&gt;周达&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>有些人注定渐行渐远</title>
      <link>https://dodoro.chouxiangpai.com/archives/1174/</link>
      <pubDate>Tue, 18 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1174/</guid>
      <description>&lt;p&gt;昨天发了帝国理工的结果图，一大早起来收到一个很red的大学同学回复 “你这是唯恐天下不乱”。不愉快的交谈后，我最后回了一句：你不想看就屏蔽。后来想了想，我给他省了个操作的麻烦。&lt;/p&gt;
&lt;p&gt;说实话，我内心当然希望疫情赶紧结束，首先，这已经影响了个人和家庭的生活和计划；其次，偶尔翻看一些现场视频和文字的时候，我对那些无辜的患者怀有悲悯之心，也对真正一线的医护人员怀有敬意(虽然这是他们的义务或选择)。&lt;/p&gt;
&lt;p&gt;我对帝国理工的科研人员更抱有感谢之心，上月18日他们建了一个模型，预测17日实际人数700到9000，中值估计1700，官方只有不到50，又看到“virus”只出海不出省，我就知道大事不妙，马上下单买好口罩。出门那天早上地铁几乎就我们戴口罩，火车上也只有我们一家全程戴口罩，还好坐的是一等座，人也少，所在车厢经停武汉也没有人上下车，目前还没有异样，我也不希望后面有。试想最坏的情况，如果不做防护，火车上中招并且潜伏周期长，那么春节接触的家人亲戚怎么办？！就在18日那天晚上我很隐晦的发了朋友圈，两位比较要好的大学同学马上问我要链接确认什么情况，他们也建过数学模型，知道和最终结果不会差太多，而且一个学术机构不会整天没事黑人。&lt;/p&gt;
&lt;p&gt;生活在不透明不开放不包容的环境，要想自保只能靠自己全面地(墙内外)获取信息，并且经过多方比较和思考后做出独立判断。我同情那位同学，因为他付出越多(不管是情感还是行动)，他一定会受伤害越多。看吧，这种事情，处理方式和当年还是一样，环境不变，不管再过多少都会这样，更不要说危机到来时的众生丑态和各自魔幻现实，而我不相信他能永远“幸存者偏差”。我也能理解他，毕竟大家在个人、政府、国家的认知完全不一样，“道不同不相为谋”，更不可能是好友，那就只做通讯录的一个冷冰冰的名字吧，当然，他主动把我拉黑了也无妨。&lt;/p&gt;
&lt;p&gt;我相信每一个正常的人都想生活在一个正常的社会里，而我觉得这样的社会至少要：尊重个人优先，有充分的自由和机会、价值的多元与价值之间的相对均衡、一定程度的政治参与。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于移民的中文学习探讨</title>
      <link>https://dodoro.chouxiangpai.com/archives/870/</link>
      <pubDate>Fri, 03 Jan 2020 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/870/</guid>
      <description>&lt;p&gt;很多华人移民后都坚持学中文，我也发表点个人看法。&lt;/p&gt;
&lt;p&gt;最基本也是大家公认的肯定是语言：听说读写，这个我觉得父母能够帮忙的也就到小学毕业。&lt;/p&gt;
&lt;p&gt;关于中华文化，看到不少误解。&lt;/p&gt;
&lt;p&gt;首先，中华文化有精华的部分，但也有大量糟粕（很多是因为古代知识阶层为了统治阶级对文明进行了大量修改）。&lt;/p&gt;
&lt;p&gt;其次，掌握最基本的语言之后，应该要精心挑选体现中华文明的图书，但我认为三字经、四大名著不是第一位和必要的，还不如让小朋友中学的时候多读些没有太多意识形态的文学作品，特别是民国那一批大师们的（因为他们真的是融会中西，而且做了大量思考），高中和大学的时候读读港台地区更客观的中华史，或者剑桥的中国史。&lt;/p&gt;
&lt;p&gt;最后，说说中华文明。绝大部分国人都没有真正深知中华文化（当然我指的是精华部分的）。&lt;/p&gt;
&lt;p&gt;就举个儒学为例子。儒学源于商周，形成和发展于百花齐放、百家争鸣的春秋战国，这一段时间，中华文化和西方文明是齐头并进的，甚至超越西方文明，而且这段时间的儒学没有受到意识形态的影响，都是基于人最基本的需求和个性去发展，这部分一般叫先秦儒学。&lt;/p&gt;
&lt;p&gt;然而，秦朝后中华统一，形成帝制，延续两千多年。这段时间汉朝虽然独尊儒术，但那是董仲舒结合了佛和道改良的儒学，本质上为统治阶级服务。后来宋理学，朱熹他们立志复兴儒学，却也逃不了服务帝制的框架。到了明朝，王阳明推崇的心学，是比较纯粹地发展古儒，但却是独立于王朝本身，影响并不深远（倒是在日本和东南亚影响很大）。晚清的后面的新文化运动一刀切地否定儒学，却又没有彻底完成西方思想的吸收，接着是后来这几十年间的风风雨雨，儒学已经摧残地风雨飘摇。即使最近要复兴儒学，却也逃脱不了类似董仲舒和朱熹所处的时代背景。&lt;/p&gt;
&lt;p&gt;如果小朋友能够吸收西方文艺复兴的大哲们的思想，又能够获得中华文明精髓，对他们绝对是有巨大帮助，想想那些有文化艺术成就的华人，基本都能够融贯中西。&lt;/p&gt;</description>
    </item>
    <item>
      <title>小咕噜熊系列：美术馆的故事</title>
      <link>https://dodoro.chouxiangpai.com/archives/866/</link>
      <pubDate>Thu, 28 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/866/</guid>
      <description>&lt;h2 id=&#34;小咕噜熊去美术馆&#34;&gt;小咕噜熊去美术馆&lt;/h2&gt;
&lt;p&gt;今天是星期六，天气特别好，小咕噜熊问爸爸：今天我们要去哪里溜达呢？爸爸回答：我们今天去美术馆。小咕噜熊问：那美术馆远吗？堵车吗？爸爸说：比较远，但是今天不堵车。&lt;/p&gt;
&lt;p&gt;爸爸开着车带小咕噜熊和妈妈来到了798艺术中心，进入大门，妈妈说：这里就是798了。小咕噜熊在安全座椅上回应：欢迎来到798。他们把车好，然后就进入了美术馆。今天的展览是一个天才的诞生，毕加索先生。&lt;/p&gt;
&lt;p&gt;小咕噜熊跟着爸爸妈妈从头看到尾，妈妈跟她说：毕加索先生的画很棒，他非常有想象力。小咕噜熊年龄还比较小，看不太懂，不过她喜欢毕加索先生的铅笔画，她还喜欢那副看几何形状的城堡。&lt;/p&gt;
&lt;p&gt;时间过得真快，一下子到了午饭时间，他们准备出美术馆的时候，在艺术商店，爸爸抱起小咕噜熊，指着左边问：那边是什么？小咕噜熊非常兴奋：那是一只大大的dinosaur！&lt;/p&gt;
&lt;p&gt;是什么颜色的？&lt;/p&gt;
&lt;p&gt;白色的！&lt;/p&gt;
&lt;p&gt;那左边呢？&lt;/p&gt;
&lt;p&gt;一只红色的dinosar！&lt;/p&gt;
&lt;p&gt;那前面呢？&lt;/p&gt;
&lt;p&gt;一只黄色的dinosaur！爸爸我要和它们照相。&lt;/p&gt;
&lt;p&gt;于是爸爸给小咕噜熊照了好多照片，小咕噜熊非常地开心！小咕噜熊对爸爸妈妈说：我非常喜欢来美术馆，下次我还要来一次美术馆！&lt;/p&gt;</description>
    </item>
    <item>
      <title>移民经验总结——英语考试、职业评估和EOI及签证申请</title>
      <link>https://dodoro.chouxiangpai.com/archives/838/</link>
      <pubDate>Fri, 22 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/838/</guid>
      <description>&lt;p&gt;我们从2017年8月正式开始准备移民，到2019年11月提交190签证申请，期间都是自己DIY（我觉得我现在都可以做移民中介了-_-），下面是自己整理总结的一些经验和教训，希望对过来人有所帮助，没有太多鸡汤，都是一些实际经验。其实，如果你工作很忙，并且周末还要陪伴家人，不一定DIY（英语是必须自己DIY的-_-），因为DIY确实很耗时间，真的很消耗，不过一定要选择靠谱点的中介。&lt;/p&gt;
&lt;h2 id=&#34;一英语考试&#34;&gt;一、英语考试&lt;/h2&gt;
&lt;p&gt;推荐考PTE，关于PTE网上很多资料和培训的方法，我只想说：PTE是一个你只要付出（方法也对），那么就可以一定有收获的，因为是机考，基本谢绝了人为干预，大陆的同学也可以通过努力，比雅思更容易获得7炸和8炸。&lt;/p&gt;
&lt;h2 id=&#34;二职业认证&#34;&gt;二、职业认证&lt;/h2&gt;
&lt;p&gt;我们都是自己DIY，因为只接触过ACS和VET，这里只针对这两个说。&lt;/p&gt;
&lt;p&gt;（一）、ACS&lt;/p&gt;
&lt;p&gt;具体需要什么材料，大家可以网上搜索获得，我这里只讲我申请过程中疑惑的，相信很多人都会有。&lt;/p&gt;
&lt;p&gt;1、所有材料都不需要公证，当然，如果你用出生公证代替护照，那么就得做出生公证。但是，ACS要求所有核心材料都需要国内的律师或者医生进行certified。我的做法是所有材料都彩色扫描，然后用加上pdf水印，水印里面有律师号、律师名字、时间，然后留一个地方给律师签字，然后彩色打印后给律师统一签证，最后彩色扫描整理提交。&lt;/p&gt;
&lt;p&gt;2、所在公司倒闭了怎么办？倒闭没关系，但是一定要提供这些材料：&lt;/p&gt;
&lt;p&gt;（1）、推荐信。这个是必须的，而且信纸要用推荐人现在的公司的信纸（因为既然公司倒闭了，推荐人也不可能还在原来公司）；&lt;/p&gt;
&lt;p&gt;（2）、法定申明。也就是Statutory Declaration，网上有模板，澳洲政府网上有类似的模板，大概意思就是推荐人在律师的见证下，声明他可以证明你在这家公司工作，也要有工作职责和时间还有薪资，这个见证人必须是律师。&lt;/p&gt;
&lt;p&gt;（3）、工作证明。除了提供社保和纳税证明，还必须提供以下三种证明之一：HR开的离职证明；HR开的工作证明（比如你买房或者申请信用卡开过）；带有公司名称的真实工资单（鉴于很多现在电子化了，这个其实很难提供，我自己是有纸质的）。如果没有这个，ACS铁定不认，因为要求里面就有。&lt;/p&gt;
&lt;p&gt;以上这三种材料也都是要律师或者医生certified的。&lt;/p&gt;
&lt;p&gt;3、关于ICP辅修和主修的判断和扣减：这个完全考你的课程情况，不一定必须计算机才可以ICP主修，你只能提上去才知道。但是可以肯定，国内的学历肯定会被扣减2到4年工作经验，辅修的甚至扣5年。&lt;/p&gt;
&lt;p&gt;4、学历没必要做清华认证和公证：当然，前提是你得让学校开除英文版的学历学位证书，并且盖章，成绩单也是。&lt;/p&gt;
&lt;p&gt;（二）VET&lt;/p&gt;
&lt;p&gt;具体需要的材料和ACS类似，网上也很多，我们也是全程DIY。&lt;/p&gt;
&lt;p&gt;1、VET的材料都不需要做certified，也不需要公证，但是VET背调的概率非常大，而且一旦发现材料有问题，非常严重。我个人觉得ACS不背调，所以要求律师certifed，其实是让律师做材料真假证明的判别；VET只需要清晰扫描原件，所以会背调。&lt;/p&gt;
&lt;p&gt;2、国内学历肯定是要通过VET的网站进行中国学历认证，这个是逃不了的，660澳元；认证时间：如果期间没有寒暑假，官方说8周，但如果材料没有问题，一般1个多月可以完成。&lt;/p&gt;
&lt;p&gt;3、职业认证的时间很长，官方说预计12周，从2019年以来真的需要这么多时间，当然，可以申请加急，800澳元，申请后，会看你的材料是否符合加急（主要是看材料的完整度和是否需要深入调查），加急只需要10个工资日。&lt;/p&gt;
&lt;p&gt;4、建议先提交学历认证，学历认证下来之后再提交职业认证（里面也要填写学历信息，但是你把认证结果号写入就可以）；&lt;/p&gt;
&lt;p&gt;5、一条超级有用的经验：如果一开始你没有申请加急，期间也可以申请加急！发邮件给VET，然后根据他们的邮件要求来操作加急。&lt;/p&gt;
&lt;p&gt;6、VET除了Group A对专业有要求之外，其他都不需要相关专业。Group A是一些比较冷门的职业，这些是必须相关专业毕业，如果你不是，就没必要浪费钱了，绝对过不了。&lt;/p&gt;
&lt;h2 id=&#34;三提交eoi相关&#34;&gt;三、提交EOI相关&lt;/h2&gt;
&lt;p&gt;1、可以同时提交多个州担保，分别创建不同的EOI就可以，但是建议拿到一个州担保后，就取消另外一个；即使你两个都拿到了，如果选择其中一个州之后，也建议发邮件给你拒绝的州，告诉他们你不打算提交他们州担保了。我觉得这是一种礼貌，也给其他人多一个名额。&lt;/p&gt;
&lt;p&gt;2、现在新推出491了，建议有机会拿的都拿，因为确实越来越难，除非你觉得自己肯定可以可以拿下8炸，拿下社区语言的5分，而且年龄也允许。&lt;/p&gt;
&lt;p&gt;3、11月16日之后，过了四个六的配偶可以加5分，过了四个六并且通过职业评估的可以加10分，单身狗直接加10分，这样基本抹平原来有配偶的优势。移民局应该是尽量希望能够发出更多的邀请数（配额有限，一个家庭3口人就占去3个配额）。&lt;/p&gt;
&lt;h2 id=&#34;四提交签证申请&#34;&gt;四、提交签证申请&lt;/h2&gt;
&lt;p&gt;我们也是全程DIY，这里需要的材料，基本上职业评估过程都有。&lt;/p&gt;
&lt;p&gt;1、出生公证：主申请人和副申请人都需要，小孩需要出生医学证明的公证；&lt;/p&gt;
&lt;p&gt;2、结婚证、无犯罪、也需要公证，其他应该就不需要公证了；&lt;/p&gt;
&lt;p&gt;3、建议核心材料做certified，比如推荐信、工作证明、税单和社保、工资单等，当然不一定要做，因为签证申请指南并没有要求，但是移民官还是会选择背调的。我们现在的还在等待中，也做好可能背调的准备。&lt;/p&gt;
&lt;p&gt;4、下签后的第一次登陆时限（也就是大家常说的短登）,由你的无犯罪证明和体检报告过期时间来决定，取其中一个最先到期的时间为时限。所以如果你希望晚点短登，可以co联系的时候在提供这两个材料。但是要注意：co联系提交的材料，必须28天内提交材料，否则deny你的case，所以如果有海外无犯罪证明的，最好提前准备，比如美国的好像说要3个月才拿到&amp;hellip;&lt;/p&gt;
&lt;p&gt;5、关于190签证：短登之后，可以在签证还剩余两年及以上的时候登录所在州，然后待满两年后申请新的RRV签证（155）。&lt;/p&gt;
&lt;h2 id=&#34;五总结&#34;&gt;五、总结&lt;/h2&gt;
&lt;p&gt;我们经历过2018年涨分的疯狂，也见识过2019年489的火爆，看到过群里各种各样的移友的焦虑和努力（包括我自己），由于这几年国内大环境及国际移民环境的变化，深感移民（特别是美澳）真的越来越难，一步到位的移民会更加艰难。今年初去澳新旅行，对墨尔本的印象真的很不错，又能拿到vic的邀请，内心激动也非常感谢州政府。 现在签证还在等待审理中，希望一切顺利。&lt;/p&gt;</description>
    </item>
    <item>
      <title>小咕噜熊系列：过生日的故事</title>
      <link>https://dodoro.chouxiangpai.com/archives/825/</link>
      <pubDate>Wed, 20 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/825/</guid>
      <description>&lt;h2 id=&#34;小咕噜熊过生日的故事&#34;&gt;小咕噜熊过生日的故事&lt;/h2&gt;
&lt;p&gt;小咕噜熊马上就要过三岁生日了，她特别期待自己的生日，因为过生日的时候爸爸妈妈会给她准备神秘的小礼物，还会带她去游乐场，并且妈妈会给她做美味的蛋糕，小咕噜熊特别喜欢吃妈妈做的蛋糕。&lt;/p&gt;
&lt;p&gt;小咕噜熊终于等到了生日那天，上午爸爸妈妈带她去巧虎欢乐岛，小咕噜熊在巧虎欢乐岛玩得非常开心，她学会了玩超级大滑梯，这是她第一次在海洋球里玩那么长的滑梯！刚开始的时候，小咕噜熊说：我不敢自己玩，爸爸要陪我。爸爸陪她玩几次之后，她开始自己玩了，玩得非常棒。准备离开欢乐岛的时候，小咕噜熊还看了巧虎品格剧，她很喜欢巧虎，她和巧虎一起唱歌、跳舞，巧虎还过来抱她了。&lt;/p&gt;
&lt;p&gt;下午回来后，爸爸妈妈给她拿出了一个礼物，原来是地球仪，小咕噜熊在地球仪上找到了中国、澳大利亚和新西兰，她很喜欢自己的礼物。妈妈拿出了一个非常精美的蛋糕，爸爸在上面点了三根蜡烛，爸爸妈妈给小咕噜熊唱生日快乐歌，小咕噜熊许了一个愿望，然后吹灭了蜡烛。&lt;/p&gt;
&lt;p&gt;她开始切蛋糕了，第一块给妈妈吃，第二块给爸爸吃，第三块她自己吃。吃完了一块，小咕噜熊指着蛋糕说：爸爸我还要吃一块。又吃完一块，小咕噜熊指着蛋糕说：爸爸。爸爸又给她一块，不过爸爸说这是最后一块。小咕噜熊一共吃了三块蛋糕&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们提交了澳洲190签证申请</title>
      <link>https://dodoro.chouxiangpai.com/archives/826/</link>
      <pubDate>Fri, 15 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/826/</guid>
      <description>&lt;p&gt;今天下午两点多，我们提交了澳洲190签证申请，获邀之后积极准备相关材料，昨天最后一份文件《无犯罪记录证明》收到了，今天上传完毕，终于提交签证申请了。&lt;/p&gt;
&lt;p&gt;看群里和网上说最近签证下签很快，希望到我们的时候也能顺顺利利。万里长征还差最后一步，我还是不能放松，等分co后积极做好准备。&lt;/p&gt;
&lt;p&gt;这几天和家人认真思考了全家人的未来，还是决定申请签证。&lt;/p&gt;</description>
    </item>
    <item>
      <title>小咕噜熊系列：睡觉的故事</title>
      <link>https://dodoro.chouxiangpai.com/archives/822/</link>
      <pubDate>Thu, 14 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/822/</guid>
      <description>&lt;h2 id=&#34;小咕噜熊睡觉的故事&#34;&gt;小咕噜熊睡觉的故事&lt;/h2&gt;
&lt;p&gt;小咕噜熊是一个非常乖的宝宝，她最近半年多来晚上都是自己睡觉。有一天，小咕噜熊对爸爸说：今晚我想跟爸爸妈妈睡。爸爸说：那好吧，可是如果你不好好睡就要过来自己睡噢。&lt;/p&gt;
&lt;p&gt;晚上的时候小咕噜熊非常开心地躺下来睡觉，她一下子就睡着了，刚开始的时候她睡得特别地棒。可是，半夜的时候，小咕噜熊开始滚来滚去，她的左手打到了妈妈的脸蛋，右手打到了爸爸的眼睛，她的左脚提到妈妈的肚子，右脚提到爸爸的屁股，一下子把爸爸妈妈都吵醒了。爸爸对小咕噜熊说：你看小咕噜熊和爸爸妈妈睡的时候总是翻来滚去，最后全家人都睡不好。小咕噜熊说：那爸爸陪我会自己的房间睡觉。&lt;/p&gt;
&lt;p&gt;爸爸陪着小咕噜熊回到了自己的房间，爸爸给她讲了三个故事，唱了三首歌，然后就和小咕噜熊晚安，小咕噜熊抱着自己的小兔子，闭上眼睛，一下子就睡着了，她一觉睡到了天亮。&lt;/p&gt;</description>
    </item>
    <item>
      <title>小咕噜熊系列：吃饭的故事</title>
      <link>https://dodoro.chouxiangpai.com/archives/819/</link>
      <pubDate>Tue, 12 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/819/</guid>
      <description>&lt;h2 id=&#34;小咕噜熊吃饭的故事&#34;&gt;小咕噜熊吃饭的故事&lt;/h2&gt;
&lt;p&gt;小咕噜熊正在玩它的乐高积木，妈妈对她说：小咕噜熊过来吃饭啦。小咕噜熊很不情愿地走过来吃饭，今天她吃得一点都不认真，刚刚吃一会儿她就说：我吃饱了。妈妈一看，小咕噜熊弄得围兜里面全是菜，地板上全是米饭，妈妈很严肃地对小咕噜熊说：吃饭的时候要认真，细嚼慢咽，而且要珍惜粮食，不能浪费，你要知道世界上还有其他很多小宝宝都不能吃饱饭。&lt;/p&gt;
&lt;p&gt;第二天小咕噜熊又准备吃饭了，妈妈今天给她煮了一盘西兰花，一条鱼。小咕噜熊今天吃得很认真，她一口饭一口菜，嚼绵绵地吞下去，一口鱼一块饭，嚼绵绵地吞下去，慢慢地，她吃饱了。妈妈过来一看，哇！小咕噜熊今天吃饭很棒，一定都没有浪费！&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]八十年代，你会怀念，你会泪流满面</title>
      <link>https://dodoro.chouxiangpai.com/archives/797/</link>
      <pubDate>Tue, 05 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/797/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;images/1000.jpg&#34;&gt;&lt;img alt=&#34;1000&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/797/images/1000-300x200.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;八十年代，那是一个烟火与诗情迸发的年代，是一个开放包容，充满情怀的年代，一个思想自油百花争艳的年代。&lt;/p&gt;
&lt;p&gt;如果用三个词来形容八十年代，这三个比较合适：年轻、真诚、单纯。&lt;/p&gt;
&lt;p&gt;八十年代的激情、浪漫、理想主义，成为知识分子及普众心中的乌托邦。&lt;/p&gt;
&lt;p&gt;八十年代，犹如朱自清先生在三十年代写下的《春》：&lt;/p&gt;
&lt;p&gt;盼望着，盼望着，东风来了，春天的脚步近了。&lt;/p&gt;
&lt;p&gt;一切都像刚睡醒的样子，欣欣然张开了眼。山朗润起来了，水涨起来了，太阳的脸红起来了。&lt;/p&gt;
&lt;p&gt;春天像刚落地的娃娃，从头到脚都是新的，它生长着。&lt;/p&gt;
&lt;p&gt;春天像小姑娘，花枝招展的，笑着，走着。&lt;/p&gt;
&lt;p&gt;那时的生活是慢的，人们的要求是简单的，笑容是真实的，爱情是美好的。&lt;/p&gt;
&lt;p&gt;那是一个许下诺言就会铭记一生的年代，那是我们永远都回不去的岁月深处。&lt;/p&gt;
&lt;h2 id=&#34;1-文学&#34;&gt;1 文学&lt;/h2&gt;
&lt;p&gt;二十世纪八十年代是以文化精英作为主要驱动力的年代，在那个时代文化精英作为受过高等教育、眼界比较开阔的一批人，一方面将很多国外的哲学思想、文化思潮、文学写作方式引领进来，另一方面也是从中国漫长历史中寻找可以与外国抗衡的写作资源、寻找自己文化历史的再叙述。所以毫无疑问八十年代是文化界起到领头羊的作用，文化精英则是文化界中的领头羊。&lt;/p&gt;
&lt;p&gt;八十年代，对于文学创作而言是不可复制的美好时代，在开放包容的大潮中，涌现了一大批作家、诗人和学者。&lt;/p&gt;
&lt;p&gt;那是一个有真正文学的时代。&lt;/p&gt;
&lt;p&gt;八十年代的文学显示了眼花缭乱的风格。尽管如此，许多批评家还是共同认为，启蒙主题是八十年代文学的切入点。无论是朦胧诗、“伤痕文学”还是再现改革开放带来的种种戏剧性情节，包含了打破传统的神话与解放思想的冲击。“文明与愚昧的冲突”成为八十年代文学的一个众所周知的概括。有趣的是，八十年代文学想象的主体包含了多种性质迥异的理论资源。尽管这些理论资源谱系各异，甚至彼此冲突，但是八十年代文学一律照单全收，无疑是长期封闭形成的文化饥渴强烈所致。&lt;/p&gt;
&lt;p&gt;从伤痕文学、反思文学到改革文学，涌现了王蒙、张贤亮、路遥、刘心武、贾平凹、张承志、谌容、丛维熙、余华、苏童、方方、陆文夫、韩少功、冯骥才、储福金、王安忆、张抗抗、史铁生，等等一大批著名作家，既有反思过去，思索当下，还有展望未来，可谓朗朗星空，星斗灿烂，熠熠生辉，令人惊叹。&lt;/p&gt;
&lt;h2 id=&#34;2-诗歌&#34;&gt;2 诗歌&lt;/h2&gt;
&lt;p&gt;八十年代，那是一个有充满感性情怀和理性批判的诗歌年代。&lt;/p&gt;
&lt;p&gt;在万物复苏大地回春之际，面对充满希望的明天，那些沉寂的诗人开始思考人生和憧憬理想。&lt;/p&gt;
&lt;p&gt;诗人的梦都在八十年代，关于理想，关于爱情，还有读诗的时候，身边妩媚的眼神。在九十年代物质化没有到来之前，一壶烧酒可以结识一辈子的朋友。&lt;/p&gt;
&lt;p&gt;北岛的冷峻《回答》：卑鄙是卑鄙者的通行证，高尚是高尚者的墓志铭。看吧，在镀金的天空中，飘满了死者弯曲的倒影。&lt;/p&gt;
&lt;p&gt;舒婷的丰富细腻和清纯明净《致橡树》：我必须是你近旁的一株木棉，做为树的形象和你站在一起。根，紧握在地下,叶，相触在云里。&lt;/p&gt;
&lt;p&gt;顾城的矛盾和希望《一代人》：黑暗给了我黑色的眼睛，但我却采用他寻找光明。&lt;/p&gt;
&lt;p&gt;芒克的纯粹真实《天空》：太阳升起来，天空血淋淋的，犹如一块盾牌。日子像囚徒一样被放逐，没有人来问我，没有人宽恕我。&lt;/p&gt;
&lt;p&gt;海子的浪漫和灵性《面朝大海，春暖花开》：从明天起，做一个幸福的人，喂马、劈柴，周游世界；从明天起，关心粮食和蔬菜，我有一所房子，面朝大海，春暖花开。&lt;/p&gt;
&lt;p&gt;随着物质化时代的到来，诗人们的理想国被世俗横流淹没。&lt;/p&gt;
&lt;p&gt;北岛在《波兰来客》感叹：&lt;/p&gt;
&lt;p&gt;那时我们有梦，关于文学，关于爱情，关于穿越世界的旅行。&lt;/p&gt;
&lt;p&gt;如今我们深夜饮酒，杯子碰到一起，都是梦破碎的声音。&lt;/p&gt;
&lt;p&gt;海子的理想幻灭，卧轨自杀；顾城的天空塌陷，与爱人自尽；芒克干起了画画的营生&amp;hellip;.&lt;/p&gt;
&lt;p&gt;诗人已经远走，诗歌已经死亡。&lt;/p&gt;
&lt;p&gt;后来，是一个浮躁与喧嚣的时代，一个光怪陆离的时代。&lt;/p&gt;
&lt;h2 id=&#34;3-小说&#34;&gt;3 小说&lt;/h2&gt;
&lt;p&gt;八十时代，人们挣脱枷锁百废待兴，对外张开怀抱，拥抱一切新鲜的空气和阳光。&lt;/p&gt;
&lt;p&gt;那个时代既有佳丽柔情万种的爱情故事，也有侠客仗剑天涯干气云霄的江湖传说。&lt;/p&gt;
&lt;p&gt;有琼瑶亦舒的爱情演义，三毛的流浪情节，有金庸梁羽生古龙三剑客纵横江湖的侠肝义胆快意恩仇。&lt;/p&gt;
&lt;p&gt;琼瑶的白纱裙随风摇曳，笔下花前月下你侬我侬、海枯石烂永不变心的爱情，曾让人如痴如醉，人们在现实世界寻找着纯情故事里的浪漫情节。&lt;/p&gt;
&lt;p&gt;琼瑶很多小说都被拍成了观众热捧的电视剧，剧中演员多是帅哥美女，如秦汉林青霞。&lt;/p&gt;
&lt;p&gt;而且剧中很多主题曲传唱很广，成为经典。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/1000-1.jpg&#34;&gt;&lt;img alt=&#34;1000 (1)&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/797/images/1000-1-300x204.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;亦舒的开司米毛衣，总是那么独立小资，笔下男女在故事里海誓山盟荡气回肠，却又无可奈何。&lt;/p&gt;
&lt;p&gt;三毛穿着大朵碎花的长裙站在沙漠的风沙里，黑发飞扬，带着吉普赛女人般的流浪气息在四海为家里寻找爱情的归依。与大胡子荷西的那段漫长生死恋，曾令多少在爱中百转千回的人唏嘘不已，也曾唤醒多少人梦中的花开花落和诗与远方。&lt;/p&gt;
&lt;p&gt;《橄榄树》也许正是她的文字和传奇一生的写照。&lt;/p&gt;
&lt;p&gt;相比柔情似水的爱情故事，一代大侠金庸先生飞雪连天射白鹿，笑书神侠倚碧鸳，为我们留下有了另一个江湖。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/1000-2.jpg&#34;&gt;&lt;img alt=&#34;1000 (2)&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/797/images/1000-2-300x207.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;有人说，凡有华人的地方，就有金庸的武侠小说。&lt;/p&gt;
&lt;p&gt;金庸的作品，写透了人生，那些故事人物，某种意义上成为了我们最朴素的正义观、爱情观。许多中国人最朴素的侠义观，来自于金庸。&lt;/p&gt;
&lt;p&gt;他的作品能给整个华人世界的读者带来了独一无二的生命体验。金庸的武侠不止是英雄侠客梦，也是人间种种况味。&lt;/p&gt;
&lt;p&gt;有人曾问金庸：“人生应如何度过？”金庸答：“大闹一场，悄然离去。”&lt;/p&gt;
&lt;p&gt;金庸自己说：大侠我不敢当，但我喜欢那些英雄。英雄代表了人间的正气和担当。&lt;/p&gt;
&lt;h2 id=&#34;4-影视&#34;&gt;4 影视&lt;/h2&gt;
&lt;p&gt;八十年代，影视剧同样泛着理想与人性的光芒。&lt;/p&gt;
&lt;p&gt;电视剧《上海滩》以快意情仇的江湖复仇故事打动观众，造就了万人空巷的轰动效应。香港无线电视举办“八十年代十大电视剧集”评选，《上海滩》名列第一位，当之无愧成为那个时代的经典。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/1000-3.jpg&#34;&gt;&lt;img alt=&#34;1000 (3)&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/797/images/1000-3-300x204.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;由周润发和赵雅芝扮演的主要人物许文强和冯程程更是成为一个时代的标志。黑帽、风衣、白手套的经典“许文强”造型以及梳着两个麻花辫的“冯程程”发型更是成为观众对于那个纯真年代的集体回忆。赵雅芝塑造的冯程程，少女娇羞中带着俏皮，敢爱敢恨，清纯如水，坚强善良，演出了大家闺秀的魅力。周润发传神的表演使得许文强的悲剧气质和悲剧结局激发了观众的同情。演员们的敬业，一颦一蹙，一回眸，一低首，百转千回皆是戏；一个动作一个眼神，都能演绎出余音绕梁之味。&lt;/p&gt;
&lt;p&gt;叶丽仪演唱的那首回肠荡气的主题歌，更使得《上海滩》成为以剧情和表演取胜的典范之作。&lt;/p&gt;
&lt;p&gt;电视剧1987版《红楼梦》得到了大众的一致好评，被誉为“中国电视史上的绝妙篇章”和“不可逾越的经典”。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/1000-4.jpg&#34;&gt;&lt;img alt=&#34;1000 (4)&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/797/images/1000-4-300x140.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;导演心无旁骛、潜心创作；演员形神兼备，过目难忘；歌曲浑然天成，哀怨动人；色调明快亮丽，赏心悦目；造型博采众长，深入人心；经典无须争辩，历久弥新。&lt;/p&gt;
&lt;p&gt;1987版《红楼梦》电视剧，在王扶林导演团队的精心合作下，完美地再现了这部鸿篇巨著，让普通人一睹其芳华。他们对艺术的兢兢业业和精益求精，让这部华丽名著锦上添花。陈晓旭、欧阳奋强、邓婕等演员精湛投入的表演，至今无人超越。&lt;/p&gt;
&lt;p&gt;1987版《红楼梦》的音乐更被认为无法超越，由具有深厚传统文化底蕴的大家王立平先生作曲，歌手陈力传神演唱的很多歌曲，成为经典。&lt;/p&gt;</description>
    </item>
    <item>
      <title>小咕噜熊系列：打针的故事</title>
      <link>https://dodoro.chouxiangpai.com/archives/794/</link>
      <pubDate>Mon, 04 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/794/</guid>
      <description>&lt;h2 id=&#34;小咕噜熊打针的故事&#34;&gt;小咕噜熊打针的故事&lt;/h2&gt;
&lt;p&gt;小咕噜熊已经快三岁了，有一天爸爸对它说：我们明天去打针、体检，小咕噜熊回答：我不想打针！爸爸告诉它：别的小朋友也去打针，是打预防针，只有打完针才可以去上幼儿园；小咕噜熊听完之后说：那好吧，我们只打一次针。&lt;/p&gt;
&lt;p&gt;爸爸开车带小咕噜熊来到卫生院，它们停好车，进入卫生院，一打开门：哇，里面有一大堆小宝宝，而且它们都在哭，哭得一大糊涂。小咕噜熊问：为什么小宝宝们会哭？爸爸回答：因为它们刚刚打完针，它们觉得痛。小咕噜熊看了看爸爸说：那我们先去体检吧。&lt;/p&gt;
&lt;p&gt;爸爸带着小咕噜熊来到了二楼体检，医生和小咕噜熊打招呼：你叫什么名字啊？小咕噜熊说：我叫小咕噜熊。医生：那你今年几岁了？小咕噜熊：我今年三岁了。医生又说：那你可以给阿姨画一个圈吗？小咕噜熊一下子就画了三个圈。医生继续说：那你可以蹦一下吗？小咕噜熊连续蹦了五次。医生微笑地对小咕噜熊说：小朋友很棒，你可以跟爸爸到楼下打针了。&lt;/p&gt;
&lt;p&gt;小咕噜熊和爸爸来到了楼下排队打针，小咕噜熊发现旁边有个小姐姐坐在她妈妈的膝盖上哭，它问爸爸：为什么这个小姐姐会哭？爸爸回答：因为她害怕打针。小咕噜熊说她不怕打针。“请三十五号小咕噜熊到三号接种室接种”。爸爸带小咕噜熊进去打针，小咕噜熊一下子就打完针了，而且她不哭。爸爸和医生都表扬说：小咕噜熊真棒！&lt;/p&gt;</description>
    </item>
    <item>
      <title>小咕噜熊系列：坐两趟飞机的故事</title>
      <link>https://dodoro.chouxiangpai.com/archives/791/</link>
      <pubDate>Thu, 31 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/791/</guid>
      <description>&lt;h2 id=&#34;小咕噜熊坐两趟飞机的故事&#34;&gt;小咕噜熊坐两趟飞机的故事&lt;/h2&gt;
&lt;p&gt;今天是星期五，小咕噜熊早上起来，她发现爸爸在家，她问：爸爸为什么你今天不去上班呢？爸爸说：因为爸爸今天休假，今天我们要做飞机去澳大利亚和新西兰旅行。&lt;/p&gt;
&lt;p&gt;小咕噜熊和爸爸妈妈吃完午饭，坐着小汽车来到了首都国际机场。首都国际机场有各种各样的大飞机和小飞机，小咕噜熊看见了A320，这是小型飞机，看见了A350，这是中型飞机，还看见了A380，这是大型飞机。爸爸告诉小咕噜熊，A380是目前世界上最大的飞机之一，也是非常棒的飞机，小咕噜熊说：那我想做这个A380大飞机。&lt;/p&gt;
&lt;p&gt;小咕噜熊和爸爸妈妈坐上了A380，这趟飞机先飞到新加坡，然后再飞到墨尔本，要做两趟飞机。在飞机上，空姐阿姨给小咕噜熊送了一个特别可爱的“小熊电话”，不过过了几天就变成“小脏电话”了——因为小咕噜熊总是把它弄掉在地上。&lt;/p&gt;
&lt;p&gt;飞机起飞了，飞机穿了了中国的大江南北，飞机穿过了黄河、长江和南海，穿过了菲利宾和马来西亚，来到了新加坡樟宜机场。新加坡机场是世界上最棒的机场之一，小咕噜熊和爸爸妈妈都非常喜欢新加坡机场，他们在新加坡机场休息了一晚上，第二天早上他们继续做第二趟飞机。&lt;/p&gt;
&lt;p&gt;早上，爸爸拉着小咕噜熊的手去坐飞机，妈妈看了一下航班信息——飞往墨尔本的飞机舱门正在关闭！爸爸赶紧抱起小咕噜熊，快速往前跑，小咕噜熊问：爸爸你为什么要跑啊？爸爸说：因为我们要抓紧时间，不然就赶不上飞机啦！幸亏，小咕噜熊和爸爸妈妈正好坐上了飞机，在飞机上小咕噜熊看见了各种肤色的人，有黄种人、黑种人、白种人。她还遇到了一个澳大利亚的老爷爷，他给小咕噜熊送了一只特别可爱的小考拉，小咕噜熊对老爷爷说了声谢谢！&lt;/p&gt;
&lt;p&gt;飞机起飞了，飞机穿过了南太平洋，非常穿过了帕斯、阿德莱德，来到了墨尔本机场，小咕噜熊和爸爸妈妈在墨尔本机场坐上了双层大巴士，来到了墨尔本的CBD。&lt;/p&gt;</description>
    </item>
    <item>
      <title>讲给女儿的故事</title>
      <link>https://dodoro.chouxiangpai.com/archives/781/</link>
      <pubDate>Wed, 30 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/781/</guid>
      <description>&lt;h2 id=&#34;小企鹅从出生到长大的故事&#34;&gt;小企鹅从出生到长大的故事&lt;/h2&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;在地球上生活着各种各样非常可爱的小企鹅，其中有些企鹅喜欢生活中温暖的地方，比如跳岩企鹅就喜欢生活在非常温暖的马达加斯加和澳大利亚。但是有些企鹅喜欢生活在寒冷的地方，比如帝企鹅就喜欢生活中非常寒冷的南极，南极有零下40度，北极才零下30度，墨尔本是零上20度。&lt;/p&gt;
&lt;p&gt;在南极圈，生活着一大群帝企鹅，他们看起来毛茸茸的，胖乎乎的，他们的皮肤下面有一层厚厚的脂肪，可以在寒冷的南极抵御寒冷。每当冬天来临的时候，帝企鹅的爸爸妈妈就在南极圈生下帝企鹅蛋，这个蛋由爸爸来保管，帝企鹅爸爸把蛋小心地装进温暖的口袋窝里，他要好好保护好企鹅蛋，因为在寒冷的南极，如果企鹅蛋暴露在外面，就会被冻成冰块，孵不出帝企鹅宝宝了，帝企鹅的妈妈则要长途跋涉到很遥远的海边去抓鱼。&lt;/p&gt;
&lt;p&gt;慢慢地，冬天过去了，春天要来了，太阳重新回到了南极，有一只帝企鹅宝宝也出生了。这只帝企鹅宝宝一出生就唧唧喳喳地叫“爸爸爸爸”、“妈妈呢妈妈呢”、“肚子饿肚子饿”，帝企鹅爸爸对它说：你的妈妈去海边抓鱼，过几天就回来啦。第二天，帝企鹅妈妈回来了，还带回来很多食物，有大鱼和小鱼，刚开始的时候，帝企鹅宝宝只能吃小的鱼，慢慢地它可以吃更大的鱼了。吃饱喝足的帝企鹅宝宝开始在南极的冰原上玩耍、游戏，过着无忧无路的生活，它有时候会趴在冰上面溜起来，像玩滑滑梯一样，一下子可以滑行500米。&lt;/p&gt;
&lt;p&gt;日子一天天过去，帝企鹅妈妈带回来的鱼准备吃完了，帝企鹅宝宝也变得强壮了。有一天，帝企鹅的爸爸妈妈对它说：我们要到海边去生活了，还要去抓鱼。帝企鹅宝宝非常地激动，它非常期待和爸爸妈妈到海边去抓鱼。它们一家人来到了海边，帝企鹅宝宝开始和爸爸妈妈学习新本领：游泳、跳水、抓鱼，它看见爸爸跳起来，头先钻进海水，一点水花都没有，它也跳起来，扑通一声，它一屁股坐到了海水上面，很滑稽的样子。&lt;/p&gt;
&lt;p&gt;帝企鹅宝宝在海水里面游来游去，很努力地抓鱼，终于它抓到了一个东西，拿起来一看，啊，居然是一棵水藻！它又钻进海水抓来抓去，终于，它抓到了一条小鱼，第一条鱼它送给妈妈吃，第二鱼它送给爸爸吃，第三条鱼它自己吃，它吃完说：自己抓到的鱼真是太美味了！就这样，帝企鹅宝宝和爸爸妈妈学习抓鱼，它学到的本领越来越多，抓到的鱼也越来越大，它自己也慢慢地长成了一只大企鹅。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们拿到了VIC的190 Visa邀请</title>
      <link>https://dodoro.chouxiangpai.com/archives/776/</link>
      <pubDate>Wed, 16 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/776/</guid>
      <description>&lt;p&gt;今天上午刚上班就收到VIC移民部门打来的电话，当时第一反应是要进行背调，然后自己非常认真地听每一个问题，而且都很顺利地回答了（之前nz的英文面试自己增加了不少经验）。&lt;/p&gt;
&lt;p&gt;挂完电话，感觉好像是在确认信息，我给老婆打电话说可能要发邀请了，回到座位，马上收到VIC的邀请成功邮件！！！！！！！&lt;/p&gt;
&lt;p&gt;真的太兴奋了！太开心了！太幸运了！太感激了！感恩墨尔本和维州政府，这是最好的生日礼物，for my wife and me！&lt;/p&gt;
&lt;p&gt;希望后续的Visa申请一切顺利，我们也一定会履行在墨尔本居住两年的承诺，而且我确实很喜欢墨尔本！&lt;/p&gt;</description>
    </item>
    <item>
      <title>看完Orchard Core的一些随感</title>
      <link>https://dodoro.chouxiangpai.com/archives/773/</link>
      <pubDate>Tue, 15 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/773/</guid>
      <description>&lt;p&gt;这个项目的框架是微软顶级工程师的杰作，太牛了，终于理解为什么各类开发IDE都是海外工程师写出来了，框架设计优美、代码精炼、扩展性超强、考虑全面。ps：国内IT软件方面至少落后欧美10年(那些把开源改改就说国产世界第一就别拿来丢脸了)，得益于开源和github，我们才有机会保持这个差距。&lt;/p&gt;
&lt;p&gt;国内对C#和.NET总是有一些误解。比如.NET Core，海外已经用得如火如荼了，社区非常活跃，并且各种新的开发理念和工具极大提高效率。我在BAT写过代码，说实话他们的软件架构理念都是实用为主，并没有从工程学角度去发展，所以只适合特点场景，但是他们垄断中国码农的话语权，导致后来者c#大都被误解。这无形中导致国内软件开发起码落后海外10年。举一个最简单例子，现在大公司也有devops，但是放到中小型公司，他们很难运用bat的这套东西，而阿里云对devops支持太差了，反观aws和azure几乎是完美支持，这里面有国情原因，也有c#被误解的原因。&lt;/p&gt;
&lt;p&gt;我可以毫无客气地说：国内对.net的误解，其实就是落后又自大的一个缩影。看看现在华为、国产软件时不时世界第一的“亩产万金”的论断。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]C#语言历史版本特性(C# 1.0到C# 8.0汇总)</title>
      <link>https://dodoro.chouxiangpai.com/archives/758/</link>
      <pubDate>Thu, 10 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/758/</guid>
      <description>&lt;h2 id=&#34;历史版本&#34;&gt;历史版本&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;C#作为微软2000年以后.NET平台开发的当家语言，发展至今具有17年的历史，语言本身具有丰富的特性，微软对其更新支持也十分支持。微软将C#提交给标准组织ECMA，C# 5.0目前是ECMA发布的最新规范，C# 6.0还是草案阶段，C# 7.1是微软当前提供的最新规范。&lt;/p&gt;
&lt;p&gt;这里仅仅列个提纲，由于C# 5.0是具有ECMA标准规范的版本，所以选择C# 5.0作为主要版本学习，并专题学习C# 6.0,7.0版本新特性。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;C#语言规范GitHub库参见：&lt;a href=&#34;https://github.com/dotnet/csharplang&#34;&gt;https://github.com/dotnet/csharplang&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;C#语言路线图及开发中的特性参见： &lt;a href=&#34;https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md&#34;&gt;https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style=&#34;text-align: left&#34;&gt;语言版本&lt;/th&gt;
					&lt;th style=&#34;text-align: left&#34;&gt;发布时间&lt;/th&gt;
					&lt;th style=&#34;text-align: left&#34;&gt;.NET Framework要求&lt;/th&gt;
					&lt;th style=&#34;text-align: left&#34;&gt;Visual Studio版本&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;C# 1.0&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;2002.1&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;.NET Framework 1.0&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;Visual Studio .NET 2002&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;C# 1.1\1.2&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;2003.4&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;.NET Framework 1.1&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;Visual Studio .NET 2003&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;C# 2.0&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;2005.11&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;.NET Framework 2.0&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;Visual Studio 2005&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;C# 3.0&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;2007.11&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;.NET Framework 2.0\3.0\3.5&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;Visual Studio 2008&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;C# 4.0&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;2010.4&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;.NET Framework 4.0&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;Visual Studio 2010&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;C# 5.0&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;2012.8&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;.NET Framework 4.5&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;Visual Studio 2012\2013&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;C# 6.0&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;2015.7&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;.NET Framework 4.6&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;Visual Studio 2015&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;C# 7.0&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;2017.3&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;.NET Framework 4.6.2&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;Visual Studio 2017&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;C# 7.1&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;2017.6&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;.NET Framework&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;Visual Studio 2017 v15.3预览版&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;C# 8.0&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;待发布&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;.NET Framework 4.7.1&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;Visual Studio 2017 v15.7&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;c-10-特性&#34;&gt;C# 1.0 特性&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;第1个版本，编程语言最基础的特性。&lt;/p&gt;</description>
    </item>
    <item>
      <title>讲给女儿的故事</title>
      <link>https://dodoro.chouxiangpai.com/archives/753/</link>
      <pubDate>Tue, 08 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/753/</guid>
      <description>&lt;p&gt;大熊猫历险记&lt;/p&gt;
&lt;p&gt;在中国，有一片非常壮丽的森林；在这片森林里，有一片非常美丽的竹林；在这片竹林里，有一群非常可爱的大熊猫。其中有一只非常可爱的大熊猫，它和它的爸爸妈妈住在竹林的西边，这只大熊猫跟它的爸爸妈妈在竹林里生活、玩耍和吃竹子，它最喜欢吃竹子。&lt;/p&gt;
&lt;p&gt;就这样，这只大熊猫一天天长大。有一天它对它的爸爸妈妈说：爸爸妈妈，我打算出去探险，我要到山的那一边去参加篝火舞会。它的爸爸妈妈说：喔～我们的孩子已经长大了，打算自己出去探险了，那你要记住在路上可能会遇到很多困难，你自己要想办法克服困难，而且你还可能遇到很多其他动物，如果它们和你一起分享、互相帮助的话，你们可以成为好朋友。大熊猫说：我知道了，爸爸妈妈。&lt;/p&gt;
&lt;p&gt;第二天一大早，大熊猫就出发了，它穿过了竹林，来到了一片无花果林。这片无花果林里，它遇到了一只非常有礼貌的小猴子。小猴子问大熊猫：请问你要去哪里呢？大熊猫说：我要出去冒险，我要到山的那一边去参加篝火舞会。小猴子说：听起来真棒，请问我可以和你一起去吗？大熊猫说：当然可以啦，我们可以做好朋友。于是，大熊猫和小猴子一起出发，它们穿过了一片小草地，来到了一条河边，可是这条河太宽了，它们都没法游过去。小猴子说：看来我们没法参加篝火舞会了。大熊猫说：没关系，我们一起想想办法。于是两个小伙伴开始想办法了，突然，小猴子说：有了，我们可以把那边的木头做成独木舟，然后划到对岸去。大熊猫说：这个主意真棒！我的力气比较大，我去搬木头。大熊猫把木头搬过来，它和小猴子做成了独木舟，一起划到了对岸了。&lt;/p&gt;
&lt;p&gt;大熊猫和小猴子来到了一片小草原，它们遇到了一只特别可爱的小鹿。小鹿问它们：请问你们要去哪里呢？大熊猫说：我们要到山的那一边去参加篝火舞会。小鹿说：哇，这个主意真棒，我很久以前就听说这个篝火舞会了，请问我可以跟你们一起去吗？大熊猫和小猴子一起说：当然可以啦，我们可以做好朋友一起去。于是，三个好朋友就一起出发了。它们穿过了小草原，来到一座山下，这座山非常地陡峭。小鹿说：我觉得我爬不过这座高山，看来没法参加篝火舞会了。大熊猫说：别担心，我们可以一起想办法。这时候小猴子说：我想到了一个好主意（又是聪明的小猴子想到了好主意），我们可以把旁边的树藤做成绳子，爬上去，然后把小鹿一起拉上来。经过一番努力，三个小伙伴都爬上了这座山。&lt;/p&gt;
&lt;p&gt;大熊猫、小猴子和小鹿翻过了山，就看见一片非常壮丽的草原，在草原的中间就是举办篝火舞会的地方了，很多小动物都来了，小长颈鹿、小狮子、小老虎、小斑马、小河马都来了。篝火舞会还准备了非常美味的点心和水果。大家先吃完点心和水果，然后一起唱唱跳跳、唱唱跳跳，一只到了下午。这时候大熊猫说：我觉得我们要回去了，我们要在天黑之前，回到爸爸妈妈的身边。于是三个小伙伴返程了，它们越过了高山，大熊猫和小猴子就和小鹿拜拜了，然后它们又穿过小河，大熊猫和小猴子拜拜了。最后，大熊猫穿过了竹林，在天黑之前回到了它爸爸妈妈的身边。它对爸爸妈妈说：我今天出去探险了，参加了非常棒的篝火舞会，并且还遇到了两个好朋友，我们克服了很多困难。&lt;/p&gt;</description>
    </item>
    <item>
      <title>讲给女儿的故事</title>
      <link>https://dodoro.chouxiangpai.com/archives/755/</link>
      <pubDate>Tue, 08 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/755/</guid>
      <description>&lt;p&gt;树袋熊小考拉和小袋鼠的故事&lt;/p&gt;
&lt;p&gt;在澳大利亚，有一片非常壮美的森林；在这片森林里，有一片非常美丽的桉树林；在这片桉树林里，生活着一群非常可爱的树袋熊，它们也叫考拉。这些考拉都是以桉树叶为食物，它们长得毛茸茸的、萌萌的，超级可爱，它们总是趴在树上，一动不动的，只有吃桉树叶的时候才挪地一下。其中有一只非常可爱的小考拉，它和它的爸爸妈妈、哥哥姐姐住在最大的一棵桉树上面，它们过着悠闲、慵懒的生活。有一天，小考拉对它的爸爸妈妈说：我要到那边的红果树林去看一看，我想吃红果子。它的爸爸妈妈懒懒地抬起头来，对它说：不行，红果树林太远了，我们考拉家族都是住在桉树林的。&lt;/p&gt;
&lt;p&gt;可是小考拉它打算去试一下，它爬下了树，开始向红果树林出发了。它走得非常地慢，已经快到傍晚了，它才从这个树爬到那个树。小考拉说：原来红果树林看起来很近，走起来那么远啊，按这个速度，等我走到那边，红果子早就掉光了。不过，小考拉没有放弃，它趁着天没有黑先爬到树上，因为晚上的时候树下面很危险，会有其他危险的动物出来。第二天，它有出发了，没走多久，它遇到了一只非常可爱的小袋鼠。小袋鼠问它：你要去哪里呢？小考拉说：我要到那边的红果树林，可是我走得很慢，我觉得等我到那边，红果子早就没有了。小袋鼠说：没关系，我可以带你过去，你可以到我的小口袋里来。小考拉非常地开心，它和小袋鼠成了好朋友。&lt;/p&gt;
&lt;p&gt;小考拉钻进了小袋鼠的口袋，不到一个小时，它们就来到了红果树林。小考拉说：哇，这片红果树林真大，这是我第一次看到红果子，小袋鼠你在树下等我，我爬上去摘红果子，虽然我走得慢，但是我怕树特别厉害。小考拉摘了很多新鲜美味的红果子，又大又圆又红。小袋鼠说：这是我第一次吃到树上新摘下来的红果子，真棒。到下午的时候，它们准备回家了，回去之前，小考拉摘了两份红果子装进小袋鼠的口袋里面。&lt;/p&gt;
&lt;p&gt;小袋鼠和小考拉回到了桉树林，小考拉对它的爸爸妈妈说：我到红果树林去了，还吃了很多红果子。它的爸爸妈妈说：这怎么可能呢？那边那么远。小考拉说：是小袋鼠带我过去的，你们看，我还带回来很多红果子。它的家人一听，都亮眼了，赶紧爬下树，一起吃美味的红果子。一家人都非常感谢小袋鼠，小袋鼠说：我要回家了，我爸爸妈妈也在等我。小考拉说：另外一份红果子是留给你家人的，你带回去吧。小袋鼠和小考拉互相拜拜了，从此以后，它们经常在一起玩耍、摘红果子，它们永远都是好朋友。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一个普通炮兵的传奇经历</title>
      <link>https://dodoro.chouxiangpai.com/archives/742/</link>
      <pubDate>Tue, 01 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/742/</guid>
      <description>&lt;p&gt;今天是国庆70周年，我们决定翻开女儿的妈妈的爷爷的一段封尘的历史，这是一个普遍炮兵的传奇经历。&lt;/p&gt;
&lt;p&gt;爷爷上世纪二十年代生于桂西壮乡武鸣，1944年加入国民革命军46军，并成为美式炮兵营的一名炮兵，同年参加惨烈的桂柳会战，抵抗入侵广西的日军。1947年奉命随部队北上与鲁解放区作战，当时46军军长是地下党员韩练成，2月随部队并入华东野战军（后改编为三野）24军，编入72师炮兵营，先后参加孟良崮战役、豫东战役、济南战役、淮海战役、渡江战役和长山列岛战役。1952年成为志愿军进入朝鲜，协助防御上甘岭，1953年参加抗美援朝战争的最后一次战役金城战役。1954年返回桂西，加入广西军区训练营独立团，后来成为离休干部，直至1999年去世。&lt;/p&gt;
&lt;p&gt;爷爷累积作战10次，负伤1次，他是反法西斯战争的英雄，也是共和国的缔造者。庆祝国庆、缅怀爷爷，我依然相信如墨西哥亡灵节所述，爷爷一直活在我们的心里。PS：愿战争永去、和平永续。&lt;/p&gt;
&lt;p&gt;详细信息如下:&lt;/p&gt;
&lt;p&gt;爷爷应该是1944年左右，被召入国民革命军四十六军，他是炮兵，而且是美式武器的炮兵（国军最精锐的部队，也是桂系最精锐的炮兵部队），同年年参加桂柳会战，也是抵抗日本攻占广西的会战，爷爷这时候应该已经完全掌握美式武器的使用了，此次会战之后一直镇守广西。&lt;/p&gt;
&lt;p&gt;1947年第46军被调去山东战场参加进攻解放区，随部队北上，在山东莱芜一带与粟裕领导的华东野战军作战。当时军长是韩练成，他是解放前安插在国民党里面的地下党员。这场仗基本没怎么打，爷爷应该就随着军长归入华东野战军，作为能操作美式大炮的爷爷，自然而然成为了解放军。&lt;/p&gt;
&lt;p&gt;1947年5月，参加孟良崮战役，歼灭国民党精锐74师。&lt;/p&gt;
&lt;p&gt;1948年7月，参加豫东战役。&lt;/p&gt;
&lt;p&gt;1948年11月，淮海战役，率先抢占运河铁桥，为保证大部队的通过，围歼黄百韬兵团赢得了时间，为表彰这次战斗，新华社专门播发了“运河桥头争夺战，歼灭黄匪立首功”的专稿。&lt;/p&gt;
&lt;p&gt;1949年4月，参加渡江战役，5月参加上海战役。&lt;/p&gt;
&lt;p&gt;1952年，随部队参加抗美援朝战争，总司令是彭德怀，当时军长王必成。1953年参加抗美援朝战争的最后一次战役金城战役。1954年6月，负伤(推测)回国。&lt;/p&gt;
&lt;p&gt;1954年参加广西军区训练团，这个训练团1953年1月组建，始编3个营，后增1个营。1955年9月撤销，其第四营改编为广西军区训练营。1959年1月，改为广西军区训练队，次年3月撤销。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于C#和.NET以及自己未来的一些计划</title>
      <link>https://dodoro.chouxiangpai.com/archives/760/</link>
      <pubDate>Tue, 01 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/760/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20191014143438.png&#34;&gt;&lt;img alt=&#34;微信图片_20191014143438&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/760/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20191014143438-300x158.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这几天把.NETCONF所有的视频都看了一遍，感叹微软的开放力度和对C#及.NET的推进力度。我写过Delphi、VB、C、C++、C#、Object-C、PHP、JAVA、Python，这一路过来总觉得太分散了，很难真正投入到推动一门语言的地步，现在看来，C#是初恋也是最爱，真不能在乱“移情别恋”了。未来最多使用Python进行一些ML（机器学习）涉及的方面的数据工作。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20191014143444.png&#34;&gt;&lt;img alt=&#34;微信图片_20191014143444&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/760/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20191014143444-300x167.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;针对C#和.NET我一定持续关注，而且专注于她，这是工作需要，也是自己的发展需要。&lt;/p&gt;
&lt;p&gt;1、全面梳理C#这门语言，虽然我已经写了12年C#了。&lt;/p&gt;
&lt;p&gt;实际行动：把微软的文档看一遍，把那几本经典的书读完。（2019到2020）&lt;/p&gt;
&lt;p&gt;2、应用.NET Core 3.0及未来版本。&lt;/p&gt;
&lt;p&gt;实际行动：把公司的一个项目做成兼容linux平台。（2019）&lt;/p&gt;
&lt;p&gt;3、研究Orchard Core项目。&lt;/p&gt;
&lt;p&gt;实际行动：把自己的blog都迁移过来。（2019到2020）&lt;/p&gt;
&lt;p&gt;4、研究ABP项目，顺便研究微服务架构和DDD结构。&lt;/p&gt;
&lt;p&gt;实际行动：在公司的一个项目中完成。（2019到2020）&lt;/p&gt;
&lt;p&gt;5、机器学习ML.NET研究和Python&lt;/p&gt;
&lt;p&gt;实际行动：自己建模完成一些数据分析和预测。（2019起步，长期工作）&lt;/p&gt;
&lt;p&gt;6、学习Azure、AWS技术和DevOps&lt;/p&gt;
&lt;p&gt;实际行动：考下AWS证书，并在公司一个项目中完成Azure的DevOps。（2020到2021）&lt;/p&gt;
&lt;p&gt;另外，学习nopCommerce和CSLA .NET两个开源项目的特点，吸收特长；学习Angular和Vue前端框架。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于国家、政府、政党和公民的关系</title>
      <link>https://dodoro.chouxiangpai.com/archives/1477/</link>
      <pubDate>Tue, 01 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1477/</guid>
      <description>&lt;p&gt;**祖国、国家、政府、政党是四个不同的概念，这是一个基本的政治常识，一般有点文化的人都应该能予以区分。**但实际上，不管是有意还是无意，这一课我们就是没有学好，甚至很多高文化的人都没有搞清楚这四个不同的概念，常常把他们混为一谈。如此这般，便会造成我们思维上的混乱，影响我们对社会的分析与判断，还会闹出很多不该出现的笑话。&lt;/p&gt;
&lt;p&gt;祖国、国家、政府、政党之间的关系。&lt;/p&gt;
&lt;p&gt;祖国就好比是一块土地，这是个物理概念，这个地盘永远存在那里，不会消失，这个地方也是我们的祖先一直生活了几百年的地方；&lt;/p&gt;
&lt;p&gt;国家就是这块土地暂时登记在谁的名下，国家是这个地盘最新的所有权人；&lt;/p&gt;
&lt;p&gt;国家是个抽象的概念，这块土地的具体经营管理，还是需要一个总经理来执行，这个总经理即为政党；&lt;/p&gt;
&lt;p&gt;一党制意味着只有一个总经理，多党制则意味着有几个总经理可以竞争上岗。&lt;/p&gt;
&lt;p&gt;更简单一点的理解：国家好比我们居住的小区；政府是小区的物业；政党就是物业公司。&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET Core 3.0 正式公布</title>
      <link>https://dodoro.chouxiangpai.com/archives/768/</link>
      <pubDate>Wed, 25 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/768/</guid>
      <description>&lt;p&gt;根据微软博客的介绍，开发者可以面向 Windows、MacOS 以及 Linux 等系统平台&lt;a href=&#34;https://dotnet.microsoft.com/download/dotnet-core/3.0&#34;&gt;下载 .NET Core 3.0&lt;/a&gt; ：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://dotnet.microsoft.com/download/dotnet-core/3.0&#34;&gt;.NET Core 3.0 SDK 与运行时&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://snapcraft.io/dotnet-sdk&#34;&gt;Snap 安装程序&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hub.docker.com/_/microsoft-dotnet-core&#34;&gt;Docker 镜像&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此外， &lt;a href=&#34;https://devblogs.microsoft.com/aspnet/asp-net-core-and-blazor-updates-in-net-core-3-0/&#34;&gt;ASP .NET Core 3.0&lt;/a&gt;  与  &lt;a href=&#34;https://devblogs.microsoft.com/dotnet/announcing-ef-core-3-0-and-ef-6-3-general-availability/&#34;&gt;EF Core 3.0&lt;/a&gt;  也已经一同发布。 &lt;a href=&#34;https://devblogs.microsoft.com/visualstudio/dot-net-core-support-in-visual-studio-2019-version-16-3/&#34;&gt;Visual Studio 2019 16.3&lt;/a&gt;  与  &lt;a href=&#34;https://devblogs.microsoft.com/visualstudio/visual-studio-2019-for-mac-version-8-3/&#34;&gt;Visual Studio for Mac 8.3&lt;/a&gt;  亦同时发布，且需要更新才能确保 .NET Core 3.0 与 Visual Studio 的协同使用。.NET Core 3.0 为 Visual Studio 2019 16.3 中的组成部分，开发者可以选择直接升级至 Visual Studio 2019 16.3，从而立刻获取 .NET Core。&lt;/p&gt;
&lt;p&gt;感谢所有为 .NET Core 3.0 做出贡献的朋友们！此次最新版本的发布源自数百位团队成员的努力，也包括技术社区的重大贡献。&lt;/p&gt;
&lt;p&gt;发行说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dotnet/core/tree/master/release-notes/3.0&#34;&gt;.NET Core 3.0 发行说明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;.NET Core 2.2 -&amp;gt; 3.0 API 的区别&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dotnet/core/blob/master/release-notes/3.0/3.0.0/3.0.0-contrib.md&#34;&gt;.NET Core 3.0 贡献者名单&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dotnet/core/releases/tag/v3.0.0&#34;&gt;GitHub 发行版&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dotnet/core/issues/3430&#34;&gt;关于 .NET Core 3.0 的 GitHub 问题解答&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;30-版本开发者需要了解什么&#34;&gt;3.0 版本，开发者需要了解什么？&lt;/h2&gt;
&lt;p&gt;在深入探究 .NET Core 3.0 中的全部新功能之前，我们首先需要强调几项关键性的改进与指导内容。以下是整理出的要点清单：&lt;/p&gt;</description>
    </item>
    <item>
      <title>讲给女儿的故事</title>
      <link>https://dodoro.chouxiangpai.com/archives/739/</link>
      <pubDate>Fri, 20 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/739/</guid>
      <description>&lt;h2 id=&#34;丑小鸭的故事&#34;&gt;&lt;strong&gt;“丑小鸭”的故事&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;在一片美丽的草原，有一条弯弯的小河；在小河的旁边，有一座美丽的小村庄；在村子的前面，有一棵高大的榕树；在榕树下面，鸭子妈妈正在孵她的小鸭蛋们。她已经孵了一个多月了，可是这些小家伙们一点动静都没有。又过了几天，终于有一只小鸭蛋有动静了，它摇来摇去，咕咚一声，从里面蹦出了一只黄色的毛茸茸的可爱的小鸭子。又过了几天，几乎所有的小鸭蛋都蹦出了一只又一只黄色的毛茸茸的可爱的小鸭子。可是，有一只最大的鸭蛋，它没有动静，它一动不动的，好像它哥哥姐姐的热闹跟她一点关系都没有。幸亏鸭子妈妈比较有耐心，她继续孵这只鸭蛋，又过了几天，这只鸭蛋终于有动静了，它摇来摇去，咕噜滚到了地上，从里面蹦出了一只黄色的&amp;hellip;不！是一只浅灰色的大鸭子。它长得比它哥哥姐姐们都要大，而且它长得跟它们都不一样，它的哥哥姐姐觉得它长得有点奇怪，所以给它起了个名字叫丑小鸭。&lt;/p&gt;
&lt;p&gt;就这样，丑小鸭跟它的爸爸妈妈、哥哥姐姐在一起生活玩耍。慢慢地，秋天过去了，冬天要来了，有一天，丑小鸭不小心走丢了！它找不到它的爸爸妈妈，也找不到它的哥哥姐姐了，这只小可怜。幸亏，它在路上遇到了小兔子乖乖，小兔子非常地热情，它对丑小鸭说：我们可以住在一起，我的窝里面特别的暖和，旁边还有很多好吃的东西。丑小鸭感谢小兔子乖乖，它和小兔子乖乖成了好朋友，它们在一起生活玩耍，过着非常快乐的生活。&lt;/p&gt;
&lt;p&gt;慢慢地，冬天过去了，春天要来了，天气转暖了，冰雪融化了。丑小鸭从兔子窝里出来，它要到湖边去喝水，一路上很多小动物都朝着它这个方向大声地说：你们看，那边有一只美丽的小天鹅！可是丑小鸭没有看到小天鹅。丑小鸭来到了湖边伸头准备喝水，它发现湖里面真的有一只美丽的小天鹅，它微微笑跟小天鹅打招呼，小天鹅也微笑跟它打招呼，它对着小天鹅摇了摇头，小天鹅也对着它摇了摇头。这时候，它才意识到：原来它不是丑小鸭，它是一只美丽的小天鹅！&lt;/p&gt;
&lt;p&gt;这时候，天空飞来了一群小天鹅，丑小鸭飞上去和它们打招呼，然后它就回来跟小兔子乖乖道别了，因为它要和小天鹅们去周游世界。丑小鸭每到一个新的地方，都会给小兔子乖乖寄明信片和礼物，小兔子非常地开心，虽然它不会飞，不能和丑小鸭一起去周游世界，但是它可以收到丑小鸭给它寄的明信片和礼物，它可以了解世界各地好玩的事情，它非常地开心。&lt;/p&gt;
&lt;p&gt;丑小鸭和小兔子乖乖永远都是好朋友。&lt;/p&gt;</description>
    </item>
    <item>
      <title>提交NSW和VIC的EOI</title>
      <link>https://dodoro.chouxiangpai.com/archives/734/</link>
      <pubDate>Wed, 14 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/734/</guid>
      <description>&lt;p&gt;今天非常开心，通过了职业评估，应该可以获得15分的加分，但这个只是万里长征的一半-_-&lt;/p&gt;
&lt;p&gt;收到评估结果，我马上就提交了NSW和VIC的EOI，不知道前途怎么样，这是我唯一的190希望了，真的希望两个州有一个能捞我&amp;hellip;&lt;/p&gt;
&lt;p&gt;念经、念经、念经&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]SignalR Core 尝鲜-A developer&#39;s tour of SignalR Core Alpha</title>
      <link>https://dodoro.chouxiangpai.com/archives/728/</link>
      <pubDate>Fri, 19 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/728/</guid>
      <description>&lt;p&gt;几个月前，SignalR Core 团队发布了一个非官方版本的 ASP.NET Core SignalR。为此，开发人员有机会了解其工作原理以及 ASP.NET SignalR 与 Signal Core 新架构之间的区别。&lt;/p&gt;
&lt;p&gt;SignalR Core 中移除了哪些特性 通过对比两个版本的 SignalR 可以发现，新版本不再支持一些重要的特性。首先是移除了对 jQuery 和其他第三方类库的依赖，因为新版本的 JavaScript 客户端是使用 TypeScript 开发的。其次是自动连接后的消息重放功能，移除该功能主要是出于性能方面的考虑。服务器需要为每一个连接维护一个缓冲区，用于保存消息，以便后续重新发送。当客户端断开连接，可以尝试重新恢复连接，然后将未发送的消息发送给客户端。可以想象，如果有很多客户端断开连接，而且每个客户端都发送大量的消息，对于服务器来说是个很大的负担。另一个被 SignalR 团队移除特性是多 Hub 端点，所以，在新版本里，每个连接只有一个 Hub。&lt;/p&gt;
&lt;p&gt;新版本的 SignalR Core 不再支持横向扩展（Scale Out）模型，原因是 MessageBus 被当成了横向扩展的“万灵丹”，但它实际上只支持Azure Service Bus、Redis 和 SQL Server。在实际的协作场景当中（客户端到客户端），随着客户端和消息数量的增长，通过以上三种方式进行横向扩展会有瓶颈问题。&lt;/p&gt;
&lt;p&gt;不过，我认为，移除横向扩展功能这一决定有点太过激进，因为在某些场景下，MessageBus 仍然十分有用。例如，在将 SignalR 作为一个广播服务器时，它可以控制发送消息的数量。而在 SignalR Core 的 alpha 版本中，开发者可以根据实际情况选择是否进行横向扩展，如业务需求、系统约束或基础设施，这种设计更加“可插拔”。SignalR Core 团队提供了一个使用 Redis 进行横向扩展的示例。其他扩展方式可能会被包含在 SignalR Core 的最终版中。&lt;/p&gt;
&lt;p&gt;最后一个被移除的功能是多服务器间的双向复制（backplane），因为这个功能会在服务器场生成太多的流量。ASP.NET SignalR 通过 MessageBus 在服务器间复制每一个消息，因为客户端无法直接连接到服务器场，而现在，SignalR 使用粘性会话来避免在所有服务器间复制消息。这样一来，SignalR Core 就可以知道哪个客户端连接到了哪台服务器上。&lt;/p&gt;
&lt;p&gt;SignalR Core 中增加了哪些新特性 现在让我们来看一下 SignalR Core 带来了哪些新的特性。首先是使用了二进制协议来发送和接收消息。在 ASP.NET SignalR 中只能使用 JSON 格式的文本来发送和接收消息，而现在则可以使用二进制协议，该二进制协议基于MessagePack序列化格式，比 JSON 更快、体积更小。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于.NET Core情况</title>
      <link>https://dodoro.chouxiangpai.com/archives/723/</link>
      <pubDate>Wed, 17 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/723/</guid>
      <description>&lt;p&gt;这几天终于抽出空啦看微软的Build 2019，看到.NET Core 3.0及相关技术的详细介绍，并且了解.NET的未来规划，感叹微软的伟大。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190717093004.png&#34;&gt;&lt;img alt=&#34;微信图片_20190717093004&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/723/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190717093004-300x166.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上图是.NET Core的web开发部分。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190717092956.png&#34;&gt;&lt;img alt=&#34;微信图片_20190717092956&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/723/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190717092956-300x166.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;上图是.NET 平台大统一设计。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190717093000.png&#34;&gt;&lt;img alt=&#34;微信图片_20190717093000&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/723/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190717093000-300x163.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上图是.NET未来的Roadmap。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;这就叫做技术领域的一统江湖。二十年前很多人嘲笑Windows的垄断和Microsoft的不开源（现在依然有老古董如此认为），如今，Sun寄人篱下并且靠着Java专利法残喘苟活。我一直觉得微软汇聚的是软件世界最优秀的工程师，这些人要是投身开源代码，那是很恐怖的，短短不到5年时间，微软现在成为开源代码贡献最大的公司。&lt;/p&gt;
&lt;p&gt;如今.NET Core 在海外若日中天，当国内经济持续下滑，人力成本持续提高，你们就会想到用.NET Core了，一个公司只需要三名码农就可以搞定后端、前端、移动开发。不过很可惜，公司的人力部门都听CTO的，而这群Java养出来的没落贵族是不会自己变革的。 ​​​​&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]WebAssembly 和 Blazor：解决了一个存在十年的老问题</title>
      <link>https://dodoro.chouxiangpai.com/archives/731/</link>
      <pubDate>Fri, 12 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/731/</guid>
      <description>&lt;p&gt;本文要点 WebAssembly 是一种新的客户端技术，可以在所有现代浏览器（包括移动浏览器）中实现近乎原生的性能，而且不需要插件。 许多语言，包括 C、C#、Go 和 Rust，都可以编译成面向基于栈的 WebAssembly 虚拟机的代码。 .NET 代码可以在任何地方运行，包括浏览器内部。 Blazor 是一个客户端库，它在 WebAssembly 上使用.NET 来支持借助 Razor 模板使用 C# 编写的单页应用程序。 Blazor 支持代码重用和将遗留代码移植到现代 Web 应用程序的能力。 在 2019 年 4 月中旬，微软悄悄地推出了一个年轻的框架，从“一切皆有可能”的实验阶段过渡到“我们致力于实现这一目标”的预览版。这个框架名为Blazor，因为它在浏览器中运行，并利用了一个名为 Razor 的模板系统或“视图引擎”，促成了这个.NET 开发人员几乎放弃了的场景。它不仅允许开发人员使用 C# 构建客户端代码（不需要 JavaScript），还允许开发人员在没有插件的情况下在浏览器中运行现有的.NET 标准 DLL。&lt;/p&gt;
&lt;p&gt;Blazor 有两种托管模式。本文主要关注客户端版本。你可以阅读“Blazor 服务器端托管模型”了解更多关于服务器端版本的信息。&lt;/p&gt;
&lt;p&gt;Silverlight 的希望 在任何地方运行.NET 的梦想始于 2006 年，当时有一个名为“Windows Presentation Foundation/Everywhere（WPF/E）”的应用程序框架以 Silverlight 的形式向公众发布。第一个版本支持通过 WPF 引入的声明性用户界面，即可扩展应用程序标记语言（Extensible Application Markup Language，简称 XAML）。该平台提供了对 UI 元素的细粒度控制，并提供了自己的文档对象模型（DOM），可以通过 JavaScript 访问。&lt;/p&gt;
&lt;p&gt;当 Silverlight 2 在 2008 年发布时，它通过一个作为浏览器插件运行的公共语言运行时（CLR）实现.NET 的完全支持，从而加快了采用速度。开发人员可以使用任何.NET 语言来构建 Web 应用程序，利用成熟的数据绑定模式，如 Model-View-ViewMode（MVVM），并使用 REST 或 Windows Communication Foundation（WCF）客户端与 Web API 通信。看起来，.NET 开发人员可以摆脱 JavaScript 的束缚，不用再担心跨浏览器测试，而是专注于一个具有公共代码库的平台来交付他们的应用程序。&lt;/p&gt;</description>
    </item>
    <item>
      <title>IIS如何设置反向代理</title>
      <link>https://dodoro.chouxiangpai.com/archives/720/</link>
      <pubDate>Wed, 10 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/720/</guid>
      <description>&lt;p&gt;说到反向代理，很多人会想到nginx，其实iis也是可以实现方向代理的。&lt;/p&gt;
&lt;p&gt;1.安装ARR、URL Rewrite(URL重写工具2.0)&lt;/p&gt;
&lt;p&gt;注意英文和中文环境的对应：&lt;/p&gt;
&lt;p&gt;Application Request Routing 对应中文 应用程序请求路由&lt;/p&gt;
&lt;p&gt;URL Rewrite Module 对应中文 URL重写&lt;/p&gt;
&lt;p&gt;下载安装ARR（也可以在IIS管理器中，Web平台安装程序-&amp;gt;产品-&amp;gt;搜索框中搜索&amp;quot;arr&amp;quot;-&amp;gt;应用程序请求路由3.0 Beta-&amp;gt;添加-&amp;gt;安装）: &lt;a href=&#34;http://www.iis.net/downloads/microsoft/application-request-routing&#34;&gt;http://www.iis.net/downloads/microsoft/application-request-routing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载安装URL Rewrite Module（也可以在IIS管理器中，Web平台安装程序-&amp;gt;产品-&amp;gt;搜索框中搜索&amp;quot;url&amp;quot;-&amp;gt;url重写工具2.0-&amp;gt;添加-&amp;gt;安装）: &lt;a href=&#34;http://www.microsoft.com/en-us/download/details.aspx?id=7435&#34;&gt;http://www.microsoft.com/en-us/download/details.aspx?id=7435&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这里推荐使用IIS自带的Web安装包工具，微软还是很强大的。&lt;/p&gt;
&lt;p&gt;2.启用ARR：双击ARR(Application Request Routing)-&amp;gt;点击右侧Server Proxy Settings&amp;hellip;-&amp;gt;选中Enabel proxy-&amp;gt;点击右侧“应用”;&lt;/p&gt;
&lt;p&gt;3.启用URL重写，可以通过web.config配置，也可以通过界面设置（web.config最终也可以使用界面来查看和操作），比如web.config样例:&lt;/p&gt;
&lt;p&gt;此时 &lt;a href=&#34;https://www.baidu.com/api&#34;&gt;www.baidu.com/api&lt;/a&gt; 或者 &lt;a href=&#34;https://www.baidu.com/api/xxxx&#34;&gt;www.baidu.com/api/xxxx&lt;/a&gt; 都被代理到 &lt;a href=&#34;https://www.proxy.com&#34;&gt;www.proxy.com&lt;/a&gt; 或者 &lt;a href=&#34;https://www.proxy.com/xxx&#34;&gt;www.proxy.com/xxx&lt;/a&gt;，如果不想过滤掉&amp;quot;baidu&amp;quot;，只需要把match url 改成 &amp;ldquo;^(baidu(/?|.*))$&amp;rdquo;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;?xml version=”1.0” encoding=”UTF-8”?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;system.webServer&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;rewrite&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;rules&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;rule&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;”bdProxy”&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;stopProcessing=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;”true”&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;match&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;”^baidu(/?|.*)$”&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;conditions&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;add&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;input=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;”{HTTP_HOST}”&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pattern=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;”www.baidu.com”&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/conditions&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;action&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;”Rewrite”&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;”http://www.baidu.com{R:1}“&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;serverVariables&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;set&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;”HTTP_X_FORWARDED_HOST”&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;”{HTTP_HOST}”&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/serverVariables&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/rule&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/rules&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/rewrite&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/system.webServer&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里要特别注意了：由于使用了变量 HTTP_X_FORWARDED_HOST，所以需要在 url重写-&amp;gt;查看服务器变量-&amp;gt;添加-&amp;gt;添加HTTP_X_FORWARDED_HOST&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angular项目部署和跨域问题</title>
      <link>https://dodoro.chouxiangpai.com/archives/718/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/718/</guid>
      <description>&lt;p&gt;采用Angular开发，部署的时候有两种方式：第一种是把打包后的文件直接发布到站点根目录下面，这种情况Angular的项目将作为一个独立的网站，那么必然会面对跨域的问题；第二种是把Angular打包后的文件放到站点根目录下的某个文件夹，这种情况不需要跨域，但是需要对路径做相关的配置。这里先讨论第一种情况。&lt;/p&gt;
&lt;p&gt;一、开发环境&lt;/p&gt;
&lt;p&gt;可以通过代理跨域，在angular项目中&lt;/p&gt;
&lt;p&gt;1）在项目根目录新建proxy.config.json；&lt;/p&gt;
&lt;p&gt;2）跟上面的proxyTable 一样配置好；&lt;/p&gt;
&lt;p&gt;3）执行命令ng serve &amp;ndash;proxy-config proxy.config.json即可&lt;/p&gt;
&lt;p&gt;4）可以在package.json里配置下&lt;/p&gt;
&lt;p&gt;&amp;ldquo;scripts&amp;rdquo;: { &amp;ldquo;start&amp;rdquo;: &amp;ldquo;ng serve &amp;ndash;proxy-config proxy.config.json&amp;rdquo; }, 然后执行npm run start&lt;/p&gt;
&lt;p&gt;二、生产环境&lt;/p&gt;
&lt;p&gt;上面的方式可以解决我们在Angualr项目中开发环境的跨域问题，但是无法解决生产环境上的跨域问题，有的时候生产环境上也需要处理跨域问题，这个时候proxyTable是不行的，需要通过Nginx或者IIS反向代理（你没有看错，IIS反向代理，而且效率也很高，下一篇我会讨论）。&lt;/p&gt;
&lt;p&gt;反向代理作用&lt;/p&gt;
&lt;p&gt;1） http服务器，可以独立提供http服务；&lt;/p&gt;
&lt;p&gt;2） 虚拟主机：多个域名指向同一个服务器，服务器根据不同的域名把请求转发到不同的应用服务器；&lt;/p&gt;
&lt;p&gt;3） 反向代理：负载均衡，将请求转发至不同的服务器&lt;/p&gt;
&lt;p&gt;nginx的相关配置&lt;/p&gt;
&lt;p&gt;location / { root D:\cross-demo\dist #直接指向打包后的文件 index index.html index.htm; }&lt;/p&gt;
&lt;p&gt;location /api/ { proxy_pass http://localhost:8888/; # 将地址代理到api上 }&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于简·奥斯汀和英文名著</title>
      <link>https://dodoro.chouxiangpai.com/archives/709/</link>
      <pubDate>Tue, 25 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/709/</guid>
      <description>&lt;p&gt;我读的第一本英文名著是简·奥斯汀的《理智与情感》，虽然我阅读过了7.5，但是刚开始前几章还是有些吃力，但是慢慢的越读越顺，一发不可收拾，然后一口气读完了《傲慢与偏见》、《艾玛》、《曼斯菲尔德庄园》、《劝导》和《诺桑觉寺》。对于她所有的作品，我也不免俗地最喜欢《傲慢与偏见》和《理智与情感》，这两部作品体现出作者年轻的心境，激烈、热烈和沉浸，而《艾玛》和《劝导》则是像小溪一样涓涓地流，静谧、热忱和稳健。期间了解到奥斯汀的个人经历以及她作品的影响力，她确实是可以和莎士比亚齐名的英国作家。&lt;/p&gt;
&lt;h1 id=&#34;简奥斯汀略传&#34;&gt;简·奥斯汀略传&lt;/h1&gt;
&lt;h2 id=&#34;一出生&#34;&gt;一、出生&lt;/h2&gt;
&lt;p&gt;奥斯汀于1775年12月16日在史蒂文顿堂区出生，于次年4月5日公开洗礼。她在家里待了几个月后，被母亲送到住在附近的乳母伊丽莎白·利透伍德（Elizabeth Littlewood）家抚养，为期一年或18个月[19]。1783年，简和卡珊德拉按照家庭传统被送到牛津，在安·考利太太（Mrs. Ann Cawley）处接受教育，同年晚些时候跟着老师去了南安普顿。两个女孩都得了斑疹伤寒，简差点丧命。奥斯汀随后在家学习，直到于1785年和姐姐一起去寄宿学校。学校课程可能包含了法语、拼写、针线活、舞蹈和音乐，可能还有戏剧。至1786年12月，简和卡珊德拉已回到家，因为奥斯汀家无法承担同时送两个女儿上学。&lt;/p&gt;
&lt;p&gt;奥斯汀接下来的教育是通过阅读书籍完成的，父亲及哥哥詹姆斯和亨利给予了指导。奥斯汀显然可以无限制地使用父亲和家庭友人沃伦·黑斯廷斯的图书室，两者加在一起有数量可观、内容各异的藏书。父亲也容许她有时尝试写涉及性爱的内容，并给姐妹俩的写作、绘画活动提供了价格不菲的纸张和其他材料。据传记作者帕克·赫南（Park Honan）所述，奥斯汀家的生活在“一个开放、愉快、无拘束的知识分子家庭氛围”中进行，与她家立场相反的政治或社会观点也在家中被提及和讨论[24]。奥斯汀在1786年从学校返家后，余生一直住在自己小家庭的生活范围内。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/225px-CassandraAusten-JaneAustenc.1810_hires.jpg&#34;&gt;&lt;img alt=&#34;225px-CassandraAusten-JaneAusten(c.1810)_hires&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/709/images/225px-CassandraAusten-JaneAustenc.1810_hires.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;奥斯汀受到教育还有私下的戏剧演出。在她7岁到13岁期间，她的家人和好友筹划上演了一系列舞台剧，包括理查·谢立丹的《情敌》（The Rivals）和大卫·加里克（David Garrick）的《上流社会》（Bon Ton）。虽然具体细节无从所知，奥斯汀很有可能参与了这些活动，一开始作为观众，长大些后成为参与者。这些戏剧大部分为喜剧，奥斯汀在喜剧和讽刺方面的天赋可能来源于此。&lt;/p&gt;
&lt;h2 id=&#34;二少年&#34;&gt;二、少年&lt;/h2&gt;
&lt;p&gt;英王亨利四世的画像，是奥斯汀姐姐卡珊德拉为《英格兰历史》所作插画（约1790年）。作者奥斯汀自称为“一位偏袒的、有成见的、无知的历史学家”。 可能早至1787年奥斯汀就开始创作诗歌、故事和剧本，作为她自己和家人的娱乐消遣[28]。她日后取了这些早期作品中的29篇汇编成了三本笔记本，它们如今被称为《少年作品》（Juvenilia），包括了1787年到1793年间的创作。手稿中有证据表示奥斯汀直到1809年至1811年间还在继续修改这些作品，她的侄子侄女表示最晚修改时间可至1814年。其中有一篇书信体讽刺小说题名为《爱与友情》（原文为Love and Freindship），嘲讽了流行的感伤小说（sentimental novel）[31]。还有一篇《英格兰历史》（The History of England）的手稿长34页，姐姐卡珊德拉为其添加了13幅水彩插画。&lt;/p&gt;
&lt;p&gt;奥斯汀的《英格兰历史》戏仿了流行历史读物，尤其是奥立佛·高德史密斯的《英格兰史》（History of England，1764）。学者理查德·延金斯认为她的《少年读物》时常“喧嚣狂暴”、“无拘无束”；他将其与18世纪小说家劳伦斯·斯特恩和20世纪喜剧团体蒙提·派森的作品相比较。&lt;/p&gt;
&lt;h2 id=&#34;三成年&#34;&gt;三、成年&lt;/h2&gt;
&lt;p&gt;奥斯汀成年后继续住在父母家中，从事合乎她性别年龄和社会地位的活动：练习弹钢琴（fortepiano），辅助母亲和姐姐管理仆人，照顾家里分娩期的女性和临终的老人[34]。她把写好的短篇寄给刚出生的侄女范妮·凯瑟琳和简·安妮·伊丽莎白。她尤其为自己的裁缝手艺自豪。她也定期去教堂，频繁地和朋友与邻居来往 ，还在晚间给家人朗读小说（经常是她自己的作品）。邻里间的社交活动通常是跳舞，有时是晚饭后在某人家里即兴而起，有时是在市政厅的聚会厅（assembly rooms）举办的舞会[38]。她的哥哥亨利日后说：“简喜欢跳舞，并且很擅长。”&lt;/p&gt;
&lt;p&gt;1793年，奥斯汀开始写一个短剧，随后弃稿。该剧本是一部“六幕喜剧”，后来被题名为《查尔斯·格兰德森爵士；又，那个高兴的人》（Sir Charles Grandison; or, The Happy Man）。她后来重拾该剧，在1800年左右完成。奥斯汀的课本中收录了她最爱的当代小说《查尔斯·格兰德森爵士的历史》（The History of Sir Charles Grandison，塞缪尔·理查森著，1753年）的节选，该短剧是对这部小说的戏仿[40]。 传记作者赫南猜测，奥斯汀在1789年写成《爱与友情》后不久，决定“为利润写作，把写故事作为她的主要追求”，也就是成为一名职业作家。大约从1793年起，她开始写更长，更复杂的作品。&lt;/p&gt;
&lt;p&gt;1793年到1795年间，奥斯汀写了《苏珊夫人》，常被认为是她最精妙、最具雄心的早期作品。传记作者克莱尔·托马林（Claire Tomalin）认为书中女主人公是一个性方面的捕猎者，用她的才智和魅力操纵、背叛和伤害她的情人、朋友与家人，这一点和奥斯汀的其他作品不同。&lt;/p&gt;
&lt;h2 id=&#34;四作品&#34;&gt;四、作品&lt;/h2&gt;
&lt;p&gt;在查顿时，奥斯汀出版了四本小说，大体上反响都不错。通过哥哥亨利的关系，出版商托马斯·埃杰顿（Thomas Egerton）同意出版《理智与情感》[A]。小说于1811年10月出版，收获了好评，流行于舆论界人士间，首版在1813年中旬售罄[B]。小说的利润使奥斯汀取得了一定程度上的经济和心理独立。随后，埃杰顿在1813年1月出版了《傲慢与偏见》，是《第一印象》修改后的成果。他为这本书做了宣传，它立即大获成功，收到了三篇好评，销量也很好。到同年10月，埃杰顿开始了第二版的销售。1814年5月，《曼斯菲尔德庄园》出版。虽然它被评论界忽视，但受到大众欢迎，在六个月内全部卖出，给奥斯汀带来的收入比其他作品都高。&lt;/p&gt;
&lt;p&gt;奥斯汀得知摄政王（即后来的乔治四世）欣赏她的作品，每个住地都有一套她的书。1815年11月，摄政王的图书管理员詹姆斯·斯坦尼尔·克拉克（James Stanier Clarke）邀请奥斯汀拜访位于伦敦的王室居所，并暗示她向摄政王献上即将出版的小说《爱玛》。尽管奥斯汀不喜欢摄政王，她无法拒绝这个请求。日后，她写了讽刺文《根据各方意见写就的小说计划》（Plan of a Novel, according to Hints from Various Quarters），是听取图书管理员为她将来作品提供的许多建议后作出的“完美小说”大纲。&lt;/p&gt;
&lt;p&gt;1815年中旬，奥斯汀的出版商换成了更有名的约翰·默里。他于1815年12月出版了《爱玛》，于1816年2月出版了《曼斯菲尔德庄园》的第二版。虽然前者卖的不错，但后者销量惨淡，抵消了《爱玛》的大部分利润。这两本书是在她生前出版的最后两部小说。&lt;/p&gt;
&lt;p&gt;在默里准备出版《爱玛》时，奥斯汀开始创作一部新小说《艾略特一家》（后来出版为《劝导》），在1816年7月完成初稿。在《爱玛》出版后不久，哥哥亨利从考斯比处买回了《苏珊》的版权。亨利的银行在同年3月破产，使他丧失了财产，深陷债务中，让兄弟爱德华、詹姆斯和弗兰克花去了大笔金钱。亨利和弗兰克无力再供养他们的母亲和姐妹了。因家庭财务危机，奥斯汀被迫推迟这两本已完成小说的出版。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]使用Censys 查询CDN/如Cloudflare后面的真实服务器IP地址与对应防范</title>
      <link>https://dodoro.chouxiangpai.com/archives/698/</link>
      <pubDate>Fri, 14 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/698/</guid>
      <description>&lt;p&gt;Censys是一个可恨又可爱的搜索联网设备信息的新型搜索引擎, 利用他可以搜索到很多有用的信息, 比如通过ssl证书查找到CDN后面背后的真实IP.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/kB8m4I.md_.png&#34;&gt;&lt;img alt=&#34;kB8m4I.md&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/698/images/kB8m4I.md_-300x238.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;防范: 1, 建议屏蔽所有Censys段&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://censys.io/ipv4?q=censys.io&#34;&gt;&lt;/a&gt;&lt;a href=&#34;https://censys.io/ipv4?q=censys.io&#34;&gt;https://censys.io/ipv4?q=censys.io&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;搜索censys的ip段并屏蔽.&lt;/p&gt;
&lt;p&gt;如下面两个段&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;198.108.0.0/16 141.212.0.0/16&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;2, 或者屏蔽除了CDN以外所有IP访问. (推荐, 但请注意操作, 别把自己给屏蔽了)&lt;/p&gt;
&lt;p&gt;CentOS 7 firewall防火墙屏蔽除指定IP外的所有IP&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.openos.org/post/340/&#34;&gt;&lt;/a&gt;&lt;a href=&#34;https://www.openos.org/post/340/&#34;&gt;https://www.openos.org/post/340/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3, 如果是cloudflare用户, 也可以使用argo-tunnel&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cloudflare.com/zh-cn/products/argo-tunnel/&#34;&gt;&lt;/a&gt;&lt;a href=&#34;https://www.cloudflare.com/zh-cn/products/argo-tunnel/&#34;&gt;https://www.cloudflare.com/zh-cn/products/argo-tunnel/&lt;/a&gt; &lt;a href=&#34;https://developers.cloudflare.com/argo-tunnel/quickstart/&#34;&gt;&lt;/a&gt;&lt;a href=&#34;https://developers.cloudflare.com/argo-tunnel/quickstart/&#34;&gt;https://developers.cloudflare.com/argo-tunnel/quickstart/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;其他查询Cloudflare源IP的相关工具&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.crimeflare.org/&#34;&gt;&lt;/a&gt;&lt;a href=&#34;http://www.crimeflare.org&#34;&gt;http://www.crimeflare.org&lt;/a&gt;:82/ &lt;a href=&#34;https://securitytrails.com/&#34;&gt;&lt;/a&gt;&lt;a href=&#34;https://securitytrails.com&#34;&gt;https://securitytrails.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;cloudflare 服务器IP地址&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cloudflare.com/ips/&#34;&gt;&lt;/a&gt;&lt;a href=&#34;https://www.cloudflare.com/ips/&#34;&gt;https://www.cloudflare.com/ips/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;IPv4 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/12 172.64.0.0/13 131.0.72.0/22&lt;/p&gt;
&lt;p&gt;IPv6 2400:cb00::/32 2606:4700::/32 2803:f800::/32 2405:b500::/32 2405:8100::/32 2a06:98c0::/29 2c0f:f248::/32&lt;/p&gt;</description>
    </item>
    <item>
      <title>mysql数据库报错：找不到mysql.sock导致无法连接</title>
      <link>https://dodoro.chouxiangpai.com/archives/690/</link>
      <pubDate>Thu, 13 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/690/</guid>
      <description>&lt;p&gt;mysql.sock默认的是在/var/lib/mysql, 如果发现确实是在该目录下，可以在[mysqld]下面加入mysql.sock的path vi /etc/my.cnf（my.cnf也可能在其他路径下）&lt;/p&gt;
&lt;p&gt;[mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock&lt;/p&gt;
&lt;p&gt;但是要保证使用mysql的用户具有对该目录的写权限，否则这样的改动由于权限限制仍然会报错。&lt;/p&gt;
&lt;p&gt;所以为了避免权限问题也可以使用软链接为/var/lib/mysql/mysql.sock创建一个到/tmp/mysql.sock的联接&lt;/p&gt;
&lt;p&gt;ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock&lt;/p&gt;
&lt;p&gt;由于/tmp/文件夹默认对other有w权限，这样就可以避免权限问题。&lt;/p&gt;
&lt;p&gt;此外，如果发现mysql.sock不在默认的/var/lib/mysql位置，一种解决方法是使用find命令搜索mysql.sock的位置，然后按前面两种解决方案挑一种做即可。&lt;/p&gt;
&lt;p&gt;或者进行初始化：/usr/local/mysql/bin/mysql_install_db &amp;ndash;user=mysql&lt;/p&gt;</description>
    </item>
    <item>
      <title>php-fpm找不到php-cgi.sock</title>
      <link>https://dodoro.chouxiangpai.com/archives/688/</link>
      <pubDate>Wed, 12 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/688/</guid>
      <description>&lt;p&gt;这两天整理centos服务器，为了节省空间清理了不少文件，没想到不小心把/tmp/下的目录清除了，导致程序报错：php-fpm找不到php-cgi.sock。&lt;/p&gt;
&lt;p&gt;php-fpm有两种listen方式，一种是通过端口来操作，一种是sock文件。&lt;/p&gt;
&lt;p&gt;在nginx的server配置当中，如果设置为fastcgi_pass unix:/tmp/php-cgi.sock的话，有可能会出现502错误，这是以为nginx此项没有找到php-cgi.sock文件或者权限问题导致的,我们也可以改成fastcgi_pass:127.0.0.1:9000来修正这个错误 。&lt;/p&gt;
&lt;p&gt;当我们用php-fpm来管理我们的php启动时，按照如下的配置，就会自动生成/tmp/php-cgi.sock文件，然后再访问的话就不回出现502 Gateway错误了。配置如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;global&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; /var/run/php-fpm.pid
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;error_log &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; /var/log/php-fpm.log
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log_level &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; notice
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;www&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;listen &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; /tmp/php-cgi.sock
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;user &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; www
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;group &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; www
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pm &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; dynamic
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pm.max_children &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pm.start_servers &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pm.min_spare_servers &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pm.max_spare_servers &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注：将php.ini里的cgi.fix_pathinfo设置为0,不然会有漏洞。&lt;/p&gt;</description>
    </item>
    <item>
      <title>東方之珠</title>
      <link>https://dodoro.chouxiangpai.com/archives/692/</link>
      <pubDate>Wed, 12 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/692/</guid>
      <description>&lt;h1 id=&#34;東方之珠&#34;&gt;東方之珠&lt;/h1&gt;
&lt;p&gt;羅大佑 詞曲 《皇后大道東》&lt;/p&gt;
&lt;h2 id=&#34;小河彎彎向南流&#34;&gt;&lt;strong&gt;小河彎彎向南流&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;流到香江去看一看&#34;&gt;&lt;strong&gt;流到香江去看一看&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;東方之珠我的愛人&#34;&gt;&lt;strong&gt;東方之珠我的愛人&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;你的風采是否浪漫依然&#34;&gt;&lt;strong&gt;你的風采是否浪漫依然&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;月兒彎彎的海港&#34;&gt;&lt;strong&gt;月兒彎彎的海港&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;夜色深深燈火閃亮&#34;&gt;&lt;strong&gt;夜色深深　燈火閃亮&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;東方之珠整夜未眠&#34;&gt;&lt;strong&gt;東方之珠　整夜未眠&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;守著滄海桑田變幻的諾言&#34;&gt;&lt;strong&gt;守著滄海桑田變幻的諾言&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;讓海風吹拂了五千年&#34;&gt;&lt;strong&gt;讓海風吹拂了五千年&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;每一滴淚珠彷彿都說出你的尊嚴&#34;&gt;&lt;strong&gt;每一滴淚珠彷彿都說出你的尊嚴&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;讓海潮伴我來保佑你&#34;&gt;&lt;strong&gt;讓海潮伴我來保佑你&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;請別忘記我永遠不變黃色的臉&#34;&gt;&lt;strong&gt;請別忘記我永遠不變黃色的臉&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;船兒彎彎入海港&#34;&gt;&lt;strong&gt;船兒彎彎入海港&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;回頭望望滄海茫茫&#34;&gt;&lt;strong&gt;回頭望望　滄海茫茫&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;東方之珠擁抱著我&#34;&gt;&lt;strong&gt;東方之珠　擁抱著我&lt;/strong&gt;&lt;/h2&gt;
&lt;h2 id=&#34;讓我溫暖你那蒼涼的胸膛&#34;&gt;&lt;strong&gt;讓我溫暖你那蒼涼的胸膛&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;For HK~&lt;/p&gt;</description>
    </item>
    <item>
      <title>选择Angular而不是Vue</title>
      <link>https://dodoro.chouxiangpai.com/archives/676/</link>
      <pubDate>Mon, 10 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/676/</guid>
      <description>&lt;p&gt;最近团队要选择前端开发框架，我进行了大量对比，最终选择了Angular，我承认Vue也很优秀，React也超级棒，但Angular非常适合我们。我们需要的就是这样一个真正的框架，包含了组件化方案、模块化方案、测试方案、表单验证、路由、国际化方案和安全方案。&lt;/p&gt;
&lt;p&gt;Angular 的工程师将我们需要的所有功能做了不错的整合。如果使用 Vue，我可能还要面临更多选择。Angular 的一份文档涵盖了开发中的方方面面。如果使用 Vue，可能每个功能要去看不同的文档。Angular 更强势更主观，它的文档对于如何完成某个功能给出了明确的建议。我们团队的成员有不同的编程背景，虽然有三个全职的前端，但是还有十几个 Java 和 Python 程序员，他们也可能会参与前端工作，Angular 的文档能让这些成员快速适应环境。&lt;/p&gt;
&lt;p&gt;Angular = Vue + vue-router + axios + karma + 表单验证插件 + i18n …&lt;/p&gt;
&lt;h2 id=&#34;我们需要typescript来告别原来脓肿不堪的js代码&#34;&gt;我们需要typescript来告别原来脓肿不堪的js代码&lt;/h2&gt;
&lt;p&gt;使用TypeScript，告别对臃肿代码的重构，让自己的编程真正能够面向对象吧。&lt;/p&gt;
&lt;p&gt;一千个人有一千种React代码风格，但是Angular的代码风格只有一种。你会发现Angular的每一处都是最佳实践，设计模式的运用是基于Google多年的Java编程经验的，响应式的应用也是基于微软对于操作系统中异步处理的经验总结。 无数的编程概念都有其历史厚重感，而Angular将他们汇聚到了一起。windows中的linq‘时间上的数组’，spring中的依赖注入，处理HDFS的MR，到linux线程本地存储，再到前端界的MVVM，MVC。&lt;/p&gt;
&lt;p&gt;Angular优势： Angular 的工程师将我们需要的所有功能做了不错的整合。如果使用 Vue，我可能还要面临更多选择。 Angular 的一份文档涵盖了开发中的方方面面。如果使用 Vue，可能每个功能要去看不同的文档。 Angular 更强势更主观，它的文档对于如何完成某个功能给出了明确的建议。我们团队的成员有不同的编程背景，虽然有三个全职的前端，但是还有十几个 Java 和 Python 程序员，他们也可能会参与前端工作，Angular 的文档能让这些成员快速适应环境。 核心原因：Angular 是一个完整的框架。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于G#F#W和信息自由</title>
      <link>https://dodoro.chouxiangpai.com/archives/662/</link>
      <pubDate>Thu, 06 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/662/</guid>
      <description>&lt;p&gt;每年这段时间都很敏感，今天最突出。过去几年，我的梯子都没有倒过，毕竟自己也就是用来进行技术探索，上上几个top5的网站，从来不在外面乱说话乱起哄，也有自己独立的判断能力，不轻易相信恶意抹黑的花边新闻。但是今年梯子倒了，估计是全面推倒了这次。昨天折腾了一上午终于弄好了，魔高一尺道高一丈，这次启用https加cdn，并且屏蔽一切IP请求主机，应该能撑一段时间。&lt;/p&gt;
&lt;p&gt;我理解有些码农们投身G#F#W建设的身不由己，但如果真把这当成伟大事业那就有些悲哀了。要知道，互联网发明最初的目的就是信息分享和信息自由，而我也一直坚信，自由开放下的环境没事的地方，才是真正长治久安。如果有机会，我一定写一部关于码农们和G#F#W之间的你来我往和爱恨纠葛的剧本。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606164435.jpg&#34;&gt;&lt;img alt=&#34;微信图片_20190606164435&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/662/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606164435-138x300.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS编译安装shadowsocks-libev</title>
      <link>https://dodoro.chouxiangpai.com/archives/658/</link>
      <pubDate>Tue, 04 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/658/</guid>
      <description>&lt;p&gt;部署环境：CentOS 7.4 x64&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/shadowsocks/shadowsocks-libev&#34;&gt;shadowsocks-libev项目地址&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;编译安装&#34;&gt;编译安装&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum update -y
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install -y epel-release rng-tools
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install -y git wget gettext gcc autoconf libtool automake make asciidoc xmlto c-ares-devel libev-devel zlib-devel openssl-devel
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rngd -r /dev/urandom
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;安装libsodium&#34;&gt;安装Libsodium&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export LIBSODIUM_VER&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;1.0.16
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://download.libsodium.org/libsodium/releases/libsodium-$LIBSODIUM_VER.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar xvf libsodium-$LIBSODIUM_VER.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pushd libsodium-$LIBSODIUM_VER
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./configure --prefix&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make install
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;popd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ldconfig
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;安装mbedtls&#34;&gt;安装MbedTLS&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export MBEDTLS_VER&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;2.7.0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://tls.mbed.org/download/mbedtls-$MBEDTLS_VER-gpl.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar xvf mbedtls-$MBEDTLS_VER-gpl.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pushd mbedtls-$MBEDTLS_VER
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make SHARED&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; CFLAGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;-fPIC
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make DESTDIR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr install
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;popd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ldconfig
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;安装shadowsocks&#34;&gt;安装shadowsocks&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/shadowsocks/shadowsocks-libev.git
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd shadowsocks-libev
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git submodule update --init --recursive
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./autogen.sh &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./configure &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make install
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd ..
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;修改配置&#34;&gt;修改配置&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir /etc/shadowsocks-libev
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vi /etc/shadowsocks-libev/config.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;写入以下内容并保存&lt;/p&gt;</description>
    </item>
    <item>
      <title>安装shadowsocks的v2ray插件</title>
      <link>https://dodoro.chouxiangpai.com/archives/660/</link>
      <pubDate>Tue, 04 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/660/</guid>
      <description>&lt;p&gt;服务端部署 部署环境：CentOS 7.6 x64&lt;/p&gt;
&lt;h2 id=&#34;安装shadowsocks-libev&#34;&gt;安装Shadowsocks-libev&lt;/h2&gt;
&lt;p&gt;这个之前博文说过，就不重复了。&lt;/p&gt;
&lt;h2 id=&#34;安装v2ray-plugin&#34;&gt;安装v2ray-plugin&lt;/h2&gt;
&lt;p&gt;我懒得编译，直接&lt;a href=&#34;https://github.com/shadowsocks/v2ray-plugin&#34;&gt;下载&lt;/a&gt;已经编译好的了，解压到/usr/local/bin/下。&lt;/p&gt;
&lt;h2 id=&#34;获取ssl证书&#34;&gt;获取SSL证书&lt;/h2&gt;
&lt;p&gt;我使用的是Let’s Encrypt的免费证书（这里建议使用CloudFlare的免费证书），执行命令之前记得先将域名的A记录解析到服务器IP上，并且开放80和443端口。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://dl.eff.org/certbot-auto
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chmod a+x certbot-auto
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./certbot-auto certonly
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;成功之后会有/etc/letsencrypt/live/域名/fullchain.pem和/etc/letsencrypt/live/域名/privkey.pem两个文件。&lt;/p&gt;
&lt;h2 id=&#34;修改配置文件&#34;&gt;修改配置文件&lt;/h2&gt;
&lt;p&gt;默认配置文件在/etc/shadowsocks-libev/config.json，如下文所示，在最后加上plugin和plugin_opts，把域名换成自己的就行。这里采用的是Shadowsocks over websocket (HTTPS)，其它的可以自己参考GitHub上的介绍。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;server&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.0.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;server_port&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;443&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;local_port&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1080&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;timeout&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;method&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;aes-256-gcm&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;plugin&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;v2ray-plugin&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;plugin_opts&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;server;tls;cert=/etc/letsencrypt/live/域名/fullchain.pem;key=/etc/letsencrypt/live/域名/privkey.pem;host=域名;loglevel=none&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最后执行ss-server -c /etc/shadowsocks-libev/config.json -f /run/shadowsocks.pid即可。&lt;/p&gt;
&lt;h2 id=&#34;客户端设置&#34;&gt;客户端设置&lt;/h2&gt;
&lt;p&gt;先安装对应平台的Shadowsocks客户端。&lt;/p&gt;
&lt;h3 id=&#34;windows&#34;&gt;Windows&lt;/h3&gt;
&lt;p&gt;直接下载已经编译好的v2ray-plugin的windows版，解压后命名为v2ray-plugin.exe和Shadowsocks.exe放在同一文件夹下。 在Shadowsocks的服务器设置中，插件程序填v2ray-plugin，插件选项填tls;host=域名。域名要和服务端设置的一致。&lt;/p&gt;
&lt;h3 id=&#34;android&#34;&gt;Android&lt;/h3&gt;
&lt;p&gt;安装v2ray-plugin-android，打开Shadowsocks编辑服务器，在最下面的插件中选择v2ray，配置Transport mode为websocket-tls，Hostname为服务端设置的域名即可。&lt;/p&gt;
&lt;h3 id=&#34;ubuntu&#34;&gt;Ubuntu&lt;/h3&gt;
&lt;p&gt;直接下载已经编译好的v2ray-plugin，解压到/usr/local/bin/下。 编辑配置文件/etc/shadowsocks-libev/config.json，如下文所示，在最后加上plugin和plugin_opts，域名要和服务端设置的一致。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;server&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;域名&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;server_port&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;443&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;local_port&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1080&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;timeout&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;method&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;aes-256-gcm&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;plugin&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;v2ray-plugin&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;plugin_opts&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tls;host=域名;loglevel=none&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最后执行ss-local -c /etc/shadowsocks-libev/config.json即可。&lt;/p&gt;
&lt;h3 id=&#34;优势&#34;&gt;优势&lt;/h3&gt;
&lt;p&gt;你甚至可以把SS服务器放在CDN后面，免费的CDN有Cloudflare。&lt;/p&gt;
&lt;p&gt;然后，最重要的，让你的服务器屏蔽所有除了CloudFlare和你自己的IP之外的所有IP。&lt;/p&gt;
&lt;p&gt;基本上很长一段时间内，G#F#W就拿你没办法了。&lt;/p&gt;
&lt;p&gt;原文: &lt;a href=&#34;https://blog.m3chd09.com/2019/02/01/v2ray-plugin-for-shadowsocks.html&#34;&gt;https://blog.m3chd09.com/2019/02/01/v2ray-plugin-for-shadowsocks.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们都拿到了4个6.5，总分7</title>
      <link>https://dodoro.chouxiangpai.com/archives/637/</link>
      <pubDate>Fri, 31 May 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/637/</guid>
      <description>&lt;p&gt;其实这个分数，我在去年9月份的时候就拿到了，但是因为就差一点点达到4个7，所以很不服气又考了3次，但依然没有拿到理想分数，幸运的是爱人也拿到了这个分数。目前来看，只能抢489和491了，如果抢不到就考虑新西兰。&lt;/p&gt;
&lt;p&gt;我心里觉得如果坚持下去，应该能拿到4个7，但是现在这个分数也无法189和190，特别是最近澳洲出了新的政策，砍掉大量的配额，并且出了新的491签证，所以不打算考了。&lt;/p&gt;
&lt;p&gt;回过头了，从2017年5月起，到2018年12月，一年半的时间，虽然没有达到理想的分数，但是想想对于口语那么烂的我，也许这个结果已经很不错了。&lt;/p&gt;
&lt;p&gt;这近两年过来关于migaration的问题，我们讨论、争论、研究、分析，期间还去了一趟澳新，最终达成一致，定了目标，就看后面这几个月了。&lt;/p&gt;
&lt;p&gt;希望有志者事竟成，我真的很希望能拿我们喜欢的地方，I love Melbourne！&lt;/p&gt;
&lt;p&gt;写在五月的最后一天。&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET Core 3.0 Preview 5发布</title>
      <link>https://dodoro.chouxiangpai.com/archives/634/</link>
      <pubDate>Tue, 28 May 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/634/</guid>
      <description>&lt;p&gt;今天我们非常高兴发布 .NET Core 3.0 Preview 5，它包含了新的Json serializer，支持发布单执行文件，并且更新到新的runtime roll-forward，BCL也做了一些改动。&lt;/p&gt;
&lt;p&gt;目前可以下载.NET Core 3.0 Preview 5安装到Windows, macOS and Linux.另外，ASP.NET Core和EF Core也发布了。&lt;/p&gt;
&lt;p&gt;具体英文地址：&lt;a href=&#34;https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0-preview-5/&#34;&gt;https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0-preview-5/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>留美幼童观后感</title>
      <link>https://dodoro.chouxiangpai.com/archives/672/</link>
      <pubDate>Tue, 28 May 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/672/</guid>
      <description>&lt;p&gt;“他们是中国历史上最早的官派留学生。公元1872年到1875年间，清政府先后派出四批共一百二十名学生赴美国留学。这批学生出洋时的平均年龄只有十二岁，因此 他们有一个共同的名字——留美幼童。这批饱受欧风美雨熏陶的学子是中国矿业、铁路业、电报业的先驱。他们中出现了今天清华大学、天津大学最早的校长，出现了中国最早的一批外交官，出现了中华民国的第一任总理。回国后的这批西学所造之子历经中国晚清政坛的跌宕起伏，目睹了近代中国的荣辱兴衰。 留美幼童的命运，离奇曲折；他们的故事，美丽而忧伤。 他们有一个永远的名字：留美幼童。”&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/p1123457390.jpg&#34;&gt;&lt;img alt=&#34;p1123457390&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/672/images/p1123457390-300x236.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最近翻出央视的一部纪录片《留美幼童》，居然眼前一亮，原来央视也出过这么优秀的纪录片。眼看现在中美贸易战打得火热，不知道有多少人认真去看这部纪录片。如果认真想想中国近代化和现代话过程中，哪个国家对中国最慷慨和友好，我觉得一定是美国，美国没有侵略过中国，并且100多年来一直在帮助中国。历史上美国对中国伤害最大的估计也就是1882的排华法案，但要知道这只是限制华人在美的权利。&lt;/p&gt;
&lt;p&gt;留美幼童是中国与美国的第一次接触，但清政府却因为排华法案从日后第一强国撤回留学生。从此以后，美国对中国的帮助就一直延续：庚子赔款退还用于建设清华园、为中国培养大批人才；协和医院救助大量中国人、并且培养大量医学人才；二战期间无私地帮助中国进行反法西斯战争、并确认战后五个大国之一的地位；中美建交成功阻止了苏联对中国的威胁；新世纪帮助加入世贸、彻底改变中国的经济状况&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>领域驱动设计实现之路</title>
      <link>https://dodoro.chouxiangpai.com/archives/628/</link>
      <pubDate>Mon, 20 May 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/628/</guid>
      <description>&lt;p&gt;2004年，Eric Evans出版《领域驱动设计——软件核心复杂性应对之道》（简称《领域驱动设计》），10年之后，我们有了《实现领域驱动设计》。DDD将一个软件系统的核心业务功能集中在一个核心域里面，其中包含了实体、值对象、领域服务、资源库和聚合等概念。在此基础上，DDD提出了一套完整的支撑这样的核心领域的基础设施。此时，DDD已经不再是“面向对象进阶”那么简单了，而是演变成了一个系统工程。&lt;/p&gt;
&lt;p&gt;领域，即是一个组织的业务开展方式，业务价值便体现在其中。长久以来，我们程序员都是很好的技术型思考者，我们总是擅长从技术的角度来解决项目问题。但是，一个软件系统是否真正可用是通过它所提供的业务价值体现出来的。因此，与其每天钻在那些永远也学不完的技术中，何不将我们的关注点向软件系统所提供的业务价值方向思考思考，这也正是DDD所试图解决的问题。在DDD中，代码就是设计本身，你不再需要那些繁文缛节的并且永远也无法得到实时更新的设计文档。编码者与领域专家再也不需要翻译才能理解对方所表达的意思。DDD有战略设计和战术设计之分。战略设计主要从高层“俯视”我们的软件系统，帮助我们精准地划分领域以及处理各个领域之间的关系；而战术设计则从技术实现的层面教会我们如何具体地实施DDD。&lt;/p&gt;
&lt;h1 id=&#34;ddd之战略设计&#34;&gt;DDD之战略设计&lt;/h1&gt;
&lt;p&gt;DDD的战略设计主要包括领域/子域、通用语言、限界上下文和架构风格等概念。&lt;/p&gt;
&lt;h2 id=&#34;1领域和子域domainsubdomain&#34;&gt;1、领域和子域（Domain/Subdomain）&lt;/h2&gt;
&lt;p&gt;领域驱动设计关注点应该放在如何设计领域模型上，以及对领域模型的划分。&lt;/p&gt;
&lt;p&gt;领域的概念：一个电商网站的领域包含了产品名录、订单、发票、库存和物流的概念。领域的划分是将一个大的领域划分成若干个子域。通常会将一个大型的软件系统拆分成若干个子系统。这种划分有可能是基于架构方面的考虑，也有可能是基于基础设施的。DDD对系统的划分是基于领域的，即基于业务。第一个问题，哪些概念应该建模在哪些子系统里面？第二个问题是，各个子系统之间的应该如何集成？如何解决？答案是：限界上下文和上下文映射图。&lt;/p&gt;
&lt;h2 id=&#34;2限界上下文bounded-context&#34;&gt;2、限界上下文（Bounded Context）&lt;/h2&gt;
&lt;p&gt;在一个领域/子域中，我们会创建一个概念上的领域边界，在这个边界中，任何领域对象都只表示特定于该边界内部的确切含义。这样边界便称为限界上下文。限界上下文和领域具有一对一的关系。将一个限界上下文中的所有概念，包括名词、动词和形容词全部集中在一起，我们便为该限界上下文创建了一套通用语言。通用语言是一个团队所有成员交流时所使用的语言，业务分析人员、编码人员和测试人员都应该直接通过通用语言进行交流。&lt;/p&gt;
&lt;p&gt;上文中的各个子域之间的集成问题，是限界上下文之间的集成问题。防腐层负责与外部服务提供方打交道，还负责将外部概念翻译成自己的核心领域能够理解的概念。当然，防腐层只是限界上下文之间众多集成方式的一种，另外还有共享内核、开放主机服务等，具体细节请参考 《实现领域驱动设计》原书。限界上下文之间的集成关系也可以理解为是领域概念在不同上下文之间的映射关系，因此，限界上下文之间的集成也称为上下文映射图。&lt;/p&gt;
&lt;h2 id=&#34;3架构风格architecture&#34;&gt;3、架构风格（Architecture）&lt;/h2&gt;
&lt;p&gt;DDD并不要求采用特定的架构风格，因为它是对架构中立的。可以采用传统的三层式架构，也可以采用REST架构和事件驱动架构等。但是在《实现领域驱动设计》中，作者比较推崇事件驱动架构和六边形（Hexagonal）架构。在六边形架构中，已经不存在分层的概念，所有组件都是平等的。这主要得益于软件抽象的好处，即各个组件的之间的交互完全通过接口完成，而不是具体的实现细节。Robert C. Martin：抽象不应该依赖于细节，细节应该依赖于抽象。&lt;/p&gt;
&lt;p&gt;采用六边形架构的系统中存在着很多端口和适配器的组合。端口表示的是一个软件系统的输入和输出，而适配器则是对每一个端口的访问方式。&lt;/p&gt;
&lt;h1 id=&#34;ddd之战术设计&#34;&gt;DDD之战术设计&lt;/h1&gt;
&lt;p&gt;战略设计为我们提供一种高层视野来审视我们的软件系统，而战术设计则将战略设计进行具体化和细节化，它主要关注的是技术层面的实施，也是对我们程序员来得最实在的地方。&lt;/p&gt;
&lt;h2 id=&#34;1领域对象&#34;&gt;1、领域对象&lt;/h2&gt;
&lt;p&gt;领域对象能够准确地表达出业务意图，但多数时候却是充满getter和setter的领域对象，此时的领域对象已经不是领域对象了，而是Martin Fowler所称之为的贫血对象。.NET里面很好地支持非贫血对象。&lt;/p&gt;
&lt;h2 id=&#34;2实体vs值对象entity-vs-value-object&#34;&gt;2、实体vs值对象（Entity vs Value Object）&lt;/h2&gt;
&lt;p&gt;软件系统中实体表示那些具有生命周期并且会在其生命周期中发生改变的东西；而值对象则表示起描述性作用的并且可以相互替换的概念。同一个概念，在一个软件系统中被建模成了实体，但是在另一个系统中则有可能是值对象。&lt;/p&gt;
&lt;h2 id=&#34;3聚合aggregate&#34;&gt;3、聚合（Aggregate）&lt;/h2&gt;
&lt;p&gt;聚合是DDD中最难理解的概念 ，聚合中所包含的对象之间具有密不可分的联系，他们是内聚在一起的。比如一辆汽车（Car）包含了引擎（Engine）、车轮 （Wheel）和油箱（Tank）等组件，缺一不可。一个聚合中可以包含多个实体和值对象，因此聚合也被称为根实体。聚合是持久化的基本单位，它和资源库具有一一对应的关系。&lt;/p&gt;
&lt;h2 id=&#34;4领域服务domain-service&#34;&gt;4、领域服务（Domain Service）&lt;/h2&gt;
&lt;p&gt;领域概念放在实体上不合适，放在值对象上也不合适，领域服务本来就是来处理这种场景的。比如对密码进行加密，可以创建一个 PasswordEncryptService来专门负责此事。&lt;/p&gt;
&lt;h2 id=&#34;5资源库repository&#34;&gt;5、资源库（Repository）&lt;/h2&gt;
&lt;p&gt;资源库用于保存和获取聚合对象，资源库与DAO相似。但资源库和DAO存在显著区别。DAO只是对数据库的一层很薄的封装，而资源库则更加具有领域特征。另外，所有的实体都可以有相应的DAO，但并不是所有的实体都有资源库，只有聚合才有相应的资源库。资源库分为两种，一种是基于集合的，一种是基于持久化的。顾名思义，基于集合的资源库具有编程语言中集合的特征。&lt;/p&gt;
&lt;h2 id=&#34;6领域事件domain-event&#34;&gt;6、领域事件（Domain Event）&lt;/h2&gt;
&lt;p&gt;《领域驱动设计》中并没有提到领域事件，领域事件是最近几年才加入DDD生态系统的。微服务（Micro Service）的架构中，整个系统被分成了很多个轻量的程序模块，他们之间的数据一致性并不容易通过事务一致性完成，领域事件便可以用于处理上述问题，此时最终一致性取代了事务一致性，通过领域事件的方式达到各个组件之间的数据一致性。&lt;/p&gt;</description>
    </item>
    <item>
      <title>澳新之行</title>
      <link>https://dodoro.chouxiangpai.com/archives/639/</link>
      <pubDate>Fri, 10 May 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/639/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606145906.jpg&#34;&gt;&lt;img alt=&#34;微信图片_20190606145906&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/639/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606145906-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这趟旅行我们酝酿了将近一年时间。今年正好是我们结婚七周年，而从去年开始，澳新这两个国家就一直在我们家里反复被提起讨论，连宝宝都是不是冒出阿德莱德、奥克兰、悉尼、墨尔本了。想想如果不先出去看看，对于我们都没有出过国的人来说，讨论migration貌似真的有点夸张。正好从网上、电视上看，这两个国家的景色和环境都非常棒，所以我们就打算作为旅行地。&lt;/p&gt;
&lt;p&gt;从北京出发，穿过中国的大江南北，穿过黄河、长江、南海，穿过马来西亚，来到新加坡，休息一晚上，从新加坡穿过南太平洋，来到澳大利亚的上空，穿过帕斯、穿过阿德莱德，来到墨尔本。&lt;/p&gt;
&lt;h2 id=&#34;一墨尔本&#34;&gt;一、墨尔本&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606153223.jpg&#34;&gt;&lt;img alt=&#34;微信图片_20190606153223&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/639/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606153223-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;墨尔本气候宜人，人文氛围好。这是皇家植物园，确实名不虚传。&lt;/p&gt;
&lt;h2 id=&#34;二悉尼&#34;&gt;二、悉尼&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606152923.jpg&#34;&gt;&lt;img alt=&#34;微信图片_20190606152923&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/639/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606152923-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; 悉尼确实很繁华，她的繁华体现在几乎每个地方都很发达。这是悉尼歌剧院和海港大桥。&lt;/p&gt;
&lt;h2 id=&#34;三奥克兰&#34;&gt;三、奥克兰&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606152931.jpg&#34;&gt;&lt;img alt=&#34;微信图片_20190606152931&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/639/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606152931-225x300.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;奥克兰是新西兰的首都，但因为准备举办帆船世界杯，到处都在施工，而且山地多，所以整体的感觉没有澳洲方便。当然，伊甸山还是很棒的。&lt;/p&gt;
&lt;h2 id=&#34;四皇后镇格林诺奇剑镇和瓦纳卡湖&#34;&gt;四、皇后镇（格林诺奇、剑镇和瓦纳卡湖）&lt;/h2&gt;
&lt;p&gt;新西兰的自然环境无可挑剔，真的是100%纯净的新西兰。皇后镇很美，格林诺奇是一个来了就不想走的地方，秋天的剑镇更是让人心醉。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;微信图片_20190606152928&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/639/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606152928-225x300.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;这是箭镇，而文章最开始那张是格林诺奇，爱人和女儿的合影。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;微信图片_20190606155841&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/639/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606155841-300x225.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;这是瓦纳卡湖，没有什么比这个湖更美的了。&lt;/p&gt;
&lt;h2 id=&#34;五惠灵顿&#34;&gt;五、惠灵顿&lt;/h2&gt;
&lt;p&gt;惠灵顿是首都，所以更让人舒适，而且这里居住的人，很多是英国人的后裔，感觉他们依然秉承英伦gentle之风。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606155800.jpg&#34;&gt;&lt;img alt=&#34;微信图片_20190606155800&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/639/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190606155800-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET Core 3.0-preview3 发布</title>
      <link>https://dodoro.chouxiangpai.com/archives/632/</link>
      <pubDate>Wed, 06 Mar 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/632/</guid>
      <description>&lt;p&gt;.NET Core 3.0 Preview 3已经发布，框架和ASP.NET Core有许多有趣的更新。这是最重要的更新列表。 下载地址 :https://aka.ms/netcore3download 。&lt;/p&gt;
&lt;p&gt;.NET Core 3.0的更新：&lt;/p&gt;
&lt;p&gt;C＃中对索引和范围的更多支持&lt;/p&gt;
&lt;p&gt;支持.NET Standard 2.1。以.NET Standard项目文件为目标，并将netstandard2.1指定为目标框架。完整的.NET Framework不支持.NET Standard 2.1。&lt;/p&gt;
&lt;p&gt;F＃4.6和dotnet fsi命令。可以使用F＃4.6和dotnet fsi命令的预览。FSI代表F＃互动。&lt;/p&gt;
&lt;p&gt;AssemblyDependencyResolver和resolver事件。从给定路径加载依赖程序集（之前不可能），解析程序事件可帮助我们更好地处理动态加载的本机依赖项。&lt;/p&gt;
&lt;p&gt;Windows Forms应用程序的高DPI。最后，微软将Windows Forms应用程序推向了当今时代。96DPI不再适用，并且可以构建高DP Windows窗体应用程序。&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;ASP.NET Core 3.0的更新：&lt;/p&gt;
&lt;p&gt;Razor组件的改进。现在2个项目合并成单个项目模板，Razor组件支持端点路由和预渲染，Razor组件可以托管在Razor类库中。还改进了事件处理和表单和验证支持。&lt;/p&gt;
&lt;p&gt;运行时编译。它在ASP.NET Core 3.0模板中被禁用，但现在可以通过向项目添加特殊的NuGet包来打开它。&lt;/p&gt;
&lt;p&gt;Worker Service 模板。需要编写Windows服务还是Linux守护进程？现在我们有了Worker Service 模板。&lt;/p&gt;
&lt;p&gt;gRPC模板。与谷歌一起构建的gRPC是一种流行的远程过程调用（RPC）框架。此版本的ASP.NET Core在ASP.NET Core上引入了第一等的gRPC支持。&lt;/p&gt;
&lt;p&gt;Angular模板使用Angular 7. Angular SPA模板现在使用Angular 7，在第一次稳定释放之前，它将被Angular 8替换。&lt;/p&gt;
&lt;p&gt;SPA-s的身份验证。Microsoft通过此预览为单页应用程序添加了现成的身份验证支持。&lt;/p&gt;
&lt;p&gt;SignalR与端点路由集成。小变化 - 现在使用端点路由定义SingalR路由。&lt;/p&gt;
&lt;p&gt;SignalR Java客户端支持长轮询。即使在不支持或不允许WebSocket的环境中，SignalR Java客户端现在也可以使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】浅谈我对DDD领域驱动设计的理解</title>
      <link>https://dodoro.chouxiangpai.com/archives/621/</link>
      <pubDate>Wed, 06 Mar 2019 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/621/</guid>
      <description>&lt;h1 id=&#34;遇到问题开始&#34;&gt;遇到问题开始&lt;/h1&gt;
&lt;p&gt;当人们要做一个软件系统时，一般总是因为遇到了什么问题，然后希望通过一个软件系统来解决。&lt;/p&gt;
&lt;p&gt;比如，我是一家企业，然后我觉得我现在线下销售自己的产品还不够，我希望能够在线上也能销售自己的产品。所以，自然而然就想到要做一个普通电商系统，用于实现在线销售自己企业产品的目的。&lt;/p&gt;
&lt;p&gt;再比如，我是一家互联网公司，公司有很多系统对外提供服务，面向很多客户端设备。但是最近由于各种原因，导致服务经常出故障。所以，我们希望通过各种措施提高服务的质量和稳定性。其中的一个措施就是希望能做一个灰度发布的平台，这个平台可以提供灰度发布的服务。然后，当某个业务系统做了一些修改并需要发布时，可以使用我们的灰度发布平台来非常方便的实现灰度发布的功能。比如在灰度发布平台上方便的定制允许哪些特定的客户端才会访问新服务，哪些客户端继续使用老服务。灰度发布平台可以提供各种灰度的策略。有了这样的灰度发布机制，那即便系统的新逻辑有什么问题，受影响的面也不会很大，在可控范围内。所以，如果公司里的所有对外提供服务的系统都接入了灰度平台，那这些系统的发布环节就可以更加有保障了。&lt;/p&gt;
&lt;p&gt;总之，我们做任何一个软件系统，都是有原因的，否则就没必要做这个系统，而这个原因就是我们遇到的问题。所以，通过问题，我们就知道了我们需要一个什么样的系统，这个系统解决什么样的问题。最后，我们就很自然的得出了一个目标，即知道了自己要什么。比如我要做一个论坛、一个博客系统、一个电商平台、一个灰度发布系统、一个IDE、一个分布式消息队列、一个通信框架，等等。&lt;/p&gt;
&lt;h1 id=&#34;ddd切入点1---理解概念&#34;&gt;DDD切入点1 - 理解概念&lt;/h1&gt;
&lt;p&gt;DDD的全称为Domain-driven Design，即领域驱动设计。下面我从领域、问题域、领域模型、设计、驱动这几个词语的含义和联系的角度去阐述DDD是如何融入到我们平时的软件开发初期阶段的。要理解什么是领域驱动设计，首先要理解什么是领域，什么是设计，还有驱动是什么意思，什么驱动什么。&lt;/p&gt;
&lt;h2 id=&#34;一什么是领域domain&#34;&gt;一、什么是领域（Domain）？&lt;/h2&gt;
&lt;p&gt;前面我们已经清楚的知道我们现在要做一个什么样的系统，这个系统需要解决什么问题。我认为任何一个系统都会属于某个特定的领域，比如论坛是一个领域，只要你想做一个论坛，那这个论坛的核心业务是确定的，比如都有用户发帖、回帖等核心基本功能。比如电商平台、普通电商系统，这种都属于网上电商领域，只要是这个领域的系统，那都有商品浏览、购物车、下单、减库存、付款交易等核心环节。所以，同一个领域的系统都具有相同的核心业务，因为他们要解决的问题的本质是类似的。&lt;/p&gt;
&lt;p&gt;因此，我们可以推断出，一个领域本质上可以理解为就是一个问题域，只要是同一个领域，那问题域就相同。所以，只要我们确定了系统所属的领域，那这个系统的核心业务，即要解决的关键问题、问题的范围边界就基本确定了。通常我们说，要成为一个领域的专家，必须要在这个领域深入研究很多年才行。因为只有你研究了很多年，你才会遇到非常多的该领域的问题，同时你解决这个领域中的问题的经验也非常丰富。很多时候，领域专家比技术专家更加吃香，比如金融领域的专家。&lt;/p&gt;
&lt;h2 id=&#34;二什么是设计design&#34;&gt;二、什么是设计（Design）？&lt;/h2&gt;
&lt;p&gt;DDD中的设计主要指领域模型的设计。为什么是领域模型的设计而不是架构设计或其他的什么设计呢？因为DDD是一种基于模型驱动开发的软件开发思想，强调领域模型是整个系统的核心，领域模型也是整个系统的核心价值所在。每一个领域，都有一个对应的领域模型，领域模型能够很好的帮我们解决复杂的业务问题。&lt;/p&gt;
&lt;p&gt;从领域和代码实现的角度来理解，领域模型绑定了领域和代码实现，确保了最终的代码实现就一定是解决了领域中的核心问题的。因为：1）领域驱动领域模型设计；2）领域模型驱动代码实现。我们只要保证领域模型的设计是正确的，就能确定领域模型可以解决领域中的核心问题；同理，我们只要保证代码实现是严格按照领域模型的意图来落地的，那就能保证最后出来的代码能够解决领域的核心问题的。这个思路，和传统的分析、设计、编码这几个阶段被割裂（并且每个阶段的产物也不同）的软件开发方法学形成鲜明的对比。&lt;/p&gt;
&lt;h2 id=&#34;三什么是驱动driven&#34;&gt;三、什么是驱动（Driven）？&lt;/h2&gt;
&lt;p&gt;上面其实已经提到了，就是：1）领域驱动领域模型设计；2）领域模型驱动代码实现。这个就和我们传统的数据库驱动开发的思路形成对比了。DDD中，我们总是以领域为边界，分析领域中的核心问题（核心关注点），然后设计对应的领域模型，再通过领域模型驱动代码实现。而像数据库设计、持久化技术等这些都不是DDD的核心，而是外围的东西。&lt;/p&gt;
&lt;p&gt;领域驱动设计（DDD）告诉我们的最大价值我觉得是：当我们要开发一个系统时，应该尽量先把领域模型想清楚，然后再开始动手编码，这样的系统后期才会很好维护。但是，很多项目（尤其是互联网项目，为了赶工）都是一开始模型没想清楚，一上来就开始建表写代码，代码写的非常冗余，完全是过程是的思考方式，最后导致系统非常难以维护。而且更糟糕的是，出来混总是要还的，前期的领域模型设计的不好，不够抽象，如果你的系统会长期需要维护和适应业务变化，那后面你一定会遇到各种问题维护上的困难，比如数据结构设计不合理，代码到处冗余，改BUG到处引入新的BUG，新人对这种代码上手困难，等。而那时如果你再想重构模型，那要付出的代价会比一开始重新开发还要大，因为你还要考虑兼容历史的数据，数据迁移，如何平滑发布等各种头疼的问题。所以，就导致我们最后天天加班。&lt;/p&gt;
&lt;p&gt;虽然，我们都知道这个道理，但是我也明白，人的习惯很难改变的，大部分人都很难从面向过程式的想到哪里写到哪里的思想转变为基于系统化的模型驱动的思维。我想，这或许是DDD很难在中国或国外流行起来的原因吧。但是，我想这不应该成为我们放弃学习DDD的原因，对吧！&lt;/p&gt;
&lt;h2 id=&#34;概念总结&#34;&gt;概念总结：&lt;/h2&gt;
&lt;p&gt;领域就是问题域，有边界，领域中有很多问题；&lt;/p&gt;
&lt;p&gt;任何一个系统要解决的那个大问题都对应一个领域；&lt;/p&gt;
&lt;p&gt;通过建立领域模型来解决领域中的核心问题，模型驱动的思想；&lt;/p&gt;
&lt;p&gt;领域建模的目标针对我们在领域中所关心的问题，即只针对核心关注点，而不是整个领域中的所有问题；&lt;/p&gt;
&lt;p&gt;领域模型在设计时应考虑一定的抽象性、通用性，以及复用价值；&lt;/p&gt;
&lt;p&gt;通过领域模型驱动代码的实现，确保代码让领域模型落地，代码最终能解决问题；&lt;/p&gt;
&lt;p&gt;领域模型是系统的核心，是领域内的业务的直接沉淀，具有非常大的业务价值；&lt;/p&gt;
&lt;p&gt;技术架构设计或数据存储等是在领域模型的外围，帮助领域模型进行落地。&lt;/p&gt;
&lt;h1 id=&#34;ddd切入点2---理解领域拆分领域细化领域&#34;&gt;DDD切入点2 - 理解领域、拆分领域、细化领域&lt;/h1&gt;
&lt;h2 id=&#34;一理解领域知识是基础&#34;&gt;一、理解领域知识是基础&lt;/h2&gt;
&lt;p&gt;上面我们通过第一步，虽然我们明确了要做一个什么样的系统，该系统主要解决什么问题，但是就这样我们还无法开始进行实际的需求分析和模型设计，我们还必须将我们的问题进行拆分，需求进行细化。有些时候，需求方，即提出问题的人，很可能自己不清楚具体想要什么。他只知道一个概念，一个大的目标。比如他只知道要做一个股票交易系统，一个灰度发布系统，一个电商平台，一个开发工具，等。但是他不清楚这些系统应该具体做成什么样子。这个时候，我认为领域专家就非常重要了，DDD也非常强调领域专家的重要性。因为领域专家对这个领域非常了解，对领域内的各种业务场景和各种业务规则也非常清楚，总之，对这个领域内的一切业务相关的知识都非常了解。所以，他们自然就有能力表达出系统该做成什么样子。所以，要知道一个系统到底该做成什么样子，到底哪些是核心业务关注点，只能靠沉淀领域内的各种知识，别无他法。因此，假设你现在打算做一个电商平台，但是你对这个领域没什么了解，那你一定得先去了解下该领域内主流的电商平台，比如淘宝、天猫、京东、亚马逊等。这个了解的过程就是你沉淀领域知识的过程。如果你不了解，就算你领域建模的能力再强，各种技术架构能力再强也是使不上力。领域专家不是某个固定的角色，而是某一类人，这类人对这个领域非常了解。比如，一个开发人员也可以是一个领域专家。假设你在一个公司开发和维护一个系统已经好几年了，但是这个系统的产品经理（PD）可能已经换过好几任了，这种情况下，我相信这几任产品经理都没有比你更熟悉这个领域。&lt;/p&gt;
&lt;h2 id=&#34;二拆分领域&#34;&gt;二、拆分领域&lt;/h2&gt;
&lt;p&gt;上面我们明白了，领域建模的基础是要先理解领域，让自己成为领域专家。如果做到了这点，我们就打好了坚实的基础了。但是，有时一个领域往往太复杂，涉及到的领域概念、业务规则、交互流程太多，导致我们没办法直接针对这个大的领域进行领域建模。所以，我们需要将领域进行拆分，本质上就是把大问题拆分为小问题，然后各个击破的思路。然后既然把一个大的领域划分为了多个小的领域（子域），那最关键的就是要理清每个子域的边界；然后要搞清楚哪些子域是核心子域，哪些是非核心子域，哪些是公共支撑子域；然后，还要思考子域之间的联系是什么。那么，我们该如何划分子域呢？我的个人看法是从业务相关性的角度去思考，也就是我们平时说的按业务功能为出发点进行划分。还是拿经典的电商系统来分析，通常一个电商系统都会包含好几个大块，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3 id=&#34;会员中心负责用户账号登录用户信息的管理&#34;&gt;会员中心：负责用户账号登录、用户信息的管理；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;商品中心负责商品的展示导航维护&#34;&gt;商品中心：负责商品的展示、导航、维护；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;订单中心负责订单的生成和生命周期管理&#34;&gt;订单中心：负责订单的生成和生命周期管理；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;交易中心负责交易相关的业务&#34;&gt;交易中心：负责交易相关的业务；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;库存中心负责维护商品的库存&#34;&gt;库存中心：负责维护商品的库存；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;促销中心负责各种促销活动的支持&#34;&gt;促销中心：负责各种促销活动的支持；&lt;/h3&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上面这些中心看起来很自然，因为大家对电子商务的这个领域都已经非常熟悉了，所以都没什么疑问，好像很自然的样子。所以，领域划分是不是就是没什么挑战了呢？显然不是。之所以我们觉得子域划分很简单，是因为我们对整个大领域非常了解了。如果我们遇到一个冷门的领域，就没办法这么容易的去划分子域了。这就需要我们先去努力理解领域内的知识。所以，我个人从来不相信什么子域划分的技巧什么的东西，因为我觉得这个工作没有任何诀窍可以使用。当我们不了解一个东西的时候，如何去拆解它？当我们对整个领域有一定的熟悉了，了解了领域内的相关业务的本质和关系，我们就自然而然的能划分出合理的子域了。不过并不是所有的系统都需要划分子域的，有些系统只是解决一个小问题，这个问题不复杂，可能只有一两个核心概念。所以，这种系统完全不需要再划分子域。但不是绝对的，当一个领域，我们的关注点越来越多，每个关注点我们关注的信息越来越多的时候，我们会不由自主的去进一步的划分子域。比如，也许我们一开始将商品和商品的库存都放在商品中心里，但是后来由于库存的维护越来越复杂，导致揉在一起对我们的系统维护带来一定的困难时，我们就会考虑将两者进行拆分，这个就是所谓的业务垂直分割。&lt;/p&gt;
&lt;h2 id=&#34;三细化子域&#34;&gt;三、细化子域&lt;/h2&gt;
&lt;p&gt;通过上面的两步，我们了解了领域里的知识，也对领域进行了子域划分。但这样还不够，凭这些我们还无法进行后续的领域模型设计。我们还必须再进一步细化每个子域，进一步明确每个子域的核心关注点，即需求细化。我觉得我们需要细化的方面有以下几点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;h3 id=&#34;梳理领域概念梳理出领域内我们关注的概念概念的关系并统一交流词汇形成统一语言&#34;&gt;梳理领域概念：梳理出领域内我们关注的概念、概念的关系，并统一交流词汇，形成统一语言；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;梳理业务规则梳理出领域内我们关注的各种业务规则ddd中叫不变性invariants比如唯一性规则余额不能小于零等&#34;&gt;梳理业务规则：梳理出领域内我们关注的各种业务规则，DDD中叫不变性（invariants），比如唯一性规则，余额不能小于零等；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;梳理业务场景梳理出领域内的核心业务场景比如电商平台中的加入购物车提交订单发起付款等核心业务场景&#34;&gt;梳理业务场景：梳理出领域内的核心业务场景，比如电商平台中的加入购物车、提交订单、发起付款等核心业务场景；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;梳理业务流程梳理出领域内的关键业务流程比如订单处理流程退款流程等&#34;&gt;梳理业务流程：梳理出领域内的关键业务流程，比如订单处理流程，退款流程等；&lt;/h3&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;从上面这4个方面，我们从领域概念、业务规则、交互场景、业务流程等维度梳理了我们到底要什么，整理了整个系统应该具备的功能。这个工作我觉得是一个非常具有创造性和有难度的工作。我们一方面会主观的定义我们想要什么；另一方面，我们还会思考我们要的东西的合理性。我认为这个就是产品经理的工作，产品经理必须要负起职责，把他的产品充分设计好，从各个方面去考虑，如何设计一个产品，才能更好的解决用户的核心诉求，即领域内的核心问题。如果对领域不够了解，如果想不清楚用户到底要什么，如果思考问题不够全面，谈何设计出一个合理的产品呢？&lt;/p&gt;
&lt;p&gt;关于领域概念的梳理，我觉得可以采用四色原型分析法，这个分析法通过系统的方法，将概念划分为不同的种类，为不同种类的概念标注不同的颜色。然后将这些概念有机的组合起来，从而让我们可以清晰的分析出概念和概念之间的关系。有兴趣的同学可以在网上搜索下&lt;a href=&#34;http://www.cnblogs.com/netfocus/archive/2011/03/05/1971899.html&#34;&gt;四色原型&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：上面我说的这四点，重点是梳理出我们要什么功能，而不是思考如何实现这些功能，如何实现是软件设计人员的职责。&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&#34;ddd切入点3---领域模型设计&#34;&gt;DDD切入点3 - 领域模型设计&lt;/h1&gt;
&lt;p&gt;这部分内容，我想学习DDD的人都很熟悉了。DDD原著中提出了很多实用的建模工具：聚合、实体、值对象、工厂、仓储、领域服务、领域事件。我们可以使用这些工具，来设计每一个子域的领域模型。最终通过领域模型图将设计沉淀下来。要使用这些工具，首先就要理解每个工具的含义和使用场景。不要以为很简单哦，比如聚合的划分就是一个非常具有艺术的活。同一个系统，不同的人设计出来的聚合是完全不同的。而且很有可能高手之间的最后设计出来的差别反而更大，实际上我认为是世界观的相互碰撞，呵呵。所以，要领域建模，我觉得每个人都应该去学学哲学知识，这有助于我们更好的认识世界，更好的理解事物的本质。&lt;/p&gt;
&lt;p&gt;关于这些建模工具的概念和如何运用我就不多展开了，我博客里也有很多这方面的介绍。下面我再讲一下我认为比较重要的东西，比如到底该如何领域建模？步骤应该是怎么样的？&lt;/p&gt;
&lt;h2 id=&#34;一领域建模的方法&#34;&gt;一、领域建模的方法&lt;/h2&gt;
&lt;p&gt;通过上面我介绍的细化子域的内容，现在再来谈该如何领域建模，我觉得就方便很多了。我的主要方法是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;h3 id=&#34;划分好边界上下文通常每个子域sub-domain对应一个边界上下文bounded-context同一个边界上下文中的概念是明确的没有任何歧义&#34;&gt;划分好边界上下文，通常每个子域（sub domain）对应一个边界上下文（bounded context），同一个边界上下文中的概念是明确的，没有任何歧义；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;在每个边界上下文中设计领域模型具体的领域模型设计方法有很多种如以场景为出发点的四色原型分析法或者我早期写的这篇文章这个步骤最核心的就是找出聚合根并找出每个聚合根包含的信息关于如何设计聚合可以看一下我写的这篇文章&#34;&gt;在每个边界上下文中设计领域模型，具体的领域模型设计方法有很多种，如以场景为出发点的&lt;a href=&#34;http://www.cnblogs.com/netfocus/archive/2011/03/05/1971899.html&#34;&gt;四色原型&lt;/a&gt;分析法，或者我早期写的这篇&lt;a href=&#34;http://www.cnblogs.com/netfocus/archive/2011/09/18/2180656.html&#34;&gt;文章&lt;/a&gt;；这个步骤最核心的就是找出聚合根，并找出每个聚合根包含的信息；关于如何设计聚合，可以看一下我写的&lt;a href=&#34;http://www.cnblogs.com/netfocus/p/3307971.html&#34;&gt;这篇文章&lt;/a&gt;；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;画出领域模型图圈出每个模型中的聚合边界&#34;&gt;画出领域模型图，圈出每个模型中的聚合边界；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;设计领域模型时要考虑该领域模型是否满足业务规则同时还要综合考虑技术实现等问题比如并发问题领域模型不是概念模型概念模型不关注技术实现领域模型关心所以领域模型才能直接指导编码实现&#34;&gt;设计领域模型时，要考虑该领域模型是否满足业务规则，同时还要综合考虑技术实现等问题，比如并发问题；领域模型不是概念模型，概念模型不关注技术实现，领域模型关心；所以领域模型才能直接指导编码实现；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;思考领域模型是如何在业务场景中发挥作用的以及是如何参与到业务流程的每个环节的&#34;&gt;思考领域模型是如何在业务场景中发挥作用的，以及是如何参与到业务流程的每个环节的；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;场景走查确认领域模型是否能满足领域中的业务场景和业务流程&#34;&gt;场景走查，确认领域模型是否能满足领域中的业务场景和业务流程；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;模型持续重构完善精炼&#34;&gt;模型持续重构、完善、精炼；&lt;/h3&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;二领域模型的核心作用&#34;&gt;二、领域模型的核心作用：&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;h3 id=&#34;抽象了领域内的核心概念并建立概念之间的关系&#34;&gt;抽象了领域内的核心概念，并建立概念之间的关系；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;领域模型承担了领域内的状态的维护&#34;&gt;领域模型承担了领域内的状态的维护；&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;领域模型维护了领域内的数据之间的业务规则数据一致性&#34;&gt;领域模型维护了领域内的数据之间的业务规则，数据一致性；&lt;/h3&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;需要特别注意的是，领域模型设计只是整个软件设计中的很小一部分。除了领域模型设计之外，要落地一个系统，我们还有非常多的其他设计要做，比如：&lt;/p&gt;</description>
    </item>
    <item>
      <title>讲给女儿的故事</title>
      <link>https://dodoro.chouxiangpai.com/archives/736/</link>
      <pubDate>Thu, 20 Sep 2018 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/736/</guid>
      <description>&lt;p&gt;&lt;strong&gt;白雪公主和白马王子的故事&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在很久很久以前，有一位美丽的白雪公主，她有一头乌黑的长发、圆圆的脸蛋、明亮的眼睛、弯弯的眉毛和苗条的身体。白雪公主住在城堡里面，过着幸福快乐的生活。白雪公主有七个好朋友，他们是七个小矮人，小矮人住在城堡附近的小森林里面，过着无忧无虑的生活。小森林里面有各种各样的动物和植物，有小松鼠、小考拉、小袋鼠、小熊猫、小鼹鼠、小河马、小企鹅等等等，还有松树、柳树、银杏树、橡树、枫树和果树。白雪公主经常和小矮人一起到小森林里面玩耍，他们在小森林里能看见美丽的草地、潺潺的小溪、美丽的彩虹，还可以看日出和日落，他们玩得非常开心。&lt;/p&gt;
&lt;p&gt;有一天，城堡里面来了一个可怕的巫师，他把白雪公主的爸爸妈妈抓起来了，并且还给白雪公主施了一个魔咒：让白雪公主永远地睡着醒不过来，除非有一天白雪公主遇到一个真正爱着她的王子，她才能醒过来。七个小矮人把白雪公主偷偷带出了城堡，来到了小森林。那个巫师追赶着他们来到小森林，不过巫师不敢靠近小森林，因为小森林里也有小矮人的魔法，邪恶的巫师不能进入小森林。于是，这个巫师在小森林的周边也施了魔咒，让小森林看起来很可怕，这样就没有人敢靠近小森林，他要永远困住白雪公主。&lt;/p&gt;
&lt;p&gt;小矮人们在小森林给白雪公主建了一个别墅，并且精心地照顾白雪公主，他们希望有一天白雪公主能够遇到爱着她的王子，这样她就可以醒过来了。终于有一天，有一位来着东方的英俊王子，他骑着白色的骏马来到了小森林，他叫白马王子。他很久以前就听说这里有一座美丽的小森林，所以他决定要冒一次险，去探索这个小森林。经过一番努力，白马王子进入了森林，他被小森林迷住了，这是他见过的最美丽的森林。他来到了小别墅，看见里面睡着以为美丽的姑娘，他说这是我遇到的最美丽的一位姑娘。&lt;/p&gt;
&lt;p&gt;白马王子爱上了白雪公主，七个小矮人把白雪公主的遭遇告诉了白马王子，于是白马王子在白雪公主的额头轻轻地亲了一个吻，白雪公主醒过来了。白马王子带着白雪公主和七个小矮人回到了城堡，打败了巫师，救出了白雪公主的爸爸和妈妈。从此以后，白雪公主和白马王子过上了幸福快乐的生活。&lt;/p&gt;</description>
    </item>
    <item>
      <title>终于考过了总分6.5</title>
      <link>https://dodoro.chouxiangpai.com/archives/607/</link>
      <pubDate>Sat, 25 Aug 2018 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/607/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;images/photo.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/607/images/photo-300x199.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;去年给自己定了一个目标，一年时间考过4个7，但到现在分数只有：听7，说5.5，读6，写7，总分6.5。这个分数还不能达到澳洲最低要求，但幸运的是，过了新西兰的最低要求，而且我们的打分足够新西兰的分数了。&lt;/p&gt;
&lt;p&gt;爱人不想考虑新西兰，但她也不完全反对，毕竟如果真的走移民这条路，新西兰是保底选择。而我会继续考，努力达到7，最少要达到4个6.5，总分7。&lt;/p&gt;
&lt;p&gt;这段时间，爱人通过了职业评估，而我打算在努力到年底，争取过了这个考试再做职业评估，不过在这之前找了三家公司开了推荐信和工作证明，我们的移民之剑发出去了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>台湾之行</title>
      <link>https://dodoro.chouxiangpai.com/archives/612/</link>
      <pubDate>Fri, 01 Jun 2018 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/612/</guid>
      <description>&lt;p&gt;自从上次去马尔代夫后，因为宝宝出生，所以很久没有进行大的旅行。现在宝宝正好准备两岁，计划了半年多，这次终于去台湾旅行。&lt;/p&gt;
&lt;p&gt;台湾1895年中日甲午战争之后成为日本殖民地；1945年二战结束，民国政府接管台湾；内战之后蒋介石退居台湾；朝鲜战争之后美国派军舰驻台；上个世纪八十时代蒋经国进行政治改革，台湾成为亚洲发达经济体，并成为亚洲民主自由社会的标杆。&lt;/p&gt;
&lt;p&gt;香港和台湾继承和保留传统的中国文化和习俗，前两次去香港，总觉得香港还是太闹太繁华了，打算去台湾看看，这是驱动我们去台的原因之一。&lt;/p&gt;
&lt;p&gt;这两年两岸关系好像变冷，所以去台旅游的人应该少了很多，正好合适。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/IMG_20180502_150615.jpg&#34;&gt;&lt;img alt=&#34;IMG_20180502_150615&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/612/images/IMG_20180502_150615-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这次去台湾旅行，从南到北，垦丁和高雄、台中市、台北市（平溪线和九份），整体感觉很不错，希望台湾能保持这种感觉，有机会一定还会来。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】关于父母和自己的思考</title>
      <link>https://dodoro.chouxiangpai.com/archives/598/</link>
      <pubDate>Fri, 04 May 2018 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/598/</guid>
      <description>&lt;p&gt;转自水木社区的帖子。&lt;/p&gt;
&lt;p&gt;PS：作为一个也是从大山里出来，定居北京的游子，这篇文章道出了我前几年的纠结和现在的心态。其实真的是，只要爸爸妈妈健康快乐就好。&lt;/p&gt;
&lt;p&gt;年前我匆匆回了一趟西北老家，因为儿子年幼，不方便在严冬季节从南方带到北方去过年，所以我只能一个人回去。 踏进老屋，看到父亲正蹲在火炉前烤火，手里端着他那杆一尺来长的旱烟斗，一边吧嗒吧嗒地抽烟，一边往炉子里添柴火，有点儿“满面尘灰烟火色，两鬓苍苍十指黑”的感觉，身上的衣服也不干净，脚上还蹬着一双夏天的凉鞋，他把这鞋子当拖鞋穿，冬日里没事不用出门，穿简单的鞋子方便上下炕。母亲穿着臃肿的棉衣，圆得像个棉花球，外面罩着一件穿了很多年的罩衣，裤子比较窄小，上身的大衬托得下身看起来更小，总体看起来很不协调，裤子的两个膝盖处有两大块没有拍干净的黄土，显得邋遢。 这就是我的父亲母亲。十多年来，为了改变他们落后的形象，我费尽心力，衣服买了很多，但他们就独爱那几件旧衣服，新衣服大多压箱底了。他们每次拿到我买的新衣服，都碎碎念着：“浪费了，老了，不需要这么多了。”感觉接受一点儿好的东西就很有心理压力一样。不光穿衣服，生活的方方面面都如此。 他们的这种形象，搁几年前，我会有不悦，甚至会指责他们，但现在我不会了。不仅是因为他们已年近75岁，恐怕更因为我快40岁了。十多年来，我想让他们改变，结果他们没变，我却变了。比如现在看到父亲大冷天还穿着凉鞋，我就想他应该每天上上下下那个一米来高的炕头很多次，这说明身板还硬朗；看到母亲膝盖处两块没拍干净的黄土，我就想她还能跪着烧炕，说明身体还行。看到他们虽然衣着邋遢，但还能行动自如，甚至都还能下地干活，进门干家务，我无限欣慰，二老只要健康着，何必要求他们吃什么穿什么衣服多久洗一次？活到这个份上，外表已经不重要了，我所求的，唯有健康。 回想大学刚毕业那会儿，我内心的责任感何其沉重，我觉得就算我拼尽全力，也要让父母过上更好的生活，让他们早早地退休，不再干繁重的体力劳动，让他们穿着干净的衣服，悠闲地漫步在村里的小路上，就像我家旁边那位退休的小学教师一样。当时我还跟一个生意做得特别好的亲戚说过我的愿望，她说不可能实现。 果然，没有实现。因为没有人能改造得了别人的生活，更不可能改变别人的人生轨迹。每个人都在按照自己的生命历程行走着，他的能力，他的性格，他的情商，他的幸福感，他与伴侣的关系，他与这个世界的相处方式，等等等等，都决定着他的人生。外力，至多在经济层面做些改善，而幸福，却更多地取决于生活的点点滴滴，而这些点点滴滴是每时每刻的活法，只能当事人自己去面对，外人真的无能为力。 记得2010年我回家过年时，看到父母的生活状态，还《一声叹息》（点击阅读）来着，后来逐渐明白，每个人的命运都是自己把握的，正如那篇文章中所言：“你可以改变你能改变的，但是你必须接受你不能改变的，因为生活需要的是妥协，不是执拗。所以，尊重别人的生活，尊重别人生活中的权利，不要自以为是地去改变，也不要因为没有改变而懊悔自责，因为幸福有多种形式，你认为的幸福，未必就是他想要的。” 这不是推卸责任，这是一种成熟。心态上从年轻时候的奋力去改变到中年时期的坦然去适应，代表着你与这个世界的和解，也是个人境界的一种提升：由只从自己的的感受出发到尊重别人的感受。每年春节都会诞生无数乡愁题材的文章，这些文章诉说着游子们心中的无奈，吐露着游子们无法尽孝的愧疚，很多人更是不能承受这份生命之重，悲伤得不能自已。 其实，这又何必。用自己的双肩扛起父母的人生，父母未必幸福，用自己的双脚帮父母走完剩下的路也未必是父母所愿。无论何时，我们必须承认，父母与儿女，大部分时间里只能各自在自己的生活里遥望彼此，然后各自走着自己的路，谁都不能代替谁去生活，就像我在去年的一篇文章里说的：《父母与儿女，也是一段浅浅的缘分》。 常常，子女总自以为是地认为，给父母物质上最好的，让他们住洋楼，穿洋衣，吃洋餐，周游世界，才是幸福的，而完全忘记了父母内心的需求，忽视了父母内心被几十年的生活所锻造出来的幸福观，把自己认为的幸福生硬地套在父母的身上。做到了，沾沾自喜，做不到，耿耿于怀。 其实，不打断父母正常的生活恐怕才是最好的。这就犹如一颗大树，你觉得它长在贫瘠的地方受苦了，所以你想把它挪到自认为肥沃的土地上，为了成功挪走，你不惜砍掉它的枝枝蔓蔓，让他脱离曾经生长的环境，孤独地伫立在城市的钢筋水泥中间。你心安了，可树呢？ 所以，过年回家，无需太多乡愁，不要有无力感，也不要悲伤，高高兴兴地回，然后开开心心地走，只要父母还能自由行动健康生活，就无需太牵挂，其实他们也很幸福。&lt;/p&gt;</description>
    </item>
    <item>
      <title>成为深度学习专家的七个步骤</title>
      <link>https://dodoro.chouxiangpai.com/archives/681/</link>
      <pubDate>Sun, 10 Dec 2017 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/681/</guid>
      <description>&lt;p&gt;1、对机器学习有基本的理解，最好的材料是Andrew Ng在coursera上的公开课程，看过教程能让你对机器学习有基本的认识，完成课程中的任务会让你对机器学习有更深入的理解；&lt;/p&gt;
&lt;p&gt;2、接下来需要培养对神经网络的感觉，实现一个神经网络，并利用它做点事情；&lt;/p&gt;
&lt;p&gt;3、理解神经网络的原理很重要，但简单的神经网络并不足以解决最有趣的问题。神经网络的变体-卷积神经网络(CNN)非常适合于图像识别类的任务，斯坦福大学的有关资料如下：CS231n 用于图像识别的卷积神经网络(笔记)和课件。另外两个参考资料如下CNN 参考资料1和CNN 参考资料1。&lt;/p&gt;
&lt;p&gt;4、接下来需要在自己的电脑上运行CNN；&lt;/p&gt;
&lt;p&gt;step1：买一块GPU，安装CUDA开发工具包 step2：安装Caffe和GUI包Digit step3：安装Boinc，这个工具对你理解深度学习并没有帮助，但能够让其他研究人员在闲暇时间利用你的GPU做科研&lt;/p&gt;
&lt;p&gt;5、Digit提供了少量算法，比如用于字符识别的lenet算法和用于图像分类的Googlenet算法。要想运行这些算法，需要下载相应的数据集lenet数据集和Googlenet数据集。你也可以修改算法来执行其他的图像识别任务，比如我们的工作；&lt;/p&gt;
&lt;p&gt;6、对于自然语言处理任务，递归神经网络RNN更适合。学习RNN最好的材料是斯坦福的讲座及笔记，也可以下载Tensorflow来构建RNN；&lt;/p&gt;
&lt;p&gt;7、现在你可以尝试用深度学习来解决各种各样的难题了，比如面部识别、语音识别和自动驾驶等；&lt;/p&gt;
&lt;p&gt;如果你认真完成以上步骤，那么祝贺你，可以去Google、Baidu、Microsoft, Facebook或Amazon申请职位。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们萌生Migration的念头了</title>
      <link>https://dodoro.chouxiangpai.com/archives/604/</link>
      <pubDate>Thu, 31 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/604/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;images/eb5b84bf27864a9399cc88b07d0ae9d5_w.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/604/images/eb5b84bf27864a9399cc88b07d0ae9d5_w-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;女儿出生之后，我思考了很多关于未来的事情，这一年来读了不少政治哲学方面的图书，对自己的价值体系进行重构。今年起我陆陆续续有migration的念头，最大的驱动是三个：1、子女的教育和未来（我们不是京户，虽然这个问题可以取道天津，但总觉得心里不舒服；而如果走国际校，成本先不说，最终子女还是要往外走）；2、这两年帝都的雾霾（准确的说是整个国内的雾霾）让人窒息；3、对每天地铁以及所从事的工作开始有些厌烦，当然也是中年危机之前想给自己找点事情做。&lt;/p&gt;
&lt;p&gt;想migrate第一步肯定是先考英语，而我已经10年不学了。我选择PTE考试，因为估计雅思4个7我是绝对过不了。考试今天是我第一次参加PTE考试（相当于雅思），听5.5，说5，读6，写 6，总 6，这个成绩离4个7好遥远&amp;hellip;.但是既然决定了，真的考不过就当学英语吧，未来一年好好学习英语。&lt;/p&gt;</description>
    </item>
    <item>
      <title>深度学习随感</title>
      <link>https://dodoro.chouxiangpai.com/archives/591/</link>
      <pubDate>Sun, 04 Jun 2017 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/591/</guid>
      <description>&lt;p&gt;&amp;ldquo;深度学习是一个激情澎湃却又相对单一的领域。有一些深刻的想法，一些主要的学术会议，其中若干会议之间也存在着很多重叠。然后，一篇篇的论文在不断地提升和完善同样的一些基本想法：使用SGD（或者类似的变体）来优化一个代价函数。这些想法非常成功。但是我们现在还没有看到这个领域的健康发展，每个人在研究自己的深刻想法，将深度学习推向很多的方向。所以，根据社会复杂性度量，忽略文字游戏，深度学习仍然是一个相当粗浅的领域。现在还是可以完全地掌握该领域大多数的深刻想法的。&amp;rdquo; via:Michael Nielsen&lt;/p&gt;
&lt;p&gt;上世纪50、60年代神经网络曾经非常火爆，局限于计算能力和算法束缚，没有获得商用，迅速进入寒冬，但Hinton和Yann Lecun坚持做了二十多年，去年以来媒体对AI大肆渲染，而这两位深度学习的领袖却保持很理性的认识。下面是Yann Lecun在facebook的声明：AlphaGo战胜李世石后，Slashdot上有帖子帖子宣称：“我们现在知道，我们不需要任何大的新的突破，以获得真正的AI”。 这是完全，完全，可笑的错误。&lt;/p&gt;
&lt;p&gt;正如我在前面的陈述中所说的：大多数人类和动物学习是无监督的学习。 如果智力是一个蛋糕，无监督学习将是蛋糕，监督学习将是蛋糕上的糖霜，强化学习将是蛋糕上的樱桃。 我们知道如何做结冰和樱桃，但我们不知道如何做蛋糕。在我们想获得真正的AI之前，需要先解决无监督的学习问题。 这只是我们知道的一个障碍。还有大量的我们不知道的障碍。&lt;/p&gt;
&lt;p&gt;最近几年deep learning使得机器对图像，语音，人类语言的认知能力获得了质的飞跃，在图像识别方面甚至已经超越人类，出现了很多看起来是黑科技并且非常实用的技术，比如人脸识别，图片自动标注描述，机器翻译，无人车等等。但不应该去夸大AI，媒体的大肆宣传，会让大家都以为实现科幻电影里出现的强AI，这样只会换来失望，从而导致AI的下一个寒冬。当然，乐观的来讲，深度学习对于弱AI的发展起到了非常大的作用，而且也有理由相信未来(我觉得还需要近上百年的发展)肯定会诞生强AI。&lt;/p&gt;</description>
    </item>
    <item>
      <title>深度学习猜想</title>
      <link>https://dodoro.chouxiangpai.com/archives/593/</link>
      <pubDate>Thu, 04 May 2017 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/593/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;images/9a381ff121dc90d749a41bf4d84ee37d.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/593/images/9a381ff121dc90d749a41bf4d84ee37d-300x252.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;推荐所有立志从事机器学习特别是深度神经网络学习算法的人认真研读这本书。书评：作者从最根本最朴素的思想开始，结合实践进入深度神经网络，这本书堪称神经网络的几何原本。另外，第二章有非常多的多元微积分公式和证明，作者说可以跳过，但建议数学系毕业的人认真研读并完成证明，因为只有了解这些才可能进行算法的创新。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/80cbafcd89f8a0aa86db40ac53b825d0.jpg&#34;&gt;&lt;img alt=&#34;80cbafcd89f8a0aa86db40ac53b825d0&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/593/images/80cbafcd89f8a0aa86db40ac53b825d0-300x153.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果拉马努金在世，他应该能从上帝那里拿来神奇的公式，让深度学习的算法更优。另外，我猜想基于欧拉公式设计逻辑神经元的算法，或许会彻底改变神经网络算法—因为现在的S型神经元只包含自然对数e，英应该要加入pi，i，0和-1才是优美的。哦，这只是天马行空的猜想。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/42035f67eb75144096dcc210cee0bd35.jpg&#34;&gt;&lt;img alt=&#34;42035f67eb75144096dcc210cee0bd35&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/593/images/42035f67eb75144096dcc210cee0bd35.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;images/80cbafcd89f8a0aa86db40ac53b825d0.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>写在女儿出生之后</title>
      <link>https://dodoro.chouxiangpai.com/archives/602/</link>
      <pubDate>Sat, 31 Dec 2016 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/602/</guid>
      <description>&lt;p&gt;2016年6月初，女儿出生了，我当爸爸了，非常兴奋和开心。看到女儿出生的那一刹那，我感受到生命的奇迹，更感受到爱人的艰辛——那一刹那脑袋里就想着不能让她再生第二个了。从买房、装修、结婚、度假、出生，似乎一切都在计划之中，但生活确实发生翻天覆地的变化，我从刚开始不知所措、谨小慎微，到慢慢地与女儿、爱人磨合，经过近半年的时间才慢慢达成一家三口的一点默契。记得修完陪产假，在家待了一个月后，上班第一天发现原来上班才是休假啊！！！&lt;/p&gt;
&lt;p&gt;我们是完全自己带小孩，这期间的辛苦只有我们自己知道。举个最简单的例子，最近进电影院，都是把女儿弄进去睡着了，两个人才出门，每次都想电影情节一样，好几次电影开始前10分钟进入地库&amp;hellip;都说爸爸爱女儿，这个是只有当你有一个女儿了之后才深深感受到。所以我舍不得宝宝，6个月前都是抱睡居多，前阵子开始锻炼宝宝自己在小床入睡，虽然会有反复但已经初有成效，其实应该在三个月后就让宝宝自己入睡。值得欣慰的是，女儿出生回家后都是睡小床，满月后夜里最多醒两次，挺多时候能晚八点到早上五点，这些都是爱人坚定的育儿观念换来的结果。&lt;/p&gt;
&lt;p&gt;希望女儿健康快乐长大，希望爱人能尽快走出产后不良情绪&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS6 yum 安装memcached,CentOS6 安装Memcached PHP安装Memcache扩展</title>
      <link>https://dodoro.chouxiangpai.com/archives/586/</link>
      <pubDate>Thu, 03 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/586/</guid>
      <description>&lt;p&gt;#############&lt;/p&gt;
&lt;p&gt;centos 6 第一二步省略，直接yum安装&lt;/p&gt;
&lt;p&gt;1. 安装第三方软件库 wget &lt;a href=&#34;http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.5.2-2.rf.src.rpm&#34;&gt;http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.5.2-2.rf.src.rpm&lt;/a&gt; rpm -ivh rpmforge-release-0.5.2-2.rf.src.rpm&lt;/p&gt;
&lt;p&gt;2. 查找Memcached yum search memcached&lt;/p&gt;
&lt;p&gt;3. 安装Memcached yum -y install memcached&lt;/p&gt;
&lt;p&gt;4. 验证安装 memcached -h 应该会输出一些帮助信息&lt;/p&gt;
&lt;p&gt;5. 将memcache加入启动列表 chkconfig &amp;ndash;level 2345 memcached on&lt;/p&gt;
&lt;p&gt;6. 配置Memcache vi /etc/sysconfig/memcached 文件中内容如下 PORT=”11211″ 端口 USER=”root” 使用的用户名 MAXCONN=”1024″ 同时最大连接数 CACHESIZE=”64″ 使用的内存大小 OPTIONS=”&amp;quot; 附加参数&lt;/p&gt;
&lt;p&gt;7. 查看memcache状态 memcached-tool [Memcache Server IP]:[Memcache Server Port] stats 如：memcached-tool 127.0.0.1:11211 stats&lt;/p&gt;
&lt;p&gt;=====至此，我们将Memcache服务配置完毕，接着我们配置PHP的扩展，以便在程序中来调用=====&lt;/p&gt;
&lt;p&gt;PHP共有2种Memcache扩展，一个叫Memcache（2002年发布），另一个叫Memcached（2008年发布） Memcached比较新，它依赖于limemcached库才能运行，不过它能完成基于Memcache服务的几乎所有功能，比如：Memcached::getResultCode ，它能返回上一次操作Memcache的结果，而Memcache则没有这个功能 Memcache（没有d）不依赖任何库就能运行，安装相对简单，同时也能完成Memcache服务的大部分主要功能。 下面分别介绍2者的安装方式。&lt;/p&gt;
&lt;p&gt;8. 安装PHP的Memcache扩展（yum安装php已安装此扩展） wget &lt;a href=&#34;http://pecl.php.net/get/memcache-2.2.6.tgz&#34;&gt;http://pecl.php.net/get/memcache-2.2.6.tgz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;wget &lt;a href=&#34;http://pecl.php.net/get/memcache-3.0.6.tgz&#34;&gt;http://pecl.php.net/get/memcache-3.0.6.tgz&lt;/a&gt; tar vxzf memcache-2.2.6.tgz cd memcache-2.2.6 /usr/bin/phpize （如果不知道phpize在什么位置，可以用find / -name phpize查找） ./configure –enable-memcache –with-php-config=/usr/bin/php-config –with-zlib-dir make make install 记录下安装成功后的提示，类似于： Installing shared extensions: /usr/lib/php/modules/ 把这个地址记录下来&lt;/p&gt;</description>
    </item>
    <item>
      <title>互联网架构启示：一根网线引发的“血案”</title>
      <link>https://dodoro.chouxiangpai.com/archives/583/</link>
      <pubDate>Thu, 13 Aug 2015 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/583/</guid>
      <description>&lt;p&gt;&lt;strong&gt;互联网架构启示：一根网线引发的“血案”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;引言：当一个网站做大的时候，无论是研发还是运维，每一个细节都至关重要，网站的任何一个小的瑕疵都会被无限放大。&lt;/p&gt;
&lt;p&gt;公司有一个基于微信公共服务器号开发的产品，主要为微信用户提供在线交流、互动、阅读和科研分析等功能。前阵子升级了支付接口，运营人员开始用红包推广，并且把原来微信服务号的积累的用户引流到服务号本身的网站服务，网站堵塞时秒并发连接数峰值达到1k，数据库瞬间批处理数也达到了2k+，这个量其实不算什么，但因为运维架构的一个疏忽，导致网站2次宕机。这里先说明两点：运维属于公司另外一个部门，当然大家还是相互协作还算比较好；我们的服务器都是32G内存，4核2GHz的CPU的品牌服务器。&lt;/p&gt;
&lt;p&gt;第一次宕机：抢红包导致宕机3小时。&lt;/p&gt;
&lt;p&gt;我们发布完毕2.0版本之后，运营很开心，打算搞一次庆祝活动：只要来关注公共号，进入首页就可以另一个1块钱红包，任何人都可以。发红包当天，我没有接到通知，到家收到微信的提醒，过了差不多1小时，运营电话过来说网站慢了，而此时我连服务器都很难连接不上，运维的说50兆的带宽只用了8兆（这里有一个细节他没有告诉我：网络是一条几乎是直线在运行），再过来半小时，网站几乎打不开了。过了一阵子我登录终于能登录服务器了，但还是很卡，看了服务器的指标，我关注了io、cpu和内存，发现全部正常，idle很高，几乎都是80%，不过没有注意网络。接着两个多小时，直到红包抢完，网站才开始能正常访问。第二天，运维与我们完成了负载均衡的搭建，4台web，1台专用db，cache不变，与架构变化之前一样，只做了web服务器级别的cache，我个人判断这样的量还不需要加memcached和读写分离。后面两次发红包量没有那么大，服务器都正常，但我观察了服务器，发现一个现象：当并发数比较多的时候，db服务器指标还是正常，但总有点卡顿，这次我观察到有时候内外的网络会瞬间冲到98MB，咨询运维的同事说这个正常我们内网有千兆网卡呢，而且现在外网的流量不到占用不到10%。&lt;/p&gt;
&lt;p&gt;第二次宕机：活动导入流量导致宕机1小时。&lt;/p&gt;
&lt;p&gt;这一次宕机，我觉得不可能发生的。当天傍晚，运营的人一下子给微信十万级别的用户发消息，把他们引流进入网站，过了1小时网站又宕机了，一直过了高峰才恢复，那天只有运维的人在跟服务器情况。第二天，运维的跟我说是我们数据库有问题，他们的理由是：外网流量还是一条7MB直线，所有服务器的指标都正常，但是一拔数据库的网线整个网际通了，所以是db处理不过来那么多请求、或者代码有问题。我当时有点懵了，因为看了流量，那天2个小时的pv达到了10w，鉴于这个产品我们使用了比较新的开发框架，我开始怀疑代码问题、数据库连接问题等等。然后先把所有能优化的都优化，包括动态的内容等也加cache，上了1台memcached服务器。我们还把用户行为用消息队列进行异步处理。改完之后开始google，研究程序架构支撑情况、数据库并发数等等，结论是感觉昨晚的量在昨晚这种条件下网站不应该宕机的，我甚至都怀疑是不是服务器采购的时候被动手脚了-_-&lt;/p&gt;
&lt;p&gt;过了一周运营再次搞活动，活动之前我还发现一个问题：个别图书封面居然有5mb的图片，原来产品经理为了让用户看清楚图书封面要求用原图，我赶紧让工程师改成压缩图片。晚上刚到家不久，运营电话又过来了，说虽然没有宕机，内容也能看，但还是有点慢。我接到电话觉得很不可思议，心里想怎么流量那么高。登录服务器之后，发现流量也就是和上次一样，症状和上次也是一样，和运维的沟通，说他连不上服务器（网络是正常的），我特地看了db的连接也只有2位数，虽然偶尔会突然到2k多，但我知道这是因为网络堵住连接不到memcached。当天晚上就咨询以前的认识的运维大拿们，他们也觉得很不可思议，但我们判断肯定是硬件架构哪里出了问题，我把服务器的指标等都截图保留。公司运维的哥们这时候说怀疑是内外网公用网卡的原因，不过这种做法也不是不可以，因为内网有千兆网卡。第二天，又咨询了很多人，大家的结论是：网络有问题。问了好几次公司运维，都说：交换机是千兆的、防火墙是千兆的、网卡是千兆的，后来我以前的同事乌咔咔大拿注意到我截图里面显示网卡只有100MB，我赶紧检查所有的服务器，发现：内外网公用一个只有100MB的网卡！！！问了运维，他说网卡肯定是千兆，我说是不是被自适应了，他楞了一下，说不是自适应，是网线可能是百兆的，去机房确认了一下，发现服务器用的全是5类网线，而且是自己做的……运维也知道是啥原因了，走了特批买了超6类的网线换上。&lt;/p&gt;
&lt;p&gt;目前网站一切正常，未来如果突破一定的用户量，肯定要做db的读写分离、cdn等。回过头来看，第一次宕机的可能性很多种，网线问题、web服务器超并发问题、db和web在同一台问题等；第二次宕机的原因应该是：这根网线引发，内网网络瞬间被挤爆，所有内部通信在等待、数据库连接超时，我的理由是这一天的秒连接数也只有几百，数据库连接也就1k多；第三次虽然没有宕机，但网站有些慢，依然是因为这根网线的原因。&lt;/p&gt;
&lt;p&gt;这就是一根网线引发的“血案”的案例，希望对看到的工程师们有所帮助。我本人一直做开发，也自认为自己开发能力、软件系统架构能力很强，但之前确实忽略了硬件方面的知识，这一次是彻彻底底、从头到尾上了一个课。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]MySQL性能优化的简单说明</title>
      <link>https://dodoro.chouxiangpai.com/archives/579/</link>
      <pubDate>Thu, 16 Jul 2015 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/579/</guid>
      <description>&lt;p&gt;原文链接  http://teddysun.com/424.html&lt;/p&gt;
&lt;p&gt;MySQL 作为 LAMP 组件中的重要一环，在网站架构中担当关于数据处理的重任。作为目前流行最为广泛的开源数据库，网络上已经有相当多的各种优化教程。本文将试着从改善 MySQL 配置入手，进一步提升 MySQL 的性能。 关于如何优化数据库结构及 SQL 语句不在本次讨论范围之内。 MySQL 性能优化我打算分为三个部分，一是物理硬件的优化，二是 MySQL 安装时的编译优化，三是 MySQL 的配置文件 my.cnf 的优化。 一、物理硬件的优化 磁盘 I/O 是制约 MySQL 性能的最大因素之一。 采用 SSD 的服务器肯定会比普通 HDD 硬盘性能要好；采用 RAID10 的肯定要比单盘的性能要好。 所谓物理硬件的优化，其实也就是服务器（VPS）硬件的堆砌。更多的内存，更快的磁盘，更强的 CPU 无疑就是最佳的。&lt;/p&gt;
&lt;p&gt;二、MySQL 安装时的编译优化 一般情况下不建议直接 yum 安装 MySQL ，一来不能定制功能，二来版本比较老。所以我一般会采取编译安装的方式。 源码编译安装的前提条件（依赖包）： 1、CMake。官网：http://www.cmake.org/ 2、GCC，A working ANSI C++ compiler. GCC 4.2.1 or later。官网：http://www.gnu.org/software/gcc/ 3、bison，2.1 or newer。官网：http://www.gnu.org/software/bison/ 4、m4。官网：http://www.gnu.org/software/m4/ 5、tar。官网：http://www.gnu.org/software/tar/&lt;/p&gt;
&lt;p&gt;编译参数： MySQL 5.5.x &lt;a href=&#34;http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html&#34;&gt;http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MySQL 5.6.x &lt;a href=&#34;http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html&#34;&gt;http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;LAMP 一键安装脚本里对 MySQL 编译的参数如下： -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=complex -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_EMBEDDED_SERVER=1&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS下安装pure-ftpd</title>
      <link>https://dodoro.chouxiangpai.com/archives/568/</link>
      <pubDate>Mon, 05 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/568/</guid>
      <description>&lt;p&gt;安装pure-ftpd&lt;/p&gt;
&lt;p&gt;1.下载 wget &lt;a href=&#34;http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.32.tar.gz&#34;&gt;http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.32.tar.gz&lt;/a&gt; 2.解压 tar -zxvf pure-ftpd-1.0.32.tar.gz 3.编译安装 tar -zxvf pure-ftpd-1.0.32.tar.gz cd pure-ftpd-1.0.32 ./configure \ &amp;ndash;prefix=/usr/local/pureftpd \ &amp;ndash;without-inetd \ &amp;ndash;with-altlog \ &amp;ndash;with-puredb \ &amp;ndash;with-throttling \ &amp;ndash;with-peruserlimits \ &amp;ndash;with-tls make &amp;amp;&amp;amp; make install&lt;/p&gt;
&lt;p&gt;配置 pure-ftpd&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;1. 修改配置&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;cd configuration-file mkdir -p /usr/local/pureftpd/etc/ cp pure-ftpd.conf /usr/local/pureftpd/etc/pure-ftpd.conf cp pure-config.pl /usr/local/pureftpd/sbin/pure-config.pl chmod 755 /usr/local/pureftpd/sbin/pure-config.pl 2.配置文件&lt;/p&gt;
&lt;p&gt;vi /usr/local/pureftpd/etc/pure-ftpd.conf //修改其中两处： PureDB /usr/local/pureftpd/etc/pureftpd.pdb PIDFile /usr/local/pureftpd/var/run/pure-ftpd.pid 启动pure-ftpd&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;/usr/local/pureftpd/sbin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf&lt;/p&gt;
&lt;p&gt;Running: /usr/local/pureftpd/sbin/pure-ftpd -A -c50 -B -C8 -D -fftp -H -I15 -lpuredb:/usr/local/pureftpd/etc/pureftpd.pdb -L3136:8 -m4 -s -U133:022 -u100 -g/usr/local/pureftpd/var/run/pure-ftpd.pid -k99 -Z //显示这个就没问题了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nginx0.8.x&#43;PHP5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器（第6版）[转]</title>
      <link>https://dodoro.chouxiangpai.com/archives/565/</link>
      <pubDate>Sun, 04 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/565/</guid>
      <description>&lt;h4 id=&#34;nginx-08x--php-5213fastcgi搭建胜过apache十倍的web服务器第6版&#34;&gt; Nginx 0.8.x + PHP 5.2.13（FastCGI）搭建胜过Apache十倍的Web服务器（第6版）&lt;/h4&gt;
&lt;p&gt;原文链接：&lt;a href=&#34;http://blog.zyan.cc/nginx_php_v6/&#34;&gt;http://blog.zyan.cc/nginx_php_v6/&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;说明：转载，有备无患。&lt;/p&gt;
&lt;p&gt;Nginx (&amp;ldquo;engine x&amp;rdquo;) 是一个高性能的 HTTP 和反向代理服务器，也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的，它已经在该站点运行超过三年了。Igor 将源代码以类BSD许可证的形式发布。&lt;/p&gt;
&lt;p&gt;Nginx 超越 Apache 的高性能和稳定性，使得国内使用 Nginx 作为 Web 服务器的网站也越来越多，其中包括新浪博客、新浪播客、网易新闻、腾讯网、搜狐博客等门户网站频道，六间房、56.com等视频分享网站，Discuz!官方论坛、水木社区等知名论坛，盛大在线、金山逍遥网等网络游戏网站，豆瓣、人人网、YUPOO相册、金山爱词霸、迅雷在线等新兴Web 2.0网站。 Nginx 的官方中文维基：http://wiki.nginx.org/NginxChs 在高并发连接的情况下，Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果，Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3万以上的并发连接数，相当于同等环境下Apache的10倍。&lt;/p&gt;
&lt;p&gt;根据我的经验，4GB内存的服务器+Apache（prefork模式）一般只能处理3000个并发连接，因为它们将占用3GB以上的内存，还得为系统预留1GB的内存。我曾经就有两台Apache服务器，因为在配置文件中设置的MaxClients为4000，当Apache并发连接数达到3800时，导致服务器内存和Swap空间用满而崩溃。&lt;/p&gt;
&lt;p&gt;而这台 Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 服务器在3万并发连接下，开启的10个Nginx进程消耗150M内存（15M*10=150M），开启的64个php-cgi进程消耗1280M内存（20M*64=1280M），加上系统自身消耗的内存，总共消耗不到2GB内存。如果服务器内存较小，完全可以只开启25个php-cgi进程，这样php-cgi消耗的总内存数才500M。&lt;/p&gt;
&lt;p&gt;在3万并发连接下，访问Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 服务器的PHP程序，仍然速度飞快。下图为Nginx的状态监控页面，显示的活动连接数为28457（关于Nginx的监控页配置，会在本文接下来所给出的Nginx配置文件中写明）：&lt;/p&gt;
&lt;p&gt;点击在新窗口中浏览此图片&lt;/p&gt;
&lt;p&gt;我生产环境下的两台Nginx + PHP5（FastCGI）服务器，跑多个一般复杂的纯PHP动态程序，单台Nginx + PHP5（FastCGI）服务器跑PHP动态程序的处理能力已经超过“700次请求/秒”，相当于每天可以承受6000万（700*60*60*24=60480000）的访问量（更多信息见此），而服务器的系统负载也不高：&lt;/p&gt;
&lt;p&gt;点击在新窗口中浏览此图片&lt;/p&gt;
&lt;p&gt;2009年9月3日下午2：30，金山游戏《剑侠情缘网络版叁》临时维护1小时（http://kefu.xoyo.com/gonggao/jx3/2009-09-03/750438.shtml），大量玩家上官网，论坛、评论、客服等动态应用Nginx服务器集群，每台服务器的Nginx活动连接数达到2.8万，这是笔者遇到的Nginx生产环境最高并发值。&lt;/p&gt;
&lt;p&gt;点击在新窗口中浏览此图片 下面是用100个并发连接分别去压生产环境中同一负载均衡器VIP下、提供相同服务的两台服务器，一台为Nginx，另一台为Apache，Nginx每秒处理的请求数是Apache的两倍多，Nginx服务器的系统负载、CPU使用率远低于Apache：&lt;/p&gt;
&lt;p&gt;你可以将连接数开到10000～30000，去压Nginx和Apache上的phpinfo.php，这是用浏览器访问Nginx上的phpinfo.php一切正常，而访问Apache服务器的phpinfo.php，则是该页无法显示。4G内存的服务器，即使再优化，Apache也很难在“webbench -c 30000 -t 60 &lt;a href=&#34;http://xxx.xxx.xxx.xxx/phpinfo.php&#34;&gt;http://xxx.xxx.xxx.xxx/phpinfo.php&lt;/a&gt;”的压力情况下正常访问，而调整参数优化后的Nginx可以。&lt;/p&gt;</description>
    </item>
    <item>
      <title>终于决定了，将业余的大部分时间投入给C#开源世界</title>
      <link>https://dodoro.chouxiangpai.com/archives/562/</link>
      <pubDate>Fri, 14 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/562/</guid>
      <description>&lt;p&gt;昨天.NET已经宣布正式开源，而我的信念更加坚定了：将业余的大部分时间投入给C#开源世界。&lt;/p&gt;
&lt;p&gt;之前一直诟病于C#和.NET只属于微软的产品，现在完全不一样了，我自己的下一步计划：&lt;/p&gt;
&lt;p&gt;一、学习计划&lt;/p&gt;
&lt;p&gt;1、重新把前几年的项目进行一次全面梳理，把核心和精华的部分留下；&lt;/p&gt;
&lt;p&gt;2、重新全面系统完整地把最新的.NET框架学习一边，并且结合大的开源项目研究，目标是基于国外开源系统改造出非常好用的系统；&lt;/p&gt;
&lt;p&gt;3、将手头上关于.NET和C#的图书做一遍梳理，包括电子版的；&lt;/p&gt;
&lt;p&gt;4、持续跟进最新的关于Mono和.NET开源方面的资讯；&lt;/p&gt;
&lt;p&gt;二、工作计划&lt;/p&gt;
&lt;p&gt;1、将目前公司的项目做好梳理、未未来的跨平台打好基础；&lt;/p&gt;
&lt;p&gt;2、专心研究nopcommerce（电商）项目，并且基于它搭建一个云、端、移动app、网店一体化的电商项目（时间可能会很长），这个项目会为未来二次开源做准备；&lt;/p&gt;
&lt;p&gt;3、专心研究CSLA .NET，这个是.NET的一个典范，而且包含了所有平台的样例，这是跨平台的先驱；&lt;/p&gt;
&lt;p&gt;4、专心研究Orchard（cms）项目，并且基于它搭建一个云、端、移动app的公司企业网站系统，这个项目也会为未来开源做准备。&lt;/p&gt;
&lt;p&gt;将慢慢地把cms和电商项目融入公司，打造一支技术能力强的团队。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微软正式MIT协议将开源.NET框</title>
      <link>https://dodoro.chouxiangpai.com/archives/557/</link>
      <pubDate>Thu, 13 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/557/</guid>
      <description>&lt;p&gt;今天是C#程序员狂欢的日子，这真的是一门非常非常优雅的很棒的编程语言。&lt;/p&gt;
&lt;p&gt;“Scott Guthrie宣布微软正式将开源.NET框架，使用MIT协议开源，让它在Linux和OS X系统上也能够运行。开发商们将能够在全球三个最大的操作系统上使用.NET框架了。”&lt;/p&gt;
&lt;p&gt;这将是计算机软件行业载入史册的一天，.NET平台终于兑现它对世界的承诺，全面支持所有平台，我坚信这是安德鲁和mono老大的英明推动下、当然也是在时代的发展驱动下的结果，太棒了！&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/2000.jpg&#34;&gt;&lt;img alt=&#34;2000&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/557/images/2000-300x157.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>快讯：Xamarin公司与微软达成全面合作，将捆绑vs2013</title>
      <link>https://dodoro.chouxiangpai.com/archives/516/</link>
      <pubDate>Fri, 15 Nov 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/516/</guid>
      <description>&lt;p&gt;早上收到Xamarin的邮件，他们在纽约时间2013年11月13日上午宣布Xamarin将加入到VS2013（而且肯定是内置），让开发者使用C#语言高效开发优雅的ios和android的应用，届时还将给MSDN的订阅者们提供相关专题内容，太棒了！&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/1.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/516/images/1-300x158.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这是mono老大Miguel de Icaza（米格尔·德伊卡萨）&lt;a href=&#34;http://t.cn/8Dkw4qt&#34; title=&#34;https://twitter.com/migueldeicaza&#34;&gt;&lt;/a&gt;&lt;a href=&#34;http://t.cn/8Dkw4qt&#34;&gt;http://t.cn/8Dkw4qt&lt;/a&gt; 在twitter上的留言，他认为今天对于C&lt;a href=&#34;http://huati.weibo.com/k/%E5%92%8CF?from=501&#34;&gt;#和F#&lt;/a&gt;是一个伟大的日子，估计Xamarin这两年过来的艰辛只有他们团队自己知道。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/11.jpg&#34;&gt;&lt;img alt=&#34;1&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/516/images/11-300x165.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最后，恭喜Xamarin，恭喜Mono老大，这将是写入C#发展史的一件大事。&lt;/p&gt;</description>
    </item>
    <item>
      <title>记录从google play商店购买nexus 5全过程，使用风雷转运</title>
      <link>https://dodoro.chouxiangpai.com/archives/508/</link>
      <pubDate>Sat, 02 Nov 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/508/</guid>
      <description>&lt;p&gt;Google是我最喜欢的公司之一，最开始入手android手机的时候（2010年）就考虑过google的nexus系列，但是当时对海淘、转运都不了解，加上国内市场的水货价格不菲、质量不敢保证，一直没有购买。&lt;/p&gt;
&lt;p&gt;这段时间我用了一年多的小米1代频繁重启，小米客服又不搭理人，检修就要收费，作为第一代“米粉”（当年第一批机子的人），深受打击，并立志对于这类型的产品，坚决购买进口。&lt;/p&gt;
&lt;p&gt;前些日子就考虑入手nexus 5，做了一些准备，比如但没有做充足，而且这两天自己的客户端产品要发布，根本没有时间留意nexus 5发布时间。早应该想到google会在万圣节的时候发布手机的。不过没有关系，反正我也不着急使用。&lt;/p&gt;
&lt;p&gt;11月1日，因为没有做好准备，所以还有些纠结，幸亏之前对转运公司做了一些调查，赶紧在**&lt;a href=&#34;http://www.thunderex.com/Register.aspx?cs=mars&amp;amp;ref=csumathboy&#34; title=&#34;风雷转运&#34;&gt;风雷&lt;/a&gt;&lt;strong&gt;注册了一个帐号，这里有一个链接地址，注册可以送20块钱，&lt;/strong&gt;&lt;a href=&#34;http://www.thunderex.com/Register.aspx?cs=mars&amp;amp;ref=csumathboy&#34; title=&#34;风雷&#34;&gt;点击注册&lt;/a&gt;**，记得不要把推荐人id去掉，否则不会送，我就因为这样所以没有送20块钱，后悔啊&amp;hellip;第一次从米国转运，希望风雷不要掉链子&amp;hellip;&lt;/p&gt;
&lt;p&gt;11月2日，在google play上下单购买，用master的信用卡，下单过程木有任何问题，google显示要3到4周发货；&lt;/p&gt;
&lt;p&gt;11月3日&amp;hellip;&lt;/p&gt;
&lt;p&gt;等等等&amp;hellip;&lt;/p&gt;
&lt;p&gt;11月11日，双11晚上，信用卡通知有消费，看金额是google，第一反应是google发货了，赶紧爬起来查看订单状态，发现还是“待处理”；&lt;/p&gt;
&lt;p&gt;11月12日，上午来到公司后，收到email，google已经发货，正在送往&amp;ndash;美国俄勒冈免税州，太棒了，看来这次google不缺货；&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/1.png&#34;&gt;&lt;img alt=&#34;1&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/1-300x122.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;11月13日，货物已经从肯塔基州发出；&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/2.png&#34;&gt;&lt;img alt=&#34;2&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/2-300x125.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;11月14日&amp;hellip;&lt;/p&gt;
&lt;p&gt;11月15日,上午到Spokane, WA, United States了，离目的地很近了&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/11.png&#34;&gt;&lt;img alt=&#34;1&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/11-300x143.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11月15日，下午到达俄勒冈，希望早点到CA发货&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/ups.jpg&#34;&gt;&lt;img alt=&#34;ups&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/ups-300x170.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;11月16日&amp;hellip;&lt;/p&gt;
&lt;p&gt;等等等&lt;/p&gt;
&lt;p&gt;11月24日上午9点，在去石景山的公交车上，我连接中移动的wifi，收到风雷的邮件已入库，待发货，爽！看来从俄勒冈到加利福尼亚确实需要5个工作日啊！另外，风雷确实按1.3磅算了！只能说：这是他们的生存之道-_-&lt;/p&gt;
&lt;p&gt;11月25日，问风雷客服，说今天能发货。&lt;/p&gt;
&lt;p&gt;11月26日上午9点，收到风雷的邮件：已发货！希望快点，本周就到达北京啊！！！&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/12.png&#34;&gt;&lt;img alt=&#34;1&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/12-300x120.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;11月27日，等&amp;hellip;&lt;/p&gt;
&lt;p&gt;11月28日，感恩节，我开始怀疑美国那边是不是快递放假了？&lt;/p&gt;
&lt;p&gt;11月29日，还是没有看到更新&amp;hellip;&lt;/p&gt;
&lt;p&gt;11月30日，上午看到已经到达北京，正在清关，usps确实快啊！&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/12.jpg&#34;&gt;&lt;img alt=&#34;1&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/12-300x175.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;12月2日，查看ems跟踪快递，已经送达北京海关处理中心，希望赶紧处理好让我去拿吧，反正基本会税-_-&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/13.jpg&#34;&gt;&lt;img alt=&#34;1&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/13-300x163.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;12月3日，上午查看ems，昨天下班的时候已经到达双榆树，午饭前立马赶过去取，如当初所预料，纳税200元，“税税”平安-_-&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/13.png&#34;&gt;&lt;img alt=&#34;1&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/13-300x236.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;回到家，激动地开箱，确实非常激动！google是我最爱的公司，木有之一，“鸡婆”一下我的开箱照，嘿嘿～&lt;/p&gt;
&lt;p&gt;step1：这个是风雷做了包裹处理了，外加一个盒子，就多了0.2磅-_-&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/5.jpeg&#34;&gt;&lt;img alt=&#34;_-5&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/5-300x224.jpeg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;step2：打开，看到google寄往俄勒冈的信息&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/14.png&#34;&gt;&lt;img alt=&#34;1&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/14-300x224.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;step3:看到google字样很兴奋！这是账单。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/3.jpeg&#34;&gt;&lt;img alt=&#34;_-3&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/3-300x224.jpeg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;step4:特写一下，用了google那么多年的网上服务，这是第一次拿到google的实体物品，happy&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/2.jpeg&#34;&gt;&lt;img alt=&#34;_-2&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/2-300x224.jpeg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;step5:最后来一张合影&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/1.jpeg&#34;&gt;&lt;img alt=&#34;_-1&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/508/images/1-300x224.jpeg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;海淘是一项冒险，等待的过程很好玩，拿到货的那一刻很high！&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]如何在github上传自己的代码</title>
      <link>https://dodoro.chouxiangpai.com/archives/504/</link>
      <pubDate>Tue, 08 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/504/</guid>
      <description>&lt;p&gt;注册GitHub后你就会有0.3G的免费空间，不过只能创建公开项目，这也满足代码分享的目的，我最喜欢的倒是它的代码展示方式，可以直接浏览你的代码，代码是经过高亮、添加行号处理过的，十分漂亮，体验一流，比如这个&lt;a href=&#34;https://github.com/webpy/webpy&#34;&gt;Webpy托管&lt;/a&gt;的地方。而作为想要了解你代码的人，可以选择直接在线浏览自己感兴趣的，也可以直接下载压缩包，或者直接使用Git clone到本地。&lt;/p&gt;
&lt;p&gt;因为GitHub是基于Git版本控制系统，所以你上传修改代码什么的，都需要使用Git工具。我这里主要是用来分享和展示代码，所以不想在版本控制方面做过多的阐述，下面就简单讲解一下怎么在GitHub上新建一个项目，还有把自己的代码传上去。下面的前提是你已经注册了GitHub和下载安装了Git——&lt;a href=&#34;http://git-scm.com/download&#34;&gt;Git下载&lt;/a&gt;、&lt;a href=&#34;http://code.google.com/p/msysgit/downloads/list&#34;&gt;Windows版本下载&lt;/a&gt;。&lt;/p&gt;
&lt;h4 id=&#34;上传分享代码&#34;&gt;上传分享代码&lt;/h4&gt;
&lt;p&gt;1.在GitHub上建立项目&lt;/p&gt;
&lt;p&gt;登录GitHub后，你可以在右边靠中那里找到一个按钮“New Repository”，点击过后，填入项目名称、说明和网址过后就可以创建了，然后会出现一个提示页面，记下类似&lt;code&gt;git@github.com:XXX/XXX.git&lt;/code&gt;的地址，这个就是你这个项目的地址了。&lt;/p&gt;
&lt;p&gt;2.配置Git以及上传代码&lt;/p&gt;
&lt;p&gt;安装Git成功后，如果是Windows下，选择Git Bash，在命令行中完成一切，可能开始有点麻烦，不过就那几条命令行，用几次就记住啦。首先初始设置Git：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1 git config --global user.name &amp;#34;Your Real Name&amp;#34;
2 git config --global user.email you@email.address
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后开始进行最麻烦的一步了，你需要上传文件到GitHub的Git系统上，得需要一个SSH密匙来认证，下面就开始生成密钥和提交密钥。打开Git Bash,创建SSH key:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1 ssh-keygen -C &amp;#39;your@email.address&amp;#39; -t rsa
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后要你输入SSH密匙的存放位置，可以不管，直接回车使用默认路径。再输入你想要的密码，SSH key就生成了。现在你需要将这个Key提交到GitHub，首先打开Key保存的位置，里面会有三个文件，找到id_rsa.pub，用文本编辑器打开，复制里面的全部字符。到GitHub，在右上方工具栏里找到Account Settings。在这个页面上有一个SSH Public Keys标签，选择Add another public key。Title可以随便填一个，Key就粘贴刚才的字符，提交。&lt;/p&gt;
&lt;p&gt;完成这些工作后，就可以上传自己的代码了。找到自己要分享上传的代码文件夹，右击选择Git Bash，或者在Git Bash中进入这个文件夹。建立一个仓库：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1 git init
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;选择要添加进仓库的文件：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1 git add .
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;一般如果你想分享这个文件夹里的所有代码，就在 add后面加“.”，上面的例子就是这样，如果传指定的，只需要把“.”改为文件名即可，现在只是选择了要加入仓库的文件，下面才是添加进入仓库：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1 git commit -m &amp;#39;Test&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;-m后面跟一个参数，表示说明，将代码提交到GitHub后，将会在代码文件信息上显示这个说明，如下图标记的地方。&lt;/p&gt;
&lt;p&gt;搞了这么久，现在才开始把本地仓库上传到GitHub了，下面两行命令搞定问题：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1    
2 git remote add origin git@github.com:XXX/XXX.git
3 git push -u origin master
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个&lt;code&gt;git@github.com:XXX/XXX.git&lt;/code&gt;就是上面创建项目是生成的地址。现在打开你的项目网址，你就可以发现你的代码已经展示出来了。如果你要更新代码的话，就重复上面的吧。&lt;/p&gt;
&lt;p&gt;如果提交了敏感信息，比如代码中设置的自己的密码什么的忘删除就上传上去了怎么办？重新修改过后上传依然有历史记录，而使用Git删除历史记录貌似很麻烦，于是就采用删除项目吧，删除了再重新上传。删除项目需要在GitHub网站上右上方找到admin按钮，进去后右边最下面有个删除的按钮，这样就可以删除了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>北京购房指南：关于首付款、购房合同、提取公积金、贷款</title>
      <link>https://dodoro.chouxiangpai.com/archives/523/</link>
      <pubDate>Sun, 18 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/523/</guid>
      <description>&lt;p&gt;今年7月12日我们在北京购房了一套商品房，做为北漂一族，而且大部分资金靠自己打工所得，所以资金并不是非常充裕。如果期间懂得门道的话，或者可以早点下手买房。现在把经验贴出来，如果有缘人看到，希望能从中得到帮助。&lt;/p&gt;
&lt;p&gt;1、首付款：如果购买的是商品房，那么首付多少你就得准备多少首付款；如果是保障房，你可以用公积金充当首付。目前北京市实行限购，所以交完定金（定金可以充当首付款）后，建委那边需要进行长达至少15个工作日的审核。交首付的时间一般是在交完定金后的1个月左右。&lt;/p&gt;
&lt;p&gt;2、购房合同：购房合同是交首付的时候签的，一式四份，但如果你是贷款购房，在你没有换完房贷之前，你是拿不到合同的（抵押在银行）。一般来说，签订合同后，在两周内应该是可以拿到合同的，如果你着急要购房合同就去催开发商（这个会关系到你取公积金的时间，特别是那些刷信用卡付首付的人）。&lt;/p&gt;
&lt;p&gt;3、提取公积金：北京提取公积金相对来说还是比较方便的。如果是商业贷款，那么可以在拿到首付款发票（交完首付就可以拿到）和购房合同后，就可以去办理提取，周一到周五都可以办理，办理后3到5个工作日内基本就到了（这里注意了：如果着急提取还信用卡，那么就催人事去办理，拿到合同就催他们去办理，如果不催，他们每个月都是20号左右才去公积金处）；如果是公积金贷款，那只能是在办理完公积金贷款后提取了。&lt;/p&gt;
&lt;p&gt;关于商业贷款是可以用首付款发票和购房合同提取公积金的，公积金电话咨询中心可能会告诉你不行，但是我确认目前肯定是可以的，这里还有&lt;a href=&#34;http://finance.ifeng.com/news/hgjj/20090402/504938.shtml&#34; title=&#34;住房公积金提取&#34;&gt;&lt;strong&gt;一篇文章&lt;/strong&gt;&lt;/a&gt;是专门报道这个问题的。&lt;/p&gt;
&lt;p&gt;4、贷款：如果贷款额度超过住房公积金贷款上限，并且银行可以打85折甚至更低，建议走纯商业贷款，这样会省很多心；如果低于上限，当然可以走住房公积金贷款。另外，开发商会说贷款不下来收违约金，其实这个倒不是大问题，目前来看没有发现收违约金的。&lt;/p&gt;
&lt;p&gt;通过这几点的分析，如果公积金足够多，在做了精打细算后，完全可以刷信用卡付首付（金额不要超过公积金），买完房子后立刻提取公积金还信用卡。当然，最坏情况也是信用卡分期，第二个月全部偿还。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《基于Mono for android移动开发》ppt讲座</title>
      <link>https://dodoro.chouxiangpai.com/archives/465/</link>
      <pubDate>Fri, 09 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/465/</guid>
      <description>&lt;p&gt;这是我们团队内部关于Mono for android讲座的ppt，写得一般，不过能点出一些开发过程中的要害。&lt;/p&gt;
&lt;p&gt;下载地址：&lt;a href=&#34;images/%E5%9F%BA%E4%BA%8EMono-for-android%E7%A7%BB%E5%8A%A8%E5%BC%80%E5%8F%91.pptx&#34;&gt;基于Mono for android移动开发&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/QQ%E6%88%AA%E5%9B%BE20130809100552.png&#34;&gt;&lt;img alt=&#34;mono for android移动开发&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/465/images/QQ%E6%88%AA%E5%9B%BE20130809100552.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET Framework发展简历</title>
      <link>https://dodoro.chouxiangpai.com/archives/452/</link>
      <pubDate>Thu, 08 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/452/</guid>
      <description>&lt;p&gt;.NET Framework1.0版本是在2002年正式发布的，当时获得了世界软件界的极大瞩目，影响深远，比尔盖茨说这是为未来10年的战略做准备，现在看来，微软的这个产品获得了巨大成功。&lt;/p&gt;
&lt;p&gt;2005年，微软发布了.NET Framework2.0,这个版本是迄今为止最重要的一个版本，2.0为C#引入了范型和公共语言运行时。.NET 3.0版本是基于2.0的运行时的，引入了WPF和XAML语言，还有一项伟大的技术WCF。.NET3.5则引入了C#3.0，并且支持LINQ语言（一种全新的方式来检索数据）和Lambda表达式。.NET4.0是继2.0之后的一个重要版本，引入了动态语言和并行编程。&lt;/p&gt;
&lt;p&gt;.NET Framework4.5是基于4.0版本的更新，主要有下面这些更新：&lt;/p&gt;
&lt;p&gt;1、异步变成方式，在C#5.0中，异步编程变得更加简单；&lt;/p&gt;
&lt;p&gt;2、引入了Windows Store Apps；&lt;/p&gt;
&lt;p&gt;3、增强了数据访问方式，主要是Entity Framework5.0的发布；&lt;/p&gt;
&lt;p&gt;4、增强了WPF和江MVC升级到了4.0；&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]C#中的委托,匿名方法和Lambda表达式</title>
      <link>https://dodoro.chouxiangpai.com/archives/457/</link>
      <pubDate>Thu, 08 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/457/</guid>
      <description>&lt;h2 id=&#34;一简介&#34;&gt;一、简介&lt;/h2&gt;
&lt;p&gt;在.NET中，委托，匿名方法和Lambda表达式很容易发生混淆。我想下面的代码能证实这点。下面哪一个First会被编译？哪一个会返回我们需要的结果？即Customer.ID=5.答案是6个First不仅被编译，并都获得正确答案，且他们的结果一样。如果你对此感到困惑，那么请继续看这篇文章。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;class&lt;/code&gt; &lt;code&gt;Customer&lt;/code&gt;  &lt;code&gt;{&lt;/code&gt;      &lt;code&gt;public&lt;/code&gt; &lt;code&gt;int&lt;/code&gt; &lt;code&gt;ID {&lt;/code&gt; &lt;code&gt;get``;&lt;/code&gt; &lt;code&gt;set``; }&lt;/code&gt;      &lt;code&gt;public&lt;/code&gt; &lt;code&gt;static&lt;/code&gt; &lt;code&gt;bool&lt;/code&gt; &lt;code&gt;Test(Customer x)&lt;/code&gt;      &lt;code&gt;{&lt;/code&gt;          &lt;code&gt;return&lt;/code&gt; &lt;code&gt;x.ID == 5;&lt;/code&gt;      &lt;code&gt;}&lt;/code&gt;  &lt;code&gt;}&lt;/code&gt;  &lt;code&gt;...&lt;/code&gt;  &lt;code&gt;List&amp;lt;Customer&amp;gt; custs =&lt;/code&gt; &lt;code&gt;new&lt;/code&gt; &lt;code&gt;List&amp;lt;Customer&amp;gt;();&lt;/code&gt;  &lt;code&gt;custs.Add(``new&lt;/code&gt; &lt;code&gt;Customer() { ID = 1 });&lt;/code&gt;  &lt;code&gt;custs.Add(``new&lt;/code&gt; &lt;code&gt;Customer() { ID = 5 });&lt;/code&gt;  &lt;code&gt;custs.First(``new&lt;/code&gt; &lt;code&gt;Func&amp;lt;Customer,&lt;/code&gt; &lt;code&gt;bool``&amp;gt;(``delegate``(Customer x) {&lt;/code&gt; &lt;code&gt;return&lt;/code&gt; &lt;code&gt;x.ID == 5; }));&lt;/code&gt;  &lt;code&gt;custs.First(``new&lt;/code&gt; &lt;code&gt;Func&amp;lt;Customer,&lt;/code&gt; &lt;code&gt;bool``&amp;gt;((Customer x) =&amp;gt; x.ID == 5));&lt;/code&gt;  &lt;code&gt;custs.First(``delegate``(Customer x) {&lt;/code&gt; &lt;code&gt;return&lt;/code&gt; &lt;code&gt;x.ID == 5; });&lt;/code&gt;  &lt;code&gt;custs.First((Customer x) =&amp;gt; x.ID == 5);&lt;/code&gt;  &lt;code&gt;custs.First(x =&amp;gt; x.ID == 5);&lt;/code&gt;  &lt;code&gt;custs.First(Customer.Test);&lt;/code&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;二什么是委托&#34;&gt;&lt;strong&gt;二、什么是委托？&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;现在你定义一个处理用户订单的购物车ShoppingCart类。管理层决定根据数量，价格等给客人折扣。做为其中的一部分，他们已经实现了处理订单时你要考虑一方面。不用考虑过多，你简单声明一个变量来保存有“吸引力的折扣”(magicDisCount)，然后实现逻辑。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android获取网络状态</title>
      <link>https://dodoro.chouxiangpai.com/archives/450/</link>
      <pubDate>Thu, 08 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/450/</guid>
      <description>&lt;p&gt;app应用的一个重要功能就是连接到互联网，而连接互联网可以有很多中方式，2G、3G、wifi等方法，有时候是没有网络的，所以在开发应用的时候，需要判断网络状态。&lt;/p&gt;
&lt;p&gt;mono for android提供了比较简便的方法来获取网络状态，代码如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/// 获取网络状态&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt;, if net work was checked, &amp;lt;c&amp;gt;false&amp;lt;/c&amp;gt; otherwise.&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;param name=&amp;#34;context&amp;#34;&amp;gt;Context.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; CheckNetWork(Context context)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; connectivityManager = (ConnectivityManager)context.GetSystemService(Context.ConnectivityService);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(connectivityManager.ActiveNetworkInfo!=&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NetworkInfo.State netWorkState=connectivityManager.ActiveNetworkInfo.GetState();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(netWorkState==NetworkInfo.State.Connected)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>房山FunHill新品牌图标</title>
      <link>https://dodoro.chouxiangpai.com/archives/478/</link>
      <pubDate>Thu, 08 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/478/</guid>
      <description>&lt;p&gt;无意中看到房山FunHill新品牌图标的设计过程，转载过来，顺便保持。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/2.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/478/images/2-300x186.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/1.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/478/images/1-300x126.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/last.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/478/images/last-300x292.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/4.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/478/images/4-300x120.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/3.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/478/images/3-300x135.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中ListView控件使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/443/</link>
      <pubDate>Wed, 07 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/443/</guid>
      <description>&lt;p&gt;今天介绍Mono for android中ListView控件使用，并且支持在ListView中嵌入button，支持button触发单独事件，ListView自身的行触发单独时间。&lt;/p&gt;
&lt;p&gt;别小看了这个问题，MonoDroid(mono for android的前身)刚刚出来的时候，ListView里面是不能嵌入button的，即使能嵌入也不支持单独事件，还好新版本支持了。这里会涉及到一些技巧，我只是大致讲一下思路，后期会做成项目发到github上面去，大家下载下来就ok。&lt;/p&gt;
&lt;p&gt;我要实现的效果是，在ListView的每一行里添加button按钮，并且点击ListView的行进入该行详情，点击行上面的按钮，则进入其他相关操作，比如购买、订阅，如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ListView button&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/443/images/QQ%E6%88%AA%E5%9B%BE20130807113307.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;按照语法，分别创建AnimalListActivity和AnimalListAdapter，这里主要关注度在Adapter里面怎么给button添加click事件，特别是复用和不复用item的情况。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;view.FindViewById&amp;lt;Button&amp;gt; (Resource.Id.btn_Take).Click += &lt;span style=&#34;color:#66d9ef&#34;&gt;delegate&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Intent intent = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Intent (&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.context, &lt;span style=&#34;color:#66d9ef&#34;&gt;typeof&lt;/span&gt;(BuyActivity));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;context.StartActivity (intent);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;1、如果不复用item，可以实现上面的效果，但是如果加载的数据流超过50左右直接会导致卡死；所以必须得复用；&lt;/p&gt;
&lt;p&gt;2、如果复用item，需要注意如何给button添加复用事件。我已经想到解决办法了：只能在item的view被创建的第一次的时候给item加click事件，否则会支持n+1次&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (convertView == &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; || !(convertView &lt;span style=&#34;color:#66d9ef&#34;&gt;is&lt;/span&gt; TableLayout))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;view = context.LayoutInflater.Inflate(Resource.Layout.SubListItems, parent, &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//订阅按钮&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; Iv_sub=view.FindViewById&amp;lt;ImageView&amp;gt;(Resource.Id.Iv_Sub);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Iv_sub.Tag=position;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Iv_sub.Click += &lt;span style=&#34;color:#66d9ef&#34;&gt;delegate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; pos=Convert.ToInt32(Iv_sub.Tag);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里还需要用到一个技巧Iv_sub.Tag=position;和int pos=Convert.ToInt32(Iv_sub.Tag);这两段代码是相呼应的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]房山中央休闲购物(CSD)战略性十年规划简介</title>
      <link>https://dodoro.chouxiangpai.com/archives/490/</link>
      <pubDate>Sat, 03 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/490/</guid>
      <description>&lt;h2 id=&#34;一什么是csd&#34;&gt;一、什么是CSD&lt;/h2&gt;
&lt;p&gt;CSD（ Central Shopping District）即中央休闲购物区，是一种非中心城市的人气聚集区，是解决大型城市经济持续发展的必然趋势，是“多中心发展”的城市规划的一部分。&lt;/p&gt;
&lt;p&gt;CSD一般选址于城市之间的交通枢纽上，多以主题公园、旅游胜地、超大规模商业中心、博彩业等业态为经济核心，是聚集商贸、信息、文化、会展、酒店、餐饮、休闲及办公为一体的城际中心。 CSD需要科学的规划、依赖绿色生态设计，凭借便捷的立体交通网络、完整的服务配套体系；必须拥有区域内唯一或不可替代的消费理由，才能达到非城市中心经济焦点的目标。&lt;/p&gt;
&lt;p&gt;一个规划科学的CSD，可以提高城市边缘地区的经济活力，并能辐射周边城市，形成一个广阔的五小时车程商圈，带动区域经济的发展。同时也可以通过CSD这个平台，有效地参与区域经济和国际经济的合作。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/csd0.jpg&#34;&gt;&lt;img alt=&#34;csd0&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/490/images/csd0-300x199.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id=&#34;二房山的csd战略的起因&#34;&gt;二、房山的CSD战略的起因&lt;/h2&gt;
&lt;p&gt;房山区是北京西南重要门户，京石高速公路使其成为连接京津冀地区的重要交通枢纽，也让房山区的长阳镇和良乡镇有机会成为距离北京中心城区最近的卫星城。北京两轴两带多中心的发展规划中，房山区被规划在北京西部发展带的核心地区，将房山打造成“面向全国乃至世界的城市职能中心”的课题，已经迫在眉睫。&lt;/p&gt;
&lt;p&gt;房山区拥有北京市最为丰富的文化资源和旅游资源，包括文化古迹、地质公园、自然风景、和农乡经济四大部分。距今70万年前的周口店古人类遗址、距今3000多年前的西周燕都遗址、以及云居寺的千年石经、张坊古战道遗址等，都是令世界叹为观止的文化遗存；房山区的地质奇观也是华北地区最为著名的，仅石花洞一处自开放以来已经接待了620万游客；自然环境的优势是房山的另一宝藏，百花山、十渡都是华北罕见的自然风景区，近年来随着吴宇森导演的《赤壁》、徐克导演的《狄仁杰》等著名影片选址十渡为拍摄外景地，通过这些具有国际影响力的文化产品的推出，为房山旅游资源增添了更多的机会。&lt;/p&gt;
&lt;p&gt;“城市化”是未来中国发展的重要进程和科研项目，“城”乃人们聚居之地，“市”乃人们谋生之所，有城无市的睡城不是可持续发展的未来。在现代经济的发展中，城市化建设如果是建立在破坏文化遗产和自然环境的基础上，那就是对历史和未来的不负责任，是短视的行为。房山区的各级领导就是秉持着科学发展理念谋划房山的未来，不把这样一块风水宝地建设成没有生机的睡城，不放弃房山的传统人文优势，着眼广大农民群众的未来生活，这就是启动创新思维的前提。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/csd.jpg&#34;&gt;&lt;img alt=&#34;csd&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/490/images/csd-300x225.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id=&#34;三房山的csd战略内容&#34;&gt;三、房山的CSD战略内容&lt;/h2&gt;
&lt;p&gt;以华北最大的Outlets为经济引擎，以户外体育产业(包括足球、高尔夫、网球)、会展经济为可持续发展的经济动力，以特色旅游产业 (包括民宿、温泉、生态农业) 为休闲服务主体，以酒店餐饮娱乐为配套服务的“中央休闲购物区”，是房山CSD十年发展计划的总体构想。&lt;/p&gt;
&lt;h3 id=&#34;1华北最大的outlets购物中心2013年5月1日已经开业&#34;&gt;1.华北最大的Outlets购物中心（2013年5月1日已经开业）&lt;/h3&gt;
&lt;p&gt;2008年中国的奢侈品消费已经占到了世界奢侈品消费总量的29%，跻身世界第二大奢侈品消费国，这个数字并不包括中国人在海外的奢侈品消费，并且这个数字还将以10%至20%的速度增长，商业部预计2015年中国奢侈品消费总量将超过115亿美元的规模。国际上Outlets已经成为奢侈品消费的一个重要渠道，但是专家认为在中国真正意义的Outlets数量非常有限，国际名品的数量和质量、价格的低廉程度、配套的娱乐、休闲、服务的品质……距离国际水平还有差距，这也是房山打造华北最大的Outlets的机遇。&lt;/p&gt;
&lt;p&gt;作为奥特莱斯（中国）有限公司在内地布局的五大区域核心之一，北京市房山区长阳镇奥特莱斯华北旗舰中心占地面积约 21.27万平方米，规划建设面积约34.7万平方米，预计总投资近30亿元，规划建成集世界名牌折扣中心、休闲度假体系和高品质居住体系等核心功能于一体、辐射华北地区的大型综合现代服务产业项目，首期计划在2011年投入营业。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/csd2.jpg&#34;&gt;&lt;img alt=&#34;csd2&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/490/images/csd2-300x178.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;2户外体育产业&#34;&gt;2.户外体育产业&lt;/h3&gt;
&lt;p&gt;高尔夫产业是房山户外体育资源的优势和基础，沿永定河古河道两岸，聚集起来的高尔夫球场从数量到品质，亦或风景与设施都堪称北京一流。房山区将在这一优势的基础上，着重发展生态户外体育产业。中国足球甲级联赛北京主场的落户已成定局，中国足球超级联赛北京主场的选址工作也初步完成；百块国际生态网球场的建设计划初见端倪……2011年前开通的城铁将为房山户外体育产业和重大国际赛事提供专门的服务。&lt;/p&gt;
&lt;p&gt;房山区将把户外生态体育产业视为没有污染的绿色工业对待，用严谨科学的规划观点，天人合一的设计理念，以人为本的管理态度，让这一产业在房山展现出巨大的商业价值。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/csd3.jpg&#34;&gt;&lt;img alt=&#34;csd3&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/490/images/csd3-300x177.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;3企业会议中心的总部基地&#34;&gt;3.企业会议中心的“总部基地”&lt;/h3&gt;
&lt;p&gt;遍布各地的企业培训中心或者企业会议中心，给房山区的房地产开发提供了新的灵感，为此房山区将着力打造会展经济中心，建设企业会议中心的总部基地。不仅为会议培训提供了整体服务，配套设施，形成社会化产业经营，而且为企业物业与投资提供产权的保护，地区税收同时也得到了可持续发展的契机。这是房山区房地产开发上的一次细分市场的创新。&lt;/p&gt;
&lt;h3 id=&#34;4特色旅游休闲产业&#34;&gt;4.特色旅游休闲产业&lt;/h3&gt;
&lt;p&gt;振兴和整合房山旅游资源是房山的历届领导都关心的问题，新的CSD战略规划中，专家认为改变度假意识提升服务品质是吸引游客、促进消费的有效的办法，除此之外还要着重发展旅游区附加产业以及衍生产品的开发。&lt;/p&gt;
&lt;p&gt;根据房山的旅游特色，专家认为千篇一律的星级酒店式建设不适合房山旅游产业发展的趋势，而农家乐式的乡土经济既创造不了规模经济也不利于提升品质。 经过专业的调查和论证得出结论，已经在日本和台湾风行多年的“民宿”经济，是一种不失人文特色，又深受现代都市高端消费人群喜爱的一种休闲方式，同时也有助于房山形成属于自己的休闲品牌。&lt;/p&gt;
&lt;p&gt;2010年开始房山区将面向全世界设计师征集民宿设计方案，利用当地的温泉资源，在旅游区沿途和重点村庄建设100家风格不同规模不等的民宿酒店，打造独一无二的生态度假旅游品牌，并且由政府出面建立物业交易平台，保障投资人的利益。由政府牵头，聘请专家帮助当地企业建立科学的服务体系、品牌管理方案以及发展旅游产业的衍生产品，让房山的旅游成为北京形成独特的经济模式。&lt;/p&gt;
&lt;h2 id=&#34;四房山的未来&#34;&gt;四、房山的未来&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;images/csd4.jpg&#34;&gt;&lt;img alt=&#34;csd4&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/490/images/csd4-300x300.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;CSD不仅是经济创新也是政策创新，更是新农村建设的和乡镇城市化进程的创新，它是以保护和利用环境资源为前提，激发地区经济活力，创造可持续发展的经济模式的战略性规划。&lt;/p&gt;
&lt;p&gt;未来的房山区，将不仅仅是属于北京的中央休闲购物区，也将是属于京津冀地区的中央休闲购物区。每到假日人们就会从四面八方聚集到这里，汽车里装满了周末本该做的家务，把汽车和那些家务交到CSD的服务中心，有专门的工作人员为你打理，而你和你的家人朋友就进入了一个超越现实的休闲假日：&lt;/p&gt;
&lt;p&gt;在这里以超低的价格购买国际名品；零距离观看或是参与各种户外体育比赛；居住在青山绿水掩映之中的民宿酒店里，享受温泉或是美食的快乐；通过预约订票欣赏剧院影院提供的各种节目；乘坐便利环保的穿梭巴士到各处旅游景区观光游览，访问酒庄和农场，你只需要准备好你的心情和信用卡就可以了……&lt;/p&gt;
&lt;p&gt;当假期结束时，你回到服务中心领取已经保养一新的汽车和熨烫平整的衣物，到超市装满下一周应用的生活用品，然后载着家人和轻松快乐的心情回到你所居住工作的城市去……&lt;/p&gt;</description>
    </item>
    <item>
      <title>又一个cool之夏</title>
      <link>https://dodoro.chouxiangpai.com/archives/382/</link>
      <pubDate>Thu, 01 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/382/</guid>
      <description>&lt;p&gt;大暑已经来了，现在算是三伏天，但北京一场又一场的夏雨使得这个夏天变得异常凉快。北京的四季，最美的是秋天，虽没有繁华似锦，但却是一片沉甸甸的金华秋实，如今可能又要多一个夏天了。&lt;/p&gt;
&lt;p&gt;去年的夏天也很凉快，如果再持续几年如此，北京估计可以称为避暑之都了。喜欢电闪雷鸣倾盆大雨的时窝在被窝里听雨看雨，渴望大雨过后漫步在晴朗凉快的郊区。随着环境慢慢变好，到我搬迁到长阳后，北京之夏，或许将变成每年又一个值得期待的季节。&lt;/p&gt;
&lt;p&gt;cool～&lt;/p&gt;</description>
    </item>
    <item>
      <title>购房合同补充协议</title>
      <link>https://dodoro.chouxiangpai.com/archives/339/</link>
      <pubDate>Mon, 22 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/339/</guid>
      <description>&lt;p&gt;第1条　合同原则 鉴于目前买卖双方因为合同不明造成诸多争议，为充分保护双方的合法权益，明确出卖人的合同义务，双方根据《中华人民共和国合同法》等法律的有关规定，本着平等、自愿、公平、诚实信用的原则，经协商一致，就买受人购买出卖人商品房一事达成本合同。&lt;/p&gt;
&lt;p&gt;第2条　文字定义 1．合同中所称“合同”、“本合同”、“约定”等系指目前出卖、买受双方所签订的补充合同，其他合同则冠以合同的具体名称； 2．本合同中所称“房屋”、“本房屋”、“商品房”或“本商品房”等系指目前出卖、买受双方签订合同即将买卖的商品房； 3．本合同所称“本楼”或者“楼房”系指买受人所购商品房所位于的楼座； 4．本合同中所称“小区”、“社区”系指房屋所处于的社区； 5．本合同中所指“退房”，是指买受人将房屋或者取得房屋的权利退还给买受人，由出卖人退还买受人支付的购房款的行为。&lt;/p&gt;
&lt;p&gt;第3条　居住目的 出卖人知道买受人购买商品房系为自己住用、通过出租获得利润或者在商品房升值时通过及时转让获得利润，或者行使相关的所有权或用益物权以获得利益。出卖人承诺在买受人购买此房屋后，本楼内其他房屋仅可作为住宅使用外，不得作为公司办公用房使用，以保持居住环境的安静与安全。如不能达到此标准，则买受人有权解除合同要求退房；如买受人暂不解除合同要求退房，则出卖人每日向买受人支付相当于总房价千分之一的违约金。&lt;/p&gt;
&lt;p&gt;第4条　广告内容 广告平面图中所列面积如无特别说明均为套内使用面积，广告中关于绿化园林的面积应当与房屋具有相同的比例；如实际情况与广告数量误差超过3%，如果此等误差显然不利于买受人，则买受人有权解除合同要求退房；暂不解除合同要求退房的，则出卖人按日向买受人支付总房价千分之一的违约金。&lt;/p&gt;
&lt;p&gt;第5条　墙体平直 房屋的墙体及平面均应当平直，倾斜角度不得大于0.1度，计算方法为：高度差/直线距离；不平直情况并不得超过政府规定的标准；如无法达到此标准，则买受人有权解除合同要求退房；暂不解除合同要求退房的，则出卖人应当将房屋修复，修复前视为未交房，并按日向买受人支付总房价千分之一的违约金。&lt;/p&gt;
&lt;p&gt;第6条　防水情况 房屋顶棚无水渍、厨房及厕所防水良好、上下水管与地板结合处无漏水、渗水；如无法达到此标准，则买受人有权解除合同要求退房；暂不解除合同要求退房的，则出卖人应当将房屋修复，修复前视为未交房，并按日向买受人支付总房价千分之一的违约金。&lt;/p&gt;
&lt;p&gt;第7条　住宅寿命 出卖人承诺此住宅的安全使用寿命不低于70年，在30年内绝对不会产生主体质量问题，其质量足以抵抗八级地震所产生的不良影响；如果不能满足此等条件，出卖人将以全部房款的两倍向买受人进行赔偿，如果造成买受人及其亲属受到伤害的，按除支付全部医疗救助费用以外，还应当支付50万元赔偿。&lt;/p&gt;
&lt;p&gt;第8条　文件 考虑到房屋质量将在未来相当的时间内对买受人的安全与收益要求有巨大影响，而提供完全的质量文件是出卖人不可推卸的责任与义务，为充分保证买受人的知情权，出卖人除提交竣工验收备案表以外，还应当向买受人提交如下文件： 1．施工单位的竣工报告； 2．监理单位工程质量评价报告； 3．勘察单位质量检查报告； 4．规划部门出具的认可文件； 5．卫生部门出具的水质检验合格文件； 6．环保部门出具的认可文件； 7．消防部门出具的消防验收合格文件； 8．施工单位签署的质量保修书； 抗震评估机会出具的地震安全性能评价报告；&lt;/p&gt;
&lt;p&gt;第9条　文件交付 1．全部质量文件上述文件应当于入住前交付给买受人，没有上述文件不视为交房；即使买受人入住，仍有权出卖人每日承担千分之一的违约金； 2．如无法按时交付上述文件，则买受人有权解除合同要求退房；暂不解除合同要求退房的，则出卖人应当将房屋修复，修复前视为未交房，并按日向买受人支付总房价千分之一的违约金。&lt;/p&gt;
&lt;p&gt;第10条　质量标准 商品房设计质量不应低于各级政府有关机构颁布的最有利于买受人的标准，本合同最后所列明的各项规范及标准均为出卖人应当遵守的强制性标准，即出卖人所提供的房屋质量不得低于各项规范的要求；如无法达到此标准，则买受人有权解除合同要求退房；暂不解除合同要求退房的，则出卖人应当将房屋修复，修复前视为未交房，并按日向买受人支付总房价千分之一的违约金。&lt;/p&gt;
&lt;p&gt;第11条　商品房户型 室厅卫厕厨，本商品房使用率为：_________，房屋层高：____________毫米；室内净高：_________毫米；其中起居室尺寸：长度：_________宽度：_________高度：_________（毫米）；主卧室尺寸：长度：_________宽度：_________高度：_________（毫米）；次卧室尺寸：长度：_________宽度：_________高度：_________（毫米）；厨房尺寸：长度：_________宽度：_________高度：_________（毫米）；卫生间尺寸：长度：_______________宽度：_________高度：_______（毫米）；观景阳台尺寸：长度：______宽度：_________高度：_________（毫米）；&lt;/p&gt;
&lt;p&gt;第12条　建筑面积 1．文字定义：商品房销售的建筑面积为套内建筑面积与分摊的公用面积之和。 2．总建筑面积为：__________________平方米，套内建筑面积为：__________________平方米，阳台建筑面积：_________平方米，室内墙体面积为：_________平方米。&lt;/p&gt;
&lt;p&gt;第13条　套内建筑面积 1．文字定义：套内建筑面积为套内使用面积、套内墙体面积和阳台建筑面积三者之和。 2．面积范围：买受人所购商品房约定套内建筑面积为_________平方米，如果经过实际测量后，面积在_________至_________平方米之间的，则双方据实结算，多退少补。 3．面积超出：买受人所购商品房套内建筑面积经过实际测量后，大于_________平方米的，出卖人无权要求买受人支付多余价款，并且应当据实测面积办理产权登记。 4．面积不足：买受人所购商品房套内建筑面积经过实际测量后，小于_________平方米的，出卖人应当根据与约定套内建筑面积的差值，双倍向买受人支付多收价款，并且应当据实测面积办理产权登记。 5．比例增加：交房后，套内建筑面积、建筑面积与合同约定相比都发生增加的，应当按相同比例增加，建筑面积增加的比例大于套内建筑面积增加比例的，买受人无须为任何增加的面积支付费用。 6．比例减小：交房后，建筑面积、套内建筑面积与合同约定相比都减少的，应当按相同比例减少；建筑面积减少的比例小于套内建筑面积减少的比例的，出卖人应当按照最有益于买受人的原则退款，包括要求出卖人退还全部房款或面积变化应退的房款，买受人有权选择诸多退款方案中的一个。&lt;/p&gt;
&lt;p&gt;第14条　面积测量 房屋分摊的公用部分、面积及全部长度尺寸应当注明，经过测量的应当提供符合《房产测量规范》和《房产图图式》的测量报告，使买受人有权可以获得精确的详细内容。&lt;/p&gt;
&lt;p&gt;第15条　测量机构 测量机构应当是取得中央政府机构测绘专业管理机构颁发的测量资格的机构，测量义务不得委托给他人；没有专业资格的机构测量的数据无效，买受人有权拒绝支付房款。&lt;/p&gt;
&lt;p&gt;第16条　面积核实 买受人有权根据测量报告对任何一个尺寸进行核实，此等核实无需复杂的测量工具，仅凭于任意一个市场上购买的米尺等测量工具即可进行测量；买受人有权在入住前或入住后对室内全部长度、宽度、高度尺寸进行测量；如果需要对全楼进行测量的，出卖人有义务向买受人提供与本楼相关的图纸，买受人也可以召集楼内其他业主共同进行测量。&lt;/p&gt;
&lt;p&gt;第17条　违约条件 买受人以约定方法得到的任一个尺寸结果，与出卖人提供的图纸不符，则视为出卖人提供的公摊面积不合法，买受人有权拒绝支付公摊面积的费用；出卖人不得以此为理由拒绝交付房屋，并仍应及时为买受人办理《房屋所有权证》。&lt;/p&gt;</description>
    </item>
    <item>
      <title>定居北平</title>
      <link>https://dodoro.chouxiangpai.com/archives/338/</link>
      <pubDate>Fri, 19 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/338/</guid>
      <description>&lt;p&gt;从2010年开始准备资金，去年下半年开始慢慢在网上看房子，今年春节来之后，跑遍了大兴、房山、昌平、亦庄，看了十几个楼盘，经历了好几次的验资、摇号、选房。开始两次摇号选房都落空了，上周五长阳的一个楼盘开了，开发商为了省钱，把我们这个有优惠的用户排到了后面，本来已经对这个盘绝望，但选房的第二天销售说还有房子，又燃起了希望，我们带着希望跑过去了，最后选上了小区楼王的二层&amp;hellip;..&lt;/p&gt;
&lt;p&gt;交定金的那一刻，有点恍惚，无数次想象选到房子的情景并不是这样的。出来看见还有那么多人在排队，周末又看见其他楼盘依然那么多人抢有限的房子，心里稍微安慰了些。其实真的，这房子不便宜，怎么就能像抢大白菜一样，男女老少不看价格地疯抢呢？！不知道十年二十年后回想这时的我们，会有多少感慨。&lt;/p&gt;
&lt;p&gt;没想到，真的定居这里了——我待了5年的城市，这是我们做的最大的一件事之一，几年的积蓄倾注进去了，我谨慎、自信地等待入住和幸福美满的生活。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中使用HorizontalPager</title>
      <link>https://dodoro.chouxiangpai.com/archives/438/</link>
      <pubDate>Sat, 15 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/438/</guid>
      <description>&lt;p&gt;智能手机上通过手势翻页的效果很普遍，这是大多数应用的必备功能，目前已经有很多jar包的类库实现了这个方法，不过这次我们不需要引用jar包，因为热心的程序员已经把java版的HorizontalPager翻译成了c#版的，可以直接在项目中使用。&lt;/p&gt;
&lt;p&gt;github上面有相关的代码，直接去下载就可以&lt;a href=&#34;https://github.com/Cheesebaron/MonoDroid.HorizontalPager&#34;&gt;https://github.com/Cheesebaron/MonoDroid.HorizontalPager&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;将这个类添加到自己的项目中，使用方法如下：&lt;/p&gt;
&lt;p&gt;var horiPager = new HorizontalPager (this); horiPager.ScreenChanged += new ScreenChangedEventHandler (horiPager_ScreenChanged);&lt;/p&gt;
&lt;p&gt;horiPager.AddView (BuildWebView (nextPageModel));&lt;/p&gt;
&lt;p&gt;其中，horiPager_ScreenChanged是翻页的过程中执行的委托方法，如果需要在翻页的过程中或者完成前后做操作，可以把相应的方法写在这里。&lt;/p&gt;
&lt;p&gt;**重要说明：**HorizontalPager因为支持手势左右滑动翻页，所以捕获不到单指点击事件，但是可以通过修改源代码，实现当点击中间的时候能捕获到点击事件（不过这样手势在中间滑动的时候会捕获不到）：&lt;/p&gt;
&lt;p&gt;找到方法public override bool OnTouchEvent(MotionEvent e)，修改case为Down的情况&lt;/p&gt;
&lt;p&gt;case MotionEventActions.Down: mLastMotionX = ev.GetX(); mLastMotionY = ev.GetY(); if(mLastMotionX&amp;gt;deviceWith*5/11&amp;amp;&amp;amp;mLastMotionX&amp;lt;deviceWith*6/11) { return true; }&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中实现下拉刷新PullToRefreshListView</title>
      <link>https://dodoro.chouxiangpai.com/archives/447/</link>
      <pubDate>Fri, 07 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/447/</guid>
      <description>&lt;p&gt;下拉刷新是现在微博非常流行的更新操作，android中有非常经典的类库PullToRefreshListView，不过开发者已经把java代码转成c#了，在github上面有相关的代码下载。&lt;/p&gt;
&lt;p&gt;使用比较简单，下面给出步骤：&lt;/p&gt;
&lt;p&gt;step1：将PullToRefreshListView类库引用到项目中，并且把相关的资源文件和xml界面文件也拷贝到项目中pull_to_refresh_header.axml；&lt;/p&gt;
&lt;p&gt;step2：定义相关的类&lt;/p&gt;
&lt;p&gt;#region 下拉刷新&lt;/p&gt;
&lt;p&gt;private class RefreshListener : PullToRefreshListView.OnRefreshListener&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;private MainActivity mylActivity;&lt;/p&gt;
&lt;p&gt;List&amp;lt;WodubaoService.Model.hotnews&amp;gt; tempList;&lt;/p&gt;
&lt;p&gt;public RefreshListener (MainActivity activity)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;mylActivity = activity;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public void onRefresh ()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;ThreadPool.QueueUserWorkItem (delegate {&lt;/p&gt;
&lt;p&gt;mylActivity.isNetWork = WebHelper.CheckNetWork (mylActivity);&lt;/p&gt;
&lt;p&gt;if (mylActivity.isNetWork) {&lt;/p&gt;
&lt;p&gt;tempList = mylActivity.appA.GetAppHots ();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;mylActivity.RunOnUiThread (delegate {&lt;/p&gt;
&lt;p&gt;bool isUpate=false;&lt;/p&gt;
&lt;p&gt;if (tempList != null &amp;amp;&amp;amp; tempList.Count &amp;gt; 0) {&lt;/p&gt;
&lt;p&gt;if(!tempList[0].articleId.Equals(mylActivity.htnList[0].articleId))&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;isUpate=true;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;mylActivity.htnList = tempList;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;if(mylActivity.isNetWork) {&lt;/p&gt;
&lt;p&gt;if(isUpate)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;mylActivity.myList=new List&lt;!-- raw HTML omitted --&gt;();&lt;/p&gt;
&lt;p&gt;mylActivity.myList.Add(mylActivity.htnList);&lt;/p&gt;
&lt;p&gt;mylActivity.myList.Add(&amp;ldquo;nextpage&amp;rdquo;);&lt;/p&gt;
&lt;p&gt;mylActivity.mainListAdapter.NotifyDataSetChanged();&lt;/p&gt;
&lt;p&gt;Toast.MakeText (mylActivity, &amp;ldquo;已更新最新资讯&amp;rdquo;, ToastLength.Short).Show ();&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中引入经典类库slidingmenu</title>
      <link>https://dodoro.chouxiangpai.com/archives/425/</link>
      <pubDate>Thu, 06 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/425/</guid>
      <description>&lt;p&gt;这两年，google风格的android菜单很流行，因为能节省大量的屏幕空间，而slidingmenu是国外一个开源的类库，能实现类似facebook和google plus这样的菜单功能，通过之前的介绍，我们已经能轻松在Mono for android中引入jar包。下面介绍如何引入slidingmenu，并且实现他。&lt;/p&gt;
&lt;p&gt;step1：从github上下载&lt;a href=&#34;https://github.com/jfeinstein10/SlidingMenu&#34;&gt;https://github.com/jfeinstein10/SlidingMenu&lt;/a&gt; ，并且在项目中引用，按照&lt;a href=&#34;http://dodoro.chouxiangpai.com/archives/379&#34;&gt;Mono for android中引用jar包&lt;/a&gt;的方法添加这个类库，编译一般都会成功；&lt;/p&gt;
&lt;p&gt;step2：在需要用到的Acitivity中引用 using Com.Slidingmenu.Lib.App;&lt;/p&gt;
&lt;p&gt;step3：调用相关函数&lt;/p&gt;
&lt;p&gt;View menu = inflatorservice.Inflate (Resource.Layout.LeftMenu, null); SetBehindContentView (menu);&lt;/p&gt;
&lt;p&gt;说明：如果打算调整menu的可以拉动的宽度，调用方法 SlidingMenu.SetBehindWidth (200);&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android实现UI多线程</title>
      <link>https://dodoro.chouxiangpai.com/archives/419/</link>
      <pubDate>Fri, 17 May 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/419/</guid>
      <description>&lt;p&gt;在实际开发过程中，我们需要使用多线程来保证UI不被卡住，mono for android提供了非常方便的方法来进行多线程开发，其中一种就是使用Thread，下面是一个例子：&lt;/p&gt;
&lt;p&gt;var progressDialog = ProgressDialog.Show(this, null, &amp;ldquo;加载中&amp;hellip;&amp;rdquo;, true); ;&lt;/p&gt;
&lt;p&gt;//启动页面&lt;/p&gt;
&lt;p&gt;new Thread(new ThreadStart(delegate&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;loginuser = userapi.Login(Et_phone.Text, Et_pwd.Text, true);&lt;/p&gt;
&lt;p&gt;this.RunOnUiThread(() =&amp;gt;&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;progressDialog.Hide();&lt;/p&gt;
&lt;p&gt;if (loginuser.uid != null &amp;amp;&amp;amp; loginuser.uid.Length != 0)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;Finish();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;Toast.MakeText(this, &amp;ldquo;登录失败，请输入正确的用户名或密码&amp;rdquo;, ToastLength.Short).Show();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;});&lt;/p&gt;
&lt;p&gt;})).Start();&lt;/p&gt;
&lt;p&gt;这里其实是使用了C#的线程Thread来完成，不过有一个确定，就是不能终止当前的线程，比如如果这个线程执行慢，我先终止，暂时没有找到终止的办法&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中添加友盟sdk的第二种方法</title>
      <link>https://dodoro.chouxiangpai.com/archives/379/</link>
      <pubDate>Wed, 15 May 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/379/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://dodoro.chouxiangpai.com/archives/374&#34;&gt;前一篇文章&lt;/a&gt;介绍了如何在Mono for android中引用jar包的方法，这个方法比较麻烦，而且需要学习大量的桥接语言的命名规则，而且参数传递也很麻烦，今天我将介绍另外一种更加方便和简介的方法。通过今天的方法，我们可以添加任意的jar包，并且可以直接在c#项目中引用相应的类库，就如同我们引用一个c#类库一样，在这种方法中，一切的都是非常c#的。&lt;/p&gt;
&lt;p&gt;step1：mono for android的解决方案中，创建新的工程，选择Android下的“Android Java Bindings Library”;&lt;/p&gt;
&lt;p&gt;step2：在新创建的项目中有一个文件夹&amp;quot;Jars&amp;quot;，在这个文件夹中添加自己需要引用的jar包；&lt;/p&gt;
&lt;p&gt;step3：将新添加的Jar包的Build action设置为EmbeddedJar;&lt;/p&gt;
&lt;p&gt;step4：编译新增的工程，如果没有出问题，那么恭喜你可以调用这个jar包了，在这一步可能会出现错误，下一篇文章我会详细介绍。其实在这一步中mono完成了一项工作：将jar包的代码进行了转换，编程c#代码，非常强大。&lt;/p&gt;
&lt;p&gt;step5：在项目中引用上面编译好的工程，然后就可以直接引入名称空间，并且可以使用C#一样的语法对jar包里面的所有方法、属性进行调用。比如：&lt;/p&gt;
&lt;p&gt;Com.Umeng.Socialize.Controller.UMServiceFactory.ShareTo(this,meta,&amp;ldquo;分享自最大的数字报刊平台“我读报”）&amp;quot;,photo);&lt;/p&gt;
&lt;p&gt;网络上大量的开源jar包你都可以使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中添加友盟sdk的第一种方法</title>
      <link>https://dodoro.chouxiangpai.com/archives/374/</link>
      <pubDate>Mon, 06 May 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/374/</guid>
      <description>&lt;p&gt;如何在Mono for android中添加友盟sdk，这个功能非常重要，他直接牵扯一个非常重要的问题：如何在mono for android的项目中引入jar包？考虑到android目前大量的应用都是基于java开发的，很多开源的类库和组件也是基于java开发的，所以如何在mono项目引入jar包非常关键，这是做mono for android应用开发的核心之一。我们在项目中已经成功地引入了jar包，几乎所有的包都可以引入和使用，这当然归功于xamarin公司的优秀产品。&lt;/p&gt;
&lt;p&gt;在这里，我先介绍第一种方法：直接在app项目引入jar包，通过桥接语言调用。其实在实际项目中这种方式用得很少，但我强烈建议每一个C#程序员都尝试一次，因为他会让你对编程语言有更深一层次的理解。我以umeng_sdk.jar为例，这个包主要是用于统计app运行、安装等情况的。&lt;/p&gt;
&lt;p&gt;step1：在项目添加现有文件，选择umeng_sdk.jar；&lt;/p&gt;
&lt;p&gt;step2：将umeng_sdk.jar的属性Build Action，设置为AndroidJavaLibrary；&lt;/p&gt;
&lt;p&gt;step3：创建一个类，如下所示&lt;/p&gt;
&lt;p&gt;/// &lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;/// Java libary helper.&lt;/p&gt;
&lt;p&gt;/// java类库&lt;/p&gt;
&lt;p&gt;/// &lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;public static class JavaLibaryHelper&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;#region umeng class&lt;/p&gt;
&lt;p&gt;private static IntPtr _umengHelperClass = JNIEnv.FindClass(&amp;ldquo;com/umeng/analytics/MobclickAgent&amp;rdquo;);&lt;/p&gt;
&lt;p&gt;public static void UmengOnResume(Context context)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;IntPtr methodId = JNIEnv.GetStaticMethodID(_umengHelperClass, &amp;ldquo;onResume&amp;rdquo;, &amp;ldquo;(Landroid/content/Context;)V&amp;rdquo;);&lt;/p&gt;
&lt;p&gt;JNIEnv.CallStaticVoidMethod(_umengHelperClass, methodId,new JValue(context));&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public static void UmengOnPause(Context context)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;IntPtr methodId = JNIEnv.GetStaticMethodID(_umengHelperClass, &amp;ldquo;onPause&amp;rdquo;, &amp;ldquo;(Landroid/content/Context;)V&amp;rdquo;);&lt;/p&gt;
&lt;p&gt;JNIEnv.CallStaticVoidMethod(_umengHelperClass, methodId,new JValue(context));&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android绑定jar包报错解决办法</title>
      <link>https://dodoro.chouxiangpai.com/archives/428/</link>
      <pubDate>Sat, 20 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/428/</guid>
      <description>&lt;p&gt;前面讲过，通过EmbeddedJar方式可以绑定jar包，这个在实践中已经证明没有问题了，但是绑定的过程中，可能会出现一些小错误，我在绑定讯飞语点的jar包的时候，就报了如下的错误：&lt;/p&gt;
&lt;p&gt;Error message:&lt;/p&gt;
&lt;p&gt;obj\Debug\generated\src\Com.Iflytek.Speech.SpeechRecognizer.cs(8,69,8,80): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?)&lt;/p&gt;
&lt;p&gt;obj\Debug\generated\src\Com.Iflytek.Speech.SpeechSynthesizer.cs(8,70,8,81): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?)&lt;/p&gt;
&lt;p&gt;obj\Debug\generated\src\Com.Iflytek.Speech.SpeechUnderstander.cs(8,71,8,82): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?)&lt;/p&gt;
&lt;p&gt;obj\Debug\generated\src\Com.Iflytek.Speech.TextUnderstander.cs(8,69,8,80): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?)&lt;/p&gt;
&lt;p&gt;IDE Version: xamarin.studio 4.0.3&lt;/p&gt;
&lt;p&gt;当时几乎觉得无望的时候，给xamarin公司发了邮件，过了两天，他们回复了解决办法。他们的邮件说：这是mono for android的一个bug。幸亏给了解决办法：&lt;/p&gt;
&lt;p&gt;在创建的类库（引用了jar包的类库）的Transforms文件夹下有个Metadata.xml，在这个文件里加入：&lt;/p&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;public&lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt;OnVolumeChangedEventArgs&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;就可以解决问题了，我相信其他类似的jar包也可以通过这种方式解决。&lt;/p&gt;
&lt;p&gt;这也算是我为开源做的一次贡献，发现了一个bug，挺开心的！&lt;/p&gt;
&lt;p&gt;另外，估计xamarin公司会在下一个版本解决这个bug，坚信他们能解决。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中使用WebView，并显示加载百分比，返回按钮使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/357/</link>
      <pubDate>Thu, 11 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/357/</guid>
      <description>&lt;p&gt;WebView是一个非常重要的控件，移动开发过程中会经常使用WebView来显示数据。WebView的使用非常简单，创建相应的对象，使用LoadData或者LoadUrl方法加载html数据，前者是价值html字符串，后者是加载一个可访问的URL地址。&lt;/p&gt;
&lt;p&gt;这是基本应用，WebView还有两个高级应用，一个是显示加载的百分比，另外一个是支持返回按钮。&lt;/p&gt;
&lt;p&gt;1、如何加载百分比&lt;/p&gt;
&lt;p&gt;这里需要对WebView的方法进行重写，如下所示：&lt;/p&gt;
&lt;p&gt;private class AwesomeWebClient : WebViewClient { }&lt;/p&gt;
&lt;p&gt;private class AwesomeWebChromeClient : WebChromeClient&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;private Activity mParentActivity;&lt;/p&gt;
&lt;p&gt;private string mTitle;&lt;/p&gt;
&lt;p&gt;public AwesomeWebChromeClient(Activity parentActivity)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;mParentActivity = parentActivity;&lt;/p&gt;
&lt;p&gt;mTitle = parentActivity.Title;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public override void OnProgressChanged(WebView view, int newProgress)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;mParentActivity.Title = string.Format(&amp;ldquo;Loading {0}%&amp;rdquo;, newProgress);&lt;/p&gt;
&lt;p&gt;mParentActivity.SetProgress(newProgress * 100);&lt;/p&gt;
&lt;p&gt;if (newProgress == 100) mParentActivity.Title = mTitle;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;然后，调用相应的WebView方法：&lt;/p&gt;
&lt;p&gt;newsWebView = FindViewById&lt;!-- raw HTML omitted --&gt;(Resource.Id.newsWebView);&lt;/p&gt;
&lt;p&gt;newsWebView.Settings.JavaScriptEnabled = true;&lt;/p&gt;
&lt;p&gt;newsWebView.Settings.SetSupportZoom(true);&lt;/p&gt;
&lt;p&gt;newsWebView.Settings.BuiltInZoomControls = true;&lt;/p&gt;
&lt;p&gt;newsWebView.Settings.LoadWithOverviewMode = true; //Load 100% zoomed out&lt;/p&gt;</description>
    </item>
    <item>
      <title>设置Mono for android启动页</title>
      <link>https://dodoro.chouxiangpai.com/archives/355/</link>
      <pubDate>Wed, 10 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/355/</guid>
      <description>&lt;p&gt;移动应用都有应用启动页，在mono for android里，设置应用启动页非常简单。&lt;/p&gt;
&lt;p&gt;1、在Style.xml里添加设置：&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;2、在需要的启动Activity里设置：&lt;/p&gt;
&lt;p&gt;[Activity(Label = &amp;ldquo;我读报&amp;rdquo;, MainLauncher = true, Theme = &amp;ldquo;@style/Theme.Splash&amp;rdquo;, ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait, NoHistory = true)]&lt;/p&gt;
&lt;p&gt;public class SplashActivity : Activity{&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中js与c#代码的交互</title>
      <link>https://dodoro.chouxiangpai.com/archives/409/</link>
      <pubDate>Tue, 09 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/409/</guid>
      <description>&lt;p&gt;移动互联网的开发包中有大量的功能是设计到显示网页的，有些甚至是直接调取远程的网页，主要依赖于WebView这个控件，而实际的开发过程中，我们需要在js代码中调用c#里面的代码，或者在c#代码里直接调用相关的js方法，以完成更好的交互效果。&lt;/p&gt;
&lt;p&gt;android sdk提供了非常简便的办法来实现这一的功能，而Mono for android也提供了相关的方法，步骤如下：&lt;/p&gt;
&lt;p&gt;step1：首先要在创建一个类，这个类是用于与js代码交互的，如下所示&lt;/p&gt;
&lt;p&gt;public class Wodubao : Java.Lang.Object&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;Context context;&lt;/p&gt;
&lt;p&gt;public Wodubao (Context context)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;this.context = context;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;public Wodubao (IntPtr handle, JniHandleOwnership transfer)&lt;/dt&gt;
&lt;dd&gt;
&lt;p&gt;base (handle, transfer)&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;[Export (&amp;ldquo;Article&amp;rdquo;)]&lt;/p&gt;
&lt;p&gt;// to become consistent with Java/JS interop convention, the argument cannot be System.String.&lt;/p&gt;
&lt;p&gt;public void Article (Java.Lang.String articleid)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;ArticleActivity currentArticle = (ArticleActivity)context;&lt;/p&gt;
&lt;p&gt;currentArticle.Finish ();&lt;/p&gt;
&lt;p&gt;Intent intent = new Intent (context, typeof(ArticleActivity));&lt;/p&gt;
&lt;p&gt;intent.PutExtra (&amp;ldquo;articleid&amp;rdquo;, articleid.ToString ());&lt;/p&gt;
&lt;p&gt;context.StartActivity (intent);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;说明：Wodubao是一个用于与js代码交互的类，在这个类里定义了一个方法Article ，这个就是js代码里的方法，方法需要一个参数 articleid，这个方法可以调用当前activity里的所有方法，以实现相应的效果。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中MD5加密的方法</title>
      <link>https://dodoro.chouxiangpai.com/archives/414/</link>
      <pubDate>Tue, 02 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/414/</guid>
      <description>&lt;p&gt;其实和C#的代码是一样的，完全可以复用，这里给出相应的代码&lt;/p&gt;
&lt;p&gt;/// &lt;!-- raw HTML omitted --&gt; /// MD5 /// &lt;!-- raw HTML omitted --&gt; /// &lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt; /// &lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt; public string MD5Hash(string strText) { MD5 MD5 = new MD5CryptoServiceProvider(); byte[] datSource = encoding.GetBytes(strText); byte[] newSource = MD5.ComputeHash(datSource); string byte2String = null; for (int i = 0; i &amp;lt; newSource.Length; i++) { string thisByte = newSource[i].ToString(&amp;ldquo;x&amp;rdquo;); if (thisByte.Length == 1) thisByte = &amp;ldquo;0&amp;rdquo; + thisByte; byte2String += thisByte; } return byte2String.ToUpper(); }&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中使用sqlite</title>
      <link>https://dodoro.chouxiangpai.com/archives/359/</link>
      <pubDate>Thu, 28 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/359/</guid>
      <description>&lt;p&gt;小型数据库的使用在移动开发过程中非常方便，Mono for android提供了多种数据库访问方式，可以使用sqlite、使用WCF直接访问数据库，sqlite的访问非常简单，下面是一个使用monodroid（或者Mono for andorid访问数据库的方法）：&lt;/p&gt;
&lt;p&gt;/// &lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;/// A helper class for working with SQLite&lt;/p&gt;
&lt;p&gt;/// &lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;public static class Database&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;private static string db_file = &amp;ldquo;database.db3&amp;rdquo;;&lt;/p&gt;
&lt;p&gt;public static SqliteConnection GetConnection ()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;var dbPath = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.Personal), db_file);&lt;/p&gt;
&lt;p&gt;bool exists = File.Exists (dbPath);&lt;/p&gt;
&lt;p&gt;if (!exists)&lt;/p&gt;
&lt;p&gt;SqliteConnection.CreateFile (dbPath);&lt;/p&gt;
&lt;p&gt;var conn = new SqliteConnection (&amp;ldquo;Data Source=&amp;rdquo; + dbPath);&lt;/p&gt;
&lt;p&gt;if (!exists)&lt;/p&gt;
&lt;p&gt;CreateDatabase (conn);&lt;/p&gt;
&lt;p&gt;return conn;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono的早期历史</title>
      <link>https://dodoro.chouxiangpai.com/archives/317/</link>
      <pubDate>Tue, 29 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/317/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Mono的早期历史&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Miguel de Icaza  2003.10.13&lt;/p&gt;
&lt;p&gt;Q:   你好，冒昧地问一下，是否在dotGnu of .NET 之前Mono项目就已经开始了？我很好奇。&lt;/p&gt;
&lt;p&gt;我在那时候开始着手Mono项目的开发，对于Mono，事情大概是这样的：&lt;/p&gt;
&lt;p&gt;2000年9月份，当.NET的文档出现的时候，我就开始对这个技术充满了兴趣，然后和所有人一样开始对字节码解释器进行研究，但是我面临一个问题：没有详细描述metadata的说明。&lt;/p&gt;
&lt;p&gt;.NET的最终文档是在2001年1月22日的时候发布了，那段时间我开始写信给.NET的相关人员，希望能得到那份遗漏的关于metadata的文档。&lt;/p&gt;
&lt;p&gt;我一边等待回复，一边开始开发自己的C#编译器，顺便当作第一个学习C#的练习工作，然后开始写解释器。&lt;/p&gt;
&lt;p&gt;写编译器的这段时间，Rhys联系了我，他已经通过反编译获得了一些早期的metadata代码格式，这是一项非常有趣的工作，那时候我们小组只有三个人一起努力：Rhys、Saurik和我。&lt;/p&gt;
&lt;p&gt;Sam Ruby发布了ECMA委员拥有的C#的二进制文档，虽然这并不是本来的安排。我并不知道事情会朝哪个方向发展，但是在2001年4月份，ECMA委员会发布了那份遗漏的文档。&lt;/p&gt;
&lt;p&gt;这就意味着我自己的C#编译器可以完成解析器的工作了，然后我开始在周围让大家试用我的编译器，同时我们可以开始完整地学习文档，用于构建一个开源项目。&lt;/p&gt;
&lt;p&gt;我们的研发工作包括：构建一个metadata读取器，这个工作人让我们很痛苦，因为Saurik已经做了一个了，他感觉他的代码没有被利用，而Rhys也有一个读取器，我个人并不是很喜欢（因为它不是基于Linux/Gnumeric代码风格）。&lt;/p&gt;
&lt;p&gt;从2000年9月份开始，我就感叹.NET框架的魅力，当我们在Ximian内部讨论它的优点的时候，我们会跟其他人的工作联想起来，比如“Labs”组织的CORBA、SOAP和Perl团队为Gnome绑定基础服务（别忘记了：支撑我们工作的动力是我们希望我们的APIs只需要编写一次，就可以使用任何语言来调用）&lt;/p&gt;
&lt;p&gt;“Labs”组织的努力工作最终结果是：Bonobo-conf,ORBit2, bonobo-activation, Soup, 和Perl/Gtk绑定，目的是希望创建工具提高我们的生产力：用更少的时间开发更多的应用，提升更高的抽象和标准在桌面应用上，以节省我们的时间和开发成本。&lt;/p&gt;
&lt;p&gt;他们的产品是积极有效的，但是所有这些用.NET框架都可以轻易实现。&lt;/p&gt;
&lt;p&gt;但是当我们完成学习的时候，我很清楚地知道是有可能去构建这样一种技术，他可以成为未来linux桌面的高效开发工具。请记住：从这个角度说，我们正在开发一个最大的桌面应用程序，随着时间的向前发展，最终都会开源（比如Mozilla和OpenOffice最开始也是收费产品，后面也变得开源了）。&lt;/p&gt;
&lt;p&gt;虽然我们已经拥有在构建开源项目的经验，但还要处理一些相对重要的代码还是很痛苦。&lt;/p&gt;
&lt;p&gt;Nat Friedman强力支持我们，希望我们的努力能获得更大的突破，我们获得了在Ximian实验室的管理权，大部分在Ximian实验室的开发人员都加入了Mono团队。我们团队的目标就是希望能创造出一个工具以提高开发人员的工作效率。&lt;/p&gt;
&lt;p&gt;我们保持平静，让我们的团队慢慢迁移到Mono项目中，大家逐步收缩自己手头上的项目，仅仅有两位保留在原来的项目，最后，Dietmar, Paolo, Dick和我都开始为Mono项目工作。&lt;/p&gt;
&lt;p&gt;Ravi马上就会加入我们，他会帮助我们开发C#编译器。&lt;/p&gt;
&lt;p&gt;很显然，一个小团队是不可能开发出一个完整的.NET框架的替代品的，所以我计划把Mono变成一个开源的项目。负责市场推广的Jon Perr知道我们把项目推广出去。&lt;/p&gt;
&lt;p&gt;我们原来计划在2001年7月19日公开发布，这样我们就可以赶上O&amp;rsquo;Reilly会议，Tim O&amp;rsquo;Reilly一直都很支持我们的项目，他从一开始就帮助Mono，当它还是一个很小项目的时候。当我们发布我们的项目的时候，我们同时发布了metadata框架、C#编译器和一些初始类库。&lt;/p&gt;
&lt;p&gt;所以官方地说，Mono的发布日期是那天，但是它酝酿了很久。&lt;/p&gt;
&lt;p&gt;对我来说，什么最重要并不是关键，因为Mono项目之于我意味着：一项帮助Linux在桌面获得成功的技术。当然，它有自己的生命发展周期，Mono并不是因为Ximain/Novell选择它所以才有它，对它的贡献和选择来自它的贡献者和选择者。所以，Mono要变得强大和壮大也要靠它的使用者。&lt;/p&gt;
&lt;p&gt;希望这样能回答你的问题。&lt;/p&gt;
&lt;p&gt;英文源地址 &lt;a href=&#34;http://lists.ximian.com/pipermail/mono-list/2003-October/016345.html&#34;&gt;http://lists.ximian.com/pipermail/mono-list/2003-October/016345.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>开源Mono</title>
      <link>https://dodoro.chouxiangpai.com/archives/309/</link>
      <pubDate>Fri, 25 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/309/</guid>
      <description>&lt;h2 id=&#34;1-mono是什么&#34;&gt;1、 Mono是什么&lt;/h2&gt;
&lt;p&gt;Mono诞生于2001年，他的创始人是全球开源世界排名第5的墨西哥传奇程序员Miguel de Icaza和他的朋友。Mono最开始的团队Ximian被Novell收购，所以Mono项目一直是由Novell赞助。2011年Novell被收购，Mono的团队濒临被解散，Mono处于非常危险的境地。这时候，拥有大将风范的Miguel de Icaza领导团队自立门户，创办了&lt;a href=&#34;http://www.xamarin.com/&#34;&gt;Xamarin&lt;/a&gt;（http://www.xamarin.com/）公司，并担任CTO，Mono免于灾难。目前Xamarin公司发展迅猛，2012年7月获得了一笔1200万美金的风险投资，公司现在致力于开发出好用、高效、好玩的移动应用平台。&lt;/p&gt;
&lt;p&gt;Mono是.NET Framework 的一种开源实现。&lt;/p&gt;
&lt;p&gt;Mono项目将使开发者使用C＃写的.NET应用程序，能在任何Mono支持的平台上运行, 包括Linux、 Unix、FreeBSD和Windows。Mono项目将使大家能开发出各种跨平台的应用程序, 并能极大提高开源领域的开发效率。&lt;/p&gt;
&lt;p&gt;作为一个有机的.NET整体, 它包括一个C#编译器, 一个公用语言运行时环境，以及相关的一整套类库，他甚至还包括IDE、调试工具和文档浏览器。&lt;/p&gt;
&lt;p&gt;Mono项目的网址是：http://www.mono-project.com&lt;/p&gt;
&lt;h2 id=&#34;2mono的意义&#34;&gt;2、 Mono的意义&lt;/h2&gt;
&lt;p&gt;   Miguel de Icaza希望Mono希望实现“一次编写，到处运行”。Mono的目标是跨平台，跨语言。如果Mono成功的话，语言和平台对开发者的影响将变的很小，这也是Miguel de Icaza在创建Mono的时候就希望的——Linux的普通用户可以编写自己的程序（详《Mono的一些早期故事》见http://lists.ximian.com/pipermail/mono-list/2003-October/016371.html ）。Miguel de Icaza是GHOME的创始人，他自己深知要想让现代程序员采用c、c++语言为linux家族创建普通的应用程序太难了，这也是为什么他致力于推进Mono的原因，因为C#确实是目前最伟大最优美的语言，简单、易学，既可以快速开发出应用程序，也可以写出有深度的程序。目前Miguel de Icaza的目标在移动，他相信目前是移动互联网发展的高潮期，操作系统没有稳定，未来会诞生出操作系统层面的开发工具，他知道可能不会是java、也可能不会是object c，他希望是Mono，这也是为什么出现了MonoTouch和Mono for android。&lt;/p&gt;
&lt;p&gt;  当然Miguel de Icaza对C#也是很有感情的，从C#诞生之日就一直在推动C#语言的发展，他还亲自编写C#的编译器（这个编译器是基于gun的）。&lt;/p&gt;
&lt;h2 id=&#34;3mono的未来&#34;&gt;3、 Mono 的未来&lt;/h2&gt;
&lt;p&gt; 未来有无限种可能，而Mono的未来相信Miguel de Icaza自己很清楚，并且他会为此不断奋斗，他希望更多开源世界的人一起进来推动Mono。他并不是不喜欢c和c++，但是这两门语言不是桌面需要的；而java确实不怎么样，更何况现在活在oracle下面。C#是标准的、开放的（这也许是得益于它的创始人安德森），Miguel de Icaza基于它写出了Mono，相信Mono会有一个伟大的未来，即使不伟大，我们也可以用它来做伟大的事。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们团队决定采用Mono进行移动开发</title>
      <link>https://dodoro.chouxiangpai.com/archives/306/</link>
      <pubDate>Sat, 22 Dec 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/306/</guid>
      <description>&lt;p&gt;经过一个多月时间的深思熟虑，我还是决定和团队的成员选择Mono作为我们的移动开发框架，理由有三个：C#太优美了；我们希望跨平台跨语言开发程序；为开源世界贡献力量。&lt;/p&gt;
&lt;p&gt;我在2010年下半年开始参与ios应用的开发，现学了object-c，开发出了一个应用，当时公司还有团队在开发android的应用，2010年正直移动开发的爆发前夜。2011年的时候有同事聊过想一起出去做点事情，而移动互联网肯定是重点。于是开始着手做一些准备，无意间了解到了Mono的创始人开始创立自己的公司了，公司全力投入MonoTouch（Mono在很久以前也听说过）的研发，并且知道Mono for android正在开发中，很兴奋。我写信给Miguel de Icaza，咨询他关于他们产品的研发时间，他很快做了回复，并且说未来几个月时间就会推出产品。可惜后面公司变动，我去了百度，专注于LAMP下的开发。&lt;/p&gt;
&lt;p&gt;2012年中，我辞掉百度的工作，开始热血沸腾的“创业”，中途历经挫折，差点“未成创业，已经失业”，最后找到一个避风港，继续编写代码。到今天，终于再次有机会做移动端的开发了。我最后还是选择了Mono！&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Emgu cv中的SIFT算法实现</title>
      <link>https://dodoro.chouxiangpai.com/archives/299/</link>
      <pubDate>Thu, 29 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/299/</guid>
      <description>&lt;p&gt;SIFT算法大家都比较熟悉，网上的版本很多，刚开始接触时我主要研究的是C++，因为相对于C#，基于OPEN CV C++的SIFT算法资料更多，但是由于想要实现较为理想的界面效果，最终还是放弃了使用C++转而使用C#。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;C#中SIFT算法主要分为三种：&lt;/p&gt;
&lt;p&gt;1）脱离Emgu cv平台，完全手动实现所有SIFT算法函数，这样的程序虽然实现有些困难，但是完全可借助已有的C++程序做更改，而且这样做最大的好处就是对SIFT算法的原理有更深的理解。&lt;/p&gt;
&lt;p&gt;2）实现时使用少量Emgu cv函数（例如影像的读取，灰度值获得等），但是大部分工作还是依赖于.net平台自行完成。&lt;/p&gt;
&lt;p&gt;3）基本上程序完全借助于Emgu cv提供的接口，核心函数完全由Emgu cv提供。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;前两类程序资源较多，大家也很容易下载，第三类程序资源相对较少，因此我今天简单为大家介绍第三类算法的实现方法，首先回顾一下SIFT算法计算步骤：&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;1. 尺度空间极值检测：搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。&lt;/p&gt;
&lt;p&gt;2. 关键点定位：在每个候选的位置上，通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。&lt;/p&gt;
&lt;p&gt;3. 方向确定：基于图像局部的梯度方向，分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换，从而提供对于这些变换的不变性。&lt;/p&gt;
&lt;p&gt;4. 关键点描述：在每个关键点周围的邻域内，在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示，这种表示允许比较大的局部形状的变形和光照变化。&lt;/p&gt;
&lt;p&gt;使用Emgu cv实现上述步骤非常简单，程序如下：&lt;/p&gt;
&lt;p&gt;//确定匹配图像&lt;/p&gt;
&lt;p&gt;Bitmap bt1 = new Bitmap(@&amp;ldquo;C:\Users\GAOXIANG\Desktop\111.jpg&amp;rdquo;); Bitmap bt2 = new Bitmap(@&amp;ldquo;C:\Users\GAOXIANG\Desktop\222.jpg&amp;rdquo;);&lt;/p&gt;
&lt;p&gt;//将图像转为Emgu cv的处理格式&lt;/p&gt;
&lt;p&gt;Image&amp;lt;Gray, byte&amp;gt; img1 = new Image&amp;lt;Gray, byte&amp;gt;(bt1); Image&amp;lt;Gray, byte&amp;gt; img2 = new Image&amp;lt;Gray, byte&amp;gt;(bt2);&lt;/p&gt;
&lt;p&gt;//使用Emgu cv探测图片特征点&lt;/p&gt;
&lt;p&gt;SIFTDetector sift = new SIFTDetector(); var f1 = sift.DetectFeatures(img1, null); var f2 = sift.DetectFeatures(img2, null);&lt;/p&gt;
&lt;p&gt;到此已经获得了两张相片的特征点f1,f2,接下来就是将相互匹配的特征点相连：&lt;/p&gt;
&lt;p&gt;for (int i = 0; i &amp;lt; f1.Length; i++) { double[] dist = new double[f2.Length]; int n = 0; int index = 0; for (int j = 0; j &amp;lt; f2.Length; j++) {&lt;/p&gt;</description>
    </item>
    <item>
      <title>svn命令copy使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/291/</link>
      <pubDate>Tue, 20 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/291/</guid>
      <description>&lt;h2 id=&#34;名称&#34;&gt;名称&lt;/h2&gt;
&lt;p&gt;svn copy — 拷贝工作拷贝的一个文件或目录到版本库。&lt;/p&gt;
&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;svn copy SRC DST
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;描述&#34;&gt;描述&lt;/h2&gt;
&lt;p&gt;拷贝工作拷贝的一个文件或目录到版本库。_&lt;code&gt;SRC&lt;/code&gt;&lt;em&gt;和&lt;/em&gt;&lt;code&gt;DST&lt;/code&gt;_既可以是工作拷贝（WC）路径也可以是URL：&lt;/p&gt;
&lt;p&gt;WC -&amp;gt; WC&lt;/p&gt;
&lt;p&gt;拷贝并且预定一个添加的项目（包含历史）。&lt;/p&gt;
&lt;p&gt;WC -&amp;gt; URL&lt;/p&gt;
&lt;p&gt;将WC或URL的拷贝立即提交。&lt;/p&gt;
&lt;p&gt;URL -&amp;gt; WC&lt;/p&gt;
&lt;p&gt;检出URL到WC，并且加入到添加计划。&lt;/p&gt;
&lt;p&gt;URL -&amp;gt; URL&lt;/p&gt;
&lt;p&gt;完全的服务器端拷贝，通常用在分支和标签。&lt;/p&gt;
&lt;h3 id=&#34;注意&#34;&gt;注意&lt;/h3&gt;
&lt;p&gt;你只可以在单个版本库中拷贝文件，Subversion还不支持跨版本库的拷贝。&lt;/p&gt;
&lt;h2 id=&#34;别名&#34;&gt;别名&lt;/h2&gt;
&lt;p&gt;cp&lt;/p&gt;
&lt;h2 id=&#34;变化&#34;&gt;变化&lt;/h2&gt;
&lt;p&gt;如果目标是URL则包括版本库。&lt;/p&gt;
&lt;p&gt;如果目标是WC路径，则是工作拷贝。&lt;/p&gt;
&lt;h2 id=&#34;是否访问版本库&#34;&gt;是否访问版本库&lt;/h2&gt;
&lt;p&gt;如果目标是版本库，或者需要查看修订版本号，则会访问版本库。&lt;/p&gt;
&lt;h2 id=&#34;选项&#34;&gt;选项&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--message (-m) TEXT
--file (-F) FILE
--revision (-r) REV
--quiet (-q)
--username USER
--password PASS
--no-auth-cache
--non-interactive
--force-log
--editor-cmd EDITOR
--encoding ENC
--config-dir DIR
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;例子&#34;&gt;例子&lt;/h2&gt;
&lt;p&gt;拷贝工作拷贝的一个项目（只是预定要拷贝—在提交之前不会影响版本库）：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn copy foo.txt bar.txt
A         bar.txt
$ svn status
A  +   bar.txt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;拷贝你的工作拷贝的一个项目到版本库的URL（直接的提交，所以需要提供一个提交信息）：&lt;/p&gt;</description>
    </item>
    <item>
      <title>svn命令delete使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/293/</link>
      <pubDate>Tue, 20 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/293/</guid>
      <description>&lt;h2 id=&#34;名称&#34;&gt;名称&lt;/h2&gt;
&lt;p&gt;svn delete — 从工作拷贝或版本库删除一个项目。&lt;/p&gt;
&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;svn delete PATH...
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;svn delete URL...
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;描述&#34;&gt;描述&lt;/h2&gt;
&lt;p&gt;_&lt;code&gt;PATH&lt;/code&gt;_指定的项目会在下次提交删除，文件（和没有提交的目录）会立即从版本库删除，这个命令不会删除任何未版本化或已经修改的项目；使用&lt;code&gt;--force&lt;/code&gt;选项可以覆盖这种行为方式。&lt;/p&gt;
&lt;p&gt;URL指定的项目会在直接提交中从版本库删除，多个URL的提交是原子操作。&lt;/p&gt;
&lt;h2 id=&#34;别名&#34;&gt;别名&lt;/h2&gt;
&lt;p&gt;del, remove, rm&lt;/p&gt;
&lt;h2 id=&#34;变化&#34;&gt;变化&lt;/h2&gt;
&lt;p&gt;如果操作对象是文件则是工作拷贝变化，对象是URL则会影响版本库。&lt;/p&gt;
&lt;h2 id=&#34;是否访问版本库&#34;&gt;是否访问版本库&lt;/h2&gt;
&lt;p&gt;对URL操作时访问&lt;/p&gt;
&lt;h2 id=&#34;选项&#34;&gt;选项&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--force
--force-log
--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--targets FILENAME
--username USER
--password PASS
--no-auth-cache
--non-interactive
--editor-cmd EDITOR
--encoding ENC
--config-dir DIR
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;例子&#34;&gt;例子&lt;/h2&gt;
&lt;p&gt;使用&lt;strong&gt;svn&lt;/strong&gt;从工作拷贝删除文件只是预定要删除，当你提交，文件才会从版本库删除。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn delete myfile
D         myfile

$ svn commit -m &amp;#34;Deleted file &amp;#39;myfile&amp;#39;.&amp;#34;
Deleting       myfile
Transmitting file data .
Committed revision 14.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然而直接删除一个URL，你需要提供一个日志信息：&lt;/p&gt;</description>
    </item>
    <item>
      <title>svn命令diff使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/295/</link>
      <pubDate>Tue, 20 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/295/</guid>
      <description>&lt;h2 id=&#34;名称&#34;&gt;名称&lt;/h2&gt;
&lt;p&gt;svn diff — 比较两条路径的区别。&lt;/p&gt;
&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;diff [-r N[:M]] [TARGET[@REV]...]
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;diff [-r N[:M]] --old OLD-TGT[@OLDREV] [--new NEW-TGT[@NEWREV]] [PATH...]
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;描述&#34;&gt;描述&lt;/h2&gt;
&lt;p&gt;显示两条路径的区别，&lt;strong&gt;svn diff&lt;/strong&gt;有三种使用方式：&lt;/p&gt;
&lt;p&gt;**svn diff [-r N[:M]] [&amp;ndash;old OLD-TGT] [&amp;ndash;new NEW-TGT] [PATH&amp;hellip;]**会显示_&lt;code&gt;OLD-TGT&lt;/code&gt;&lt;em&gt;和&lt;/em&gt;&lt;code&gt;NEW-TGT&lt;/code&gt;&lt;em&gt;的区别。如果给定路径&lt;/em&gt;&lt;code&gt;PATH&lt;/code&gt;&lt;em&gt;，它会被看作&lt;/em&gt;&lt;code&gt;OLD-TGT&lt;/code&gt;&lt;em&gt;和&lt;/em&gt;&lt;code&gt;NEW-TGT&lt;/code&gt;&lt;em&gt;的相对路径，输出也会限制在这些路径的区别上。&lt;/em&gt;&lt;code&gt;OLD-TGT&lt;/code&gt;&lt;em&gt;和&lt;/em&gt;&lt;code&gt;NEW-TGT&lt;/code&gt;&lt;em&gt;可以是工作拷贝路径或者是&lt;/em&gt;&lt;code&gt;URL&lt;/code&gt;&lt;em&gt;&lt;code&gt;[@&lt;/code&gt;&lt;/em&gt;&lt;code&gt;REV&lt;/code&gt;&lt;em&gt;&lt;code&gt;]&lt;/code&gt;。&lt;/em&gt;&lt;code&gt;OLD-TGT&lt;/code&gt;&lt;em&gt;缺省是当前工作目录，而&lt;/em&gt;&lt;code&gt;NEW-TGT&lt;/code&gt;&lt;em&gt;缺省是&lt;/em&gt;&lt;code&gt;OLD-TGT&lt;/code&gt;&lt;em&gt;。&lt;/em&gt;&lt;code&gt;N&lt;/code&gt;&lt;em&gt;缺省是&lt;code&gt;BASE&lt;/code&gt;，&lt;/em&gt;&lt;code&gt;M&lt;/code&gt;&lt;em&gt;缺省时当前目录的版本，但如果&lt;/em&gt;&lt;code&gt;NEW-TGT&lt;/code&gt;&lt;em&gt;是一个URL，则默认是&lt;code&gt;HEAD&lt;/code&gt;。&lt;strong&gt;svn diff -r N&lt;/strong&gt;设置&lt;/em&gt;&lt;code&gt;OLD-TGT&lt;/code&gt;&lt;em&gt;的修订版本为&lt;/em&gt;&lt;code&gt;N&lt;/code&gt;&lt;em&gt;，&lt;strong&gt;svn diff -r N:M&lt;/strong&gt;设置&lt;/em&gt;&lt;code&gt;NEW-TGT&lt;/code&gt;&lt;em&gt;的修订版本是&lt;/em&gt;&lt;code&gt;M&lt;/code&gt;_。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;svn diff [-r N[:M]] URL1[@N] URL2[@M]&lt;strong&gt;是&lt;/strong&gt;svn diff [-r N[:M]] &amp;ndash;old=URL1 &amp;ndash;new=URL2&lt;/strong&gt;的缩写。&lt;/p&gt;
&lt;p&gt;_&lt;code&gt;TARGET&lt;/code&gt;_是一个URL，然后可以使用前面提到的&lt;code&gt;--revision&lt;/code&gt;或“@”符号来指定N和M。&lt;/p&gt;
&lt;p&gt;如果_&lt;code&gt;TARGET&lt;/code&gt;_是工作拷贝路径，则&lt;code&gt;--revision&lt;/code&gt;选项的含义是：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;--revision N:M&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;服务器比较 &lt;em&gt;&lt;code&gt;TARGET&lt;/code&gt;&lt;/em&gt;@&lt;em&gt;&lt;code&gt;N&lt;/code&gt;&lt;em&gt;和&lt;/em&gt;&lt;code&gt;TARGET&lt;/code&gt;&lt;/em&gt;@&lt;em&gt;&lt;code&gt;M&lt;/code&gt;&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;--revision N&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;客户端比较_&lt;code&gt;TARGET&lt;/code&gt;&lt;em&gt;@&lt;/em&gt;&lt;code&gt;N&lt;/code&gt;_和工作拷贝。&lt;/p&gt;
&lt;p&gt;（无&lt;code&gt;--revision&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;客户端比较base和 &lt;em&gt;&lt;code&gt;TARGET&lt;/code&gt;&lt;em&gt;的&lt;/em&gt;&lt;code&gt;TARGET&lt;/code&gt;&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;如果使用其他语法，服务器会比较_&lt;code&gt;URL1&lt;/code&gt;&lt;em&gt;和&lt;/em&gt;&lt;code&gt;URL2&lt;/code&gt;&lt;em&gt;各自的&lt;/em&gt;&lt;code&gt;N&lt;/code&gt;&lt;em&gt;和&lt;/em&gt;&lt;code&gt;M&lt;/code&gt;&lt;em&gt;。如果省掉&lt;/em&gt;&lt;code&gt;N&lt;/code&gt;&lt;em&gt;或&lt;/em&gt;&lt;code&gt;M&lt;/code&gt;_，会假定为&lt;code&gt;HEAD&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;缺省情况下，&lt;strong&gt;svn diff&lt;/strong&gt;忽略文件的祖先，只会比较两个文件的内容。如果你使用&lt;code&gt;--notice-ancestry&lt;/code&gt;，比较修订版本（也就是，当你运行&lt;strong&gt;svn diff&lt;/strong&gt;比较两个内容相同，但祖先历史不同的对象会看到所有的内容被删除又再次添加）时就会考虑路径的祖先。&lt;/p&gt;
&lt;h2 id=&#34;别名&#34;&gt;别名&lt;/h2&gt;
&lt;p&gt;di&lt;/p&gt;
&lt;h2 id=&#34;变化&#34;&gt;变化&lt;/h2&gt;
&lt;p&gt;无&lt;/p&gt;
&lt;h2 id=&#34;是否访问版本库&#34;&gt;是否访问版本库&lt;/h2&gt;
&lt;p&gt;获得工作拷贝非&lt;code&gt;BASE&lt;/code&gt;修订版本的区别时会&lt;/p&gt;</description>
    </item>
    <item>
      <title>svn命令add使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/277/</link>
      <pubDate>Fri, 16 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/277/</guid>
      <description>&lt;h2 id=&#34;名称&#34;&gt;名称&lt;/h2&gt;
&lt;p&gt;svn add — 添加文件、目录或符号链。&lt;/p&gt;
&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;svn add PATH...
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;描述&#34;&gt;描述&lt;/h2&gt;
&lt;p&gt;添加文件、目录或符号链到你的工作拷贝并且预定添加到版本库。它们会在下次提交上传并添加到版本库，如果你在提交之前改变了主意，你可以使用&lt;strong&gt;svn revert&lt;/strong&gt;取消预定。&lt;/p&gt;
&lt;h2 id=&#34;别名&#34;&gt;别名&lt;/h2&gt;
&lt;p&gt;无&lt;/p&gt;
&lt;h2 id=&#34;变化&#34;&gt;变化&lt;/h2&gt;
&lt;p&gt;工作拷贝&lt;/p&gt;
&lt;h2 id=&#34;是否访问版本库&#34;&gt;是否访问版本库&lt;/h2&gt;
&lt;p&gt;否&lt;/p&gt;
&lt;h2 id=&#34;选项&#34;&gt;选项&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--targets FILENAME
--non-recursive (-N)
--quiet (-q)
--config-dir DIR
--auto-props
--no-auto-props
--force
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;例子&#34;&gt;例子&lt;/h2&gt;
&lt;p&gt;添加一个文件到工作拷贝：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn add foo.c 
A         foo.c
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;当添加一个目录，&lt;strong&gt;svn add&lt;/strong&gt;缺省的行为方式是递归的：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn add testdir
A         testdir
A         testdir/a
A         testdir/b
A         testdir/c
A         testdir/d
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;你可以只添加一个目录而不包括其内容：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn add --non-recursive otherdir
A         otherdir
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;通常情况下，命令&lt;strong&gt;svn add *&lt;strong&gt;会忽略所有已经在版本控制之下的目录，有时候，你会希望添加所有工作拷贝的未版本化文件，包括那些隐藏在深处的文件，可以使用&lt;/strong&gt;svn add&lt;/strong&gt;的&lt;code&gt;--force&lt;/code&gt;递归到版本化的目录下：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn add * --force
A         foo.c
A         somedir/bar.c
A         otherdir/docs/baz.doc
[...]
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>svn命令blame使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/283/</link>
      <pubDate>Fri, 16 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/283/</guid>
      <description>&lt;h2 id=&#34;名称&#34;&gt;名称&lt;/h2&gt;
&lt;p&gt;svn blame — 显示特定文件和URL内嵌的作者和修订版本信息。&lt;/p&gt;
&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;svn blame TARGET...
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;描述&#34;&gt;描述&lt;/h2&gt;
&lt;p&gt;显示特定文件和URL内嵌的作者和修订版本信息。每一行文本在开头都放了最后修改的作者（用户名）和修订版本号。&lt;/p&gt;
&lt;h2 id=&#34;别名&#34;&gt;别名&lt;/h2&gt;
&lt;p&gt;praise、annotate、ann&lt;/p&gt;
&lt;h2 id=&#34;变化&#34;&gt;变化&lt;/h2&gt;
&lt;p&gt;无&lt;/p&gt;
&lt;h2 id=&#34;是否访问版本库&#34;&gt;是否访问版本库&lt;/h2&gt;
&lt;p&gt;是&lt;/p&gt;
&lt;h2 id=&#34;选项&#34;&gt;选项&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--revision (-r) REV
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR
--verbose
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;例子&#34;&gt;例子&lt;/h2&gt;
&lt;p&gt;如果你希望在测试版本库看到blame标记的&lt;code&gt;readme.txt&lt;/code&gt;源代码：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn blame http://svn.red-bean.com/repos/test/readme.txt
     3      sally This is a README file.
     5      harry You should read this.
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>svn命令checkout使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/279/</link>
      <pubDate>Fri, 16 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/279/</guid>
      <description>&lt;h2 id=&#34;名称&#34;&gt;名称&lt;/h2&gt;
&lt;p&gt;svn checkout — 从版本库取出一个工作拷贝。&lt;/p&gt;
&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;svn checkout URL[@REV]... [PATH]
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;描述&#34;&gt;描述&lt;/h2&gt;
&lt;p&gt;从版本库取出一个工作拷贝，如果省略_&lt;code&gt;PATH&lt;/code&gt;_，URL的基名称会作为目标，如果给定多个URL，每一个都会检出到PATH的子目录，使用URL基名称的子目录名称。&lt;/p&gt;
&lt;h2 id=&#34;别名&#34;&gt;别名&lt;/h2&gt;
&lt;p&gt;co&lt;/p&gt;
&lt;h2 id=&#34;变化&#34;&gt;变化&lt;/h2&gt;
&lt;p&gt;创建一个工作拷贝。&lt;/p&gt;
&lt;h2 id=&#34;是否访问版本库&#34;&gt;是否访问版本库&lt;/h2&gt;
&lt;p&gt;是&lt;/p&gt;
&lt;h2 id=&#34;选项&#34;&gt;选项&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--revision (-r) REV
--quiet (-q)
--non-recursive (-N)
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;例子&#34;&gt;例子&lt;/h2&gt;
&lt;p&gt;取出一个工作拷贝到&lt;code&gt;mine&lt;/code&gt;：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn checkout file:///tmp/repos/test mine
A  mine/a
A  mine/b
Checked out revision 2.
$ ls
mine
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;检出两个目录到两个单独的工作拷贝：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn checkout file:///tmp/repos/test  file:///tmp/repos/quiz
A  test/a
A  test/b
Checked out revision 2.
A  quiz/l
A  quiz/m
Checked out revision 2.
$ ls
quiz  test
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;检出两个目录到两个单独的工作拷贝，但是将两个目录都放到&lt;code&gt;working-copies&lt;/code&gt;：&lt;/p&gt;</description>
    </item>
    <item>
      <title>svn命令cleanup使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/275/</link>
      <pubDate>Fri, 16 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/275/</guid>
      <description>&lt;h2 id=&#34;名称&#34;&gt;名称&lt;/h2&gt;
&lt;p&gt;svn cleanup — 递归清理工作拷贝。&lt;/p&gt;
&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;svn cleanup [PATH...]
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;描述&#34;&gt;描述&lt;/h2&gt;
&lt;p&gt;递归清理工作拷贝，删除未完成的操作锁定。如果你得到一个“工作拷贝已锁定”的错误，运行这个命令可以删除无效的锁定，让你的工作拷贝再次回到可用的状态。&lt;/p&gt;
&lt;p&gt;如果，因为一些原因，运行外置的区别程序（例如，用户输入或是网络错误）有时候会导致一个&lt;strong&gt;svn update&lt;/strong&gt;失败，使用&lt;code&gt;--diff3-cmd&lt;/code&gt;选项可以完全清除你的外置区别程序所作的合并，你也可以使用&lt;code&gt;--config-dir&lt;/code&gt;指定任何配置目录，但是你应该不会经常使用这些选项。&lt;/p&gt;
&lt;h2 id=&#34;别名&#34;&gt;别名&lt;/h2&gt;
&lt;p&gt;无&lt;/p&gt;
&lt;h2 id=&#34;变化&#34;&gt;变化&lt;/h2&gt;
&lt;p&gt;工作拷贝&lt;/p&gt;
&lt;h2 id=&#34;是否访问版本库&#34;&gt;是否访问版本库&lt;/h2&gt;
&lt;p&gt;否&lt;/p&gt;
&lt;h2 id=&#34;选项&#34;&gt;选项&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--diff3-cmd CMD
--config-dir DIR
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;例子&#34;&gt;例子&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;svn cleanup&lt;/strong&gt;没有输出，没有太多的例子，如果你没有传递路径，会使用“&lt;code&gt;.&lt;/code&gt;”。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn cleanup

$ svn cleanup /path/to/working-copy
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>svn命令commit使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/281/</link>
      <pubDate>Fri, 16 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/281/</guid>
      <description>&lt;h2 id=&#34;名称&#34;&gt;名称&lt;/h2&gt;
&lt;p&gt;svn commit — 将修改从工作拷贝发送到版本库。&lt;/p&gt;
&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;svn commit [PATH...]
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;描述&#34;&gt;描述&lt;/h2&gt;
&lt;p&gt;将修改从工作拷贝发送到版本库。如果你没有使用&lt;code&gt;--file&lt;/code&gt;或&lt;code&gt;--message&lt;/code&gt;提供一个提交日志信息，&lt;strong&gt;svn&lt;/strong&gt;会启动你的编辑器来编写一个提交信息，见&lt;a href=&#34;http://svndoc.iusesvn.com/svnbook/1.1/svn-ch-7.html#svn-ch-7-sect-1.3.2&#34; title=&#34;config&#34;&gt;“config”一节&lt;/a&gt;的&lt;code&gt;editor-cmd&lt;/code&gt;小节。&lt;/p&gt;
&lt;h3 id=&#34;提示&#34;&gt;提示&lt;/h3&gt;
&lt;p&gt;如果你开始一个提交并且Subversion启动了你的编辑器来编辑提交信息，你仍可以退出而不会提交你的修改，如果你希望取消你的提交，只需要退出编辑器而不保存你的提交信息，Subversion会提示你是选择取消提交、空信息继续还是重新编辑信息。&lt;/p&gt;
&lt;h2 id=&#34;别名&#34;&gt;别名&lt;/h2&gt;
&lt;p&gt;ci（“check in”的缩写；不是“checkout”的缩写“co”。）&lt;/p&gt;
&lt;h2 id=&#34;变化&#34;&gt;变化&lt;/h2&gt;
&lt;p&gt;工作拷贝，版本库&lt;/p&gt;
&lt;h2 id=&#34;是否访问版本库&#34;&gt;是否访问版本库&lt;/h2&gt;
&lt;p&gt;是&lt;/p&gt;
&lt;h2 id=&#34;选项&#34;&gt;选项&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--non-recursive (-N)
--targets FILENAME
--force-log
--username USER
--password PASS
--no-auth-cache
--non-interactive
--encoding ENC
--config-dir DIR
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;例子&#34;&gt;例子&lt;/h2&gt;
&lt;p&gt;使用命令行提交一个包含日志信息的文件修改，当前目录（“&lt;code&gt;.&lt;/code&gt;”）是没有说明的目标路径：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn commit -m &amp;#34;added howto section.&amp;#34;
Sending        a
Transmitting file data .
Committed revision 3.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;提交一个修改到&lt;code&gt;foo.c&lt;/code&gt;（在命令行明确指明），并且&lt;code&gt;msg&lt;/code&gt;文件中保存了提交信息：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ svn commit -F msg foo.c
Sending        foo.c
Transmitting file data .
Committed revision 5.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果你希望使用在&lt;code&gt;--file&lt;/code&gt;选项中使用在版本控制之下的文件作为参数，你需要使用&lt;code&gt;--force-log&lt;/code&gt;选项：&lt;/p&gt;</description>
    </item>
    <item>
      <title>数学学科分类(MSC标准)</title>
      <link>https://dodoro.chouxiangpai.com/archives/286/</link>
      <pubDate>Fri, 16 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/286/</guid>
      <description>&lt;p&gt;MSC的顶级主题分类，但下面的几个分组并不是MSC分类的一部分，它们仅仅是为了能够更有条理地划分。&lt;/p&gt;
&lt;h2 id=&#34;一通用及基础&#34;&gt;&lt;strong&gt;一、通用及基础&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;00: 通用，包括趣味数学，数学哲学，数学建模等。 01: 数学史 and 数学家传记。 03: 数理逻辑和数学基础，包括模型论，可计算性理论，集合论，证明论，代数逻辑等。&lt;/p&gt;
&lt;h2 id=&#34;二代数及离散数学&#34;&gt;&lt;strong&gt;二、代数(及离散数学)&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;05: 组合数学 06: 序理论 08: 通用代数系统 11: 数论 12: 场论和多项式 13: 交换环和交换代数 14: 代数几何 15: 线性代数和多重线性代数；矩阵 16: 环论和结合代数 17: 非结合环和非结合代数 18: 范畴论; 同调代数 19: K-理论 20: 群论及推广 22: 拓扑群，李群和基于它们的分析&lt;/p&gt;
&lt;h2 id=&#34;三分析&#34;&gt;&lt;strong&gt;三、分析&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;26: 实变函数，包括导数和积分 28: 测度及其积分 30: 复变函数，包括复数中的近似值理论 31: 位势论 32: 多复变数和解析空间 33: 特殊函数 34: 常微分方程 35: 偏微分方程 37: 动力系统和遍历理论 39: 差分方程和泛函方程 40: 序列，级数, 发散级数 41: 近似值理论及其拓展 42: 调和分析，包括傅里叶分析，傅里叶变换，傅里叶级数，三角插值，和正交函数 43: 抽象调和分析 44: 积分变换，运算微积 45: 积分方程 46: 泛函分析，包括infinite-dimensional holomorphy，分布 (数学分析)中的积分变换 47: 算子理论 49: 变分法和最优控制；最优化(包括同源性整合理论)&lt;/p&gt;</description>
    </item>
    <item>
      <title>“画一个火柴人”史诗版发布iphone、ipad和win8版本</title>
      <link>https://dodoro.chouxiangpai.com/archives/263/</link>
      <pubDate>Fri, 02 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/263/</guid>
      <description>&lt;p&gt;激动人心的一款游戏：“画一个火柴人”(&lt;a href=&#34;http://blog.xamarin.com/2012/10/29/draw-a-stickman-epic-now-available-for-iphone-ipad-and-windows-8-2/&#34; title=&#34;Permalink to Draw A Stickman EPIC now available for iPhone, iPad and Windows 8&#34;&gt;Draw A Stickman EPIC&lt;/a&gt;) 游戏已经发布ios(ipad、iphone)和windows8的产品，去年他们发布网页版的时候，24小时获得了100w用户。在app产品里，开发团队融入了更多的场景，并且让玩家能大量地发挥自己的想象力。令人惊喜的是，这款游戏完全采用Mono来开发，主要基于MonoGame来开发，代码共享达到95%。他们的android版本也会在最近推出。&lt;/p&gt;
&lt;p&gt;如果你很喜欢，可以他们的官网&lt;a href=&#34;http://www.drawastickman.com/&#34;&gt;http://www.drawastickman.com/&lt;/a&gt;体验这款富有想象力的游戏。&lt;/p&gt;
&lt;p&gt;更多信息可以查看：&lt;a href=&#34;http://blog.xamarin.com/2012/10/29/draw-a-stickman-epic-now-available-for-iphone-ipad-and-windows-8-2/&#34;&gt;http://blog.xamarin.com/2012/10/29/draw-a-stickman-epic-now-available-for-iphone-ipad-and-windows-8-2/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Facebook：“把宝压在HTML5上是一个错误”—技术原因及其反响</title>
      <link>https://dodoro.chouxiangpai.com/archives/269/</link>
      <pubDate>Fri, 02 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/269/</guid>
      <description>&lt;p&gt;Facebook决定不再使用这两三年所规划的HTML5，回到原生应用的道路上。本文讲述了FB转变背后的技术细节，以及Xamarin和Mozilla对这一转变的反应。&lt;/p&gt;
&lt;p&gt;Facebook的CEO 马克·扎克伯格最近在TechCrunch的一次&lt;a href=&#34;http://techcrunch.com/2012/09/11/mark-zuckerberg-our-biggest-mistake-with-mobile-was-betting-too-much-on-html5/&#34;&gt;采访&lt;/a&gt;中宣称：“作为一个公司，我们最大的错误是在HTML5上下注太多了，我们没有选原生应用，因为HTML5没有达到我们的预期”，而且，“自从发布了iOS应用后，我们发现人们订阅feed的数量增加了一倍。”&lt;/p&gt;
&lt;p&gt;扎克伯格没有谈及他们在使用HTML5时遇到的问题，但他认为这些产品的质量不够好：“外界已经有非常好的移动体验了……我们追求最高品质，唯一的办法就是使用原生应用。”&lt;/p&gt;
&lt;p&gt;Tobie Langel是Facebook软件工程师和W3C咨询委员会代表，他在一篇帖子中详细描述了Facebook基于HTML5做移动网页时&lt;a href=&#34;http://lists.w3.org/Archives/Public/public-coremob/2012Sep/0021.html&#34;&gt;遇到的性能问题&lt;/a&gt;。Langel提到的第一个问题是缺少调试工具：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;移动浏览器缺少工具，从而很难深入进去，发现真正的问题是什么……我们遇到的最大的问题是内存相关的。对于给定内容大小，我们的应用很容易耗尽设备硬件能力，引起系统崩溃。不幸的是，我们很难理解到底是什么引起了这些问题。GPU缓存耗尽？达到资源限制？或是其他原因？很难说。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Langel希望知道堆栈、对象、GPU缓存的内存使用情况，以及GC（垃圾回收）周期、FPS和其他资源限制信息。&lt;/p&gt;
&lt;p&gt;Langel谈到的HTML5的另一问题是其页面滚动性能，大部分页面滚动通过JavaScript实现，因为“其他选择不够快”。他提道：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;不连贯的帧率，UI线程滞后（断断续续）。由于内容大小和图片数量导致的GPU缓存耗尽。&lt;/p&gt;
&lt;p&gt;在不同操作系统中，原生的滚动有着不同的体验。针对一种操作系统优化过的JS实现，在其他系统上的体验却很差（机器人学中的“神秘波谷”）。&lt;/p&gt;
&lt;p&gt;安卓设备上触摸事件相关的性能问题（延时，事件不足）使JS实现的页面滚动更加脆弱。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Langel提到的其他问题有：以“黑盒”出现的GPU、安卓系统中更好的触摸跟踪支持的需求、平滑动画以及更好的缓存。其中一些问题已经&lt;a href=&#34;http://www.w3.org/2012/09/12-webperf-minutes.html&#34;&gt;提交给W3C Web性能工作组&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;Nat Friedman&lt;a href=&#34;http://www.xamarin.com/&#34;&gt;是Xamarin&lt;/a&gt;的CEO，Xamarin是构建跨平台本机应用的工具提供商。在一次InfoQ评论中，他表示欢迎Facebook的改变：“对包括设备提供商，应用发布商以及最重要的消费者在内的整个移动生态系统而言，这一支持原生体验的转变是非常重要的事件”。他还指出，移动标准现在还为时尚早：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;移动创新仍在飞速发展，远超“标准”方式能达到的速度。历史上，当新的操作系统出现时，它的能力非常新，使用它们的唯一方式就是在操作系统层次使用。这一阶段，最好的应用和最具突破性的创新都在靠近操作系统层面出现。对于当前移动设备平台，这种状态非常准确。市场份额的竞赛驱动了设备操作系统层面上巨大的变革和创新。在接下来的几年里，这些操作系统将会稳定下来，这一层次的创新将会变缓，使得标准化方式更加可行。但这种转变需要几年时间。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mozilla（Mozilla是致力于Web技术的组织）的CTO Brendan Eich在ZDNet对Brendan Eich的采访中，他&lt;a href=&#34;http://www.zdnet.com/mozilla-on-html5-heres-what-zuckerberg-really-meant-to-say-7000004146/&#34;&gt;对Facebook在HTML5上的失败表达了不同的看法&lt;/a&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你品一品言外之意，他（马克·扎克伯格）说的应该是将原生应用和HTML糅合起来。当这样糅合时，两个系统间总会有差距。Joe Hewitt是我的一个朋友，他曾在Facebook工作，做了第一个糅合应用，将两者很好地集成起来。但他离开了Facebook，后续版本中，将两者无缝集成的技能（可能还有苹果公司的一些支持）不见了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Eich坚信Web将最终胜出：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我从不相信Web会失败。这只是个语用学的问题，而你却被这些给绕进去了。像Facebook这样的公司搞得起开发原生应用，尤其是iOS上的原生应用。但根据长尾理论，开发者将主要集中于开发Web应用，并且以此为乐。&lt;/p&gt;
&lt;p&gt;如果Web发展到提供缺失的API，并具有更好的性能，开发者就没必要开发其他应用了。&lt;/p&gt;
&lt;p&gt;我有一种感觉，Web将变得非常好（十年之后），那时将不会有现今这样地在原生应用对Web应用之间无休止的论战了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Matt Asay是The Register的编辑，他在“&lt;a href=&#34;http://www.theregister.co.uk/2012/09/14/facebook_html_5_vs_native_apps/&#34;&gt;本机应用vs.HTML5应用的争论&lt;/a&gt;”中，引用了一位匿名Facebook工程经理的话说：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;现在，Fackbook通过写原生代码是行动最快的。这并不是说HTML5将一直无法达到宣称的效果，而是在当前情况下，摩尔定律和Web引擎仍然有效。因此我们做了一个务实的决定。最终，如果HTML5使得我们发展更快，你将看到我们会回归到HTML5。我们将使用任何让我们高效高质量工作的技术栈。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;马克·扎克伯格也看好HTML5的长远前景：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;并不是说HTML5不好。长期来看，事实上HTML5真的让我非常兴奋。有趣的是，实际上每天使用移动Web Facebook的人比使用iOS应用或Android应用加起来的更多。因此移动Web对我们来说非常重要。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Facebook八月份发布了iOS本机应用，他们正在开发Android上的类似应用，应该很快会在Google Play应用商店上架。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;查看英文原文：&lt;/strong&gt;&lt;a href=&#34;http://www.infoq.com/news/2012/09/Facebook-HTML5-Native&#34;&gt;Facebook: “Betting on HTML5 Was a Mistake” – Technical Reasons and Reactions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;via:&lt;a href=&#34;http://www.infoq.com/cn/news/2012/10/Facebook-HTML5-Native&#34;&gt;http://www.infoq.com/cn/news/2012/10/Facebook-HTML5-Native&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Wally McClure谈MonoTouch与Mono for Android的未来</title>
      <link>https://dodoro.chouxiangpai.com/archives/266/</link>
      <pubDate>Fri, 02 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/266/</guid>
      <description>&lt;p&gt;Wallace B. McClure是《&lt;a href=&#34;http://www.amazon.com/Professional-iPhone-Programming-MonoTouch-Programmer/dp/047063782X&#34;&gt;Professional iPhone Programming with MonoTouch and .NET/C#&lt;/a&gt;》以及即将出版的《&lt;a href=&#34;http://www.amazon.com/Professional-Android-Programming-Mono-NET/dp/1118026438/&#34;&gt;Professional Android Programming with Mono for Android and .NET/C#&lt;/a&gt;》一书的合作者。我们刚好在Xamarin将从Attachmate手上接管Mono这一消息公开前后进行这次采访的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;InfoQ: 现在距Miguel宣布Attachment裁员及创建Xamarin已经过去两个月了。您对这个情况有什么看法吗？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;第一个问题是在7月16号提出的，两天后Miguel宣布创建Xamarin以及与Novell合作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wally McClure:&lt;/strong&gt; 作为一个面向移动设备的.NET开发者，我有几个必须关注的问题。其中最大的问题就是：“我该如何针对移动平台进行开发才可以赚最多的钱？”对我来说，这相当于“我该如何开发iPhone和Android应用程序？”许多人跟我提起过iPhone开发，有时候也会谈到Android。那么作为一个.NET开发者，我该如何简单快速地针对这些平台进行开发？我可以去开发一个HTML 5应用程序，但是Web程序并不能利用设备的所有功能，客户也会要求原生应用而非Web应用程序。HTML 5应用会有一席之地，但是它们无法解决所有客户的所有问题。&lt;/p&gt;
&lt;p&gt;作为一个.NET开发者，如果想要开发原生应用，则可以选择学习Objective C和Java。学习语言需要一些时间，还包括开发环境等等。开发人员可能会认为学习语言没什么难度，但就我的感觉来说，事实并非如此，我没法使用一个周末的几个小时来学会一门语言。当然我也可以使用其他一些产品，例如把HTML应用程序作为原生应用的基础。然而，我还是时常会关注跨平台与原生应用之间的比较，所以我还在寻找其他方式。&lt;/p&gt;
&lt;p&gt;我比大部分人知道更多东西，因为我除了是一个开发人员，也会关注许多金融方面的消息。在2009年末至2010年初的时候，我听说了Novell的事情，他们正通过CNBC寻找买家。对我来说，这意味着可能会有些麻烦了。此外我还听说了Novell业务部门之间的一些摩擦，其中也包括Novell的裁员以及Xamarin建立的事情。我的看法是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;市场并没有拒绝MonoTouch。我和许多付费用户交谈过，有些暂停使用MonoTouch/iPhone，不过并非所有人都拒绝MonoTouch，有些人继续在iPhone和MonoTouch上投入。&lt;/li&gt;
&lt;li&gt;已有的MonoTouch产品也不会就此无法使用了。我还是可以创建在iPhone和iPad上运行的程序，一切正常，而他们也认为可以在3个月内构建一个产品。他们是六月份动手的，所以九月份可以完成，这也差不多是下个版本iOS发布的时候。&lt;/li&gt;
&lt;li&gt;MonoTouch本身有一些风险。例如，Xamarin和他们的iPhone .NET产品可能会有一些版权纠纷。这是事实。我和一些比我更具有法律背景的人交谈过，他们提出的问题是：
&lt;ul&gt;
&lt;li&gt;Xamrin可能会面临这些风险。Miguel de Icaza已经对此发表过申明，表示这方面已经没有什么问题了。&lt;/li&gt;
&lt;li&gt;部分API是基于iOS及Andorid的API而定义的。不过这方面出现版权纠纷的可能性不大。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;在Novell公布裁员消息之后的两个星期我重新尝试了Objective-C和Java开发，最后得到了与我2009年相同的结果。Objective-C与我内心所想相差甚远，对于.NET开发者来说会是十分陡峭的学习曲线。想要获益的唯一办法便是投入大量时间。对于我们这种已经在其他领域投入许多的人来说，这个门槛实在有些高。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在仔细审视了这些问题之后，我发现MonoTouch和Mono for Android依然有着十分重要的意义，这与两年前的状况一致。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;InfoQ: 我们开始采访的不久，Attachmate就宣布向Xamarin提供有关“Mono，MonoTouch，Mono for Android以及Mono Tools for Visual Studio”的永久授权。现在法律问题已经解决了，你觉得采纳iPhone和Andorid上的Mono还有哪些障碍呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wally McClure:&lt;/strong&gt; 这真是美妙的一周。一周前，我醒来后看到一堆指向 &lt;a href=&#34;http://ios.xamarin.com/&#34;&gt;http://ios.xamarin.com/&lt;/a&gt; 的内容，我发现Xamarin获得了这些工具永久的知识产权。这周末我又参加了Monospace会议，整整两天，我了解了许多关于Xamarin的消息，也和其他参与者进行了交流。上周我和一个潜在客户进行了沟通，他们是财富500强公司，对MonoTouch很感兴趣，已经投入iOS平台，并使用.NET开发他们自定义的业务应用产品。不过现实情况是，目前有些公司依然有顾虑。我想关于Attachmate的法律问题已经解决了，我估计接下来还会和其他一些公司达成协议，这会更进一步减少法律风险，我想接下来几个星期应该会有相关消息。从法律角度来说，我觉得已经没什么问题了。除了一些目前还无法得知的风险，我已经找不到暂缓使用MonoTouch和Mono for Android的理由。就我个人来说，过去的六个星期可谓是马力全开，我也会继续保持下去的。&lt;/p&gt;
&lt;p&gt;我还听说过一个问题，是说“MonoTouch和Mono for Android有bug，所以不该使用”。其实每个软件都有各种各样的bug，Android和iOS也都在持续更新，有问题都会即时修复。Xamarin的计划是定期更新他们的软件，就像过去24个月那样。当发现bug的时候，我们会在trunk上修复它，并打包在下次升级的版本中。之前的更新一直很有规律，我想这应该也会保持下去。发布频率大约是2到3个星期一次，所以你无需等好几个月才能获得新版本，而可以很快地更新，很快地更新项目。最终用户都不愿等待，我们都明白这一点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;InfoQ: 有没有哪方面你觉得是MonoTouch和Mono for Android做得尤其出色的呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wally McClure:&lt;/strong&gt; 理论上说，它们是向六百万.NET开发者开放了两个最流行的移动平台。对我来说，作为一个.NET程序员，在2009年早些时候还在考虑如何进行iPhone开发，那时候MonoTouch的出现真可谓神来之笔。我还是需要学习特定平台的内容，但我完全不需要学习新的语言，就好比Objective-C。这对我来说至关重要，在学习iPhone理念的同时还要学习Objective-C真可谓是难以逾越的高山。虽然我还是需要使用Mac，我必须使用MonoDevelop进行开发，但这笔投资还是相当值得的。我可以使用HttpWebRequest来调用服务获取内容，再使用LINQ处理数据，在许多地方都可以使用这些代码，这实在是太棒了。&lt;/p&gt;
&lt;p&gt;从技术角度来说，我会关注基础方面的内容。我每天早上都会在iPad上使用一款新闻工具，它时不时就会崩溃一下，我猜这是因为指针计算或是内存使用方面的问题。有了垃圾收集器之后，我们就可以减少内存使用的麻烦，也无需担心指针问题了。&lt;/p&gt;
&lt;p&gt;我认为它们还有一个重要的优势，它们是在运行平台上进行“真正针对性的开发”。简单的说，它们只是为底层操作系统提供了一个C#调用层，最终执行的还是平台上的原生API，只不过使用C#而已。这对开发人员来说十分关键。尽管我会推荐有关MonoTouch和Mono for Android开发的书籍，但我们完全可以通过一本使用Java的Android的书籍来学习Mono for Android。它们并没有为用户界面控件提供什么通用的容器，而是完全直接使用平台上完全相同的那些控件。MonoTouch应用程序和Objective-C应用程序完全相同，Mono for Android应用程序看上去也和Java程序毫无二致。这对用户来也是个优势。&lt;/p&gt;</description>
    </item>
    <item>
      <title>推荐一个javascript类库:jsonpath</title>
      <link>https://dodoro.chouxiangpai.com/archives/254/</link>
      <pubDate>Mon, 29 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/254/</guid>
      <description>&lt;p&gt;在我们的研发过程中，有时会遇到这样的情况：程序很简单，数据是固定的，不想使用服务端语言(php、java、.net)，但是要实现一些分页和检索功能。这种情况下我们应该选择javascript+xml+div就ok，不过javascript解析xml的数据比较慢。json是现在非常流行的一种数据格式，所以有另外一种解决方案：javascript+json+div。&lt;/p&gt;
&lt;p&gt;json是目前web的通用数据格式，在轻量级的web服务中占据主导地位，这里推荐一个非常轻巧的类库：jsonpath(下载地址：&lt;a href=&#34;http://code.google.com/p/jsonpath/&#34;&gt;http://code.google.com/p/jsonpath/&lt;/a&gt;)。作为一个轻量级类库，你可以使用它来对json数据进行精确查找、条件查找和模糊查找，这样就能满足简单网站的功能了。下面是一个简单例子： &lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt; JSONPath - Example (js)&lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt;    var json =                   { &amp;ldquo;store&amp;rdquo;: {                         &amp;ldquo;book&amp;rdquo;: [                           { &amp;ldquo;category&amp;rdquo;: &amp;ldquo;reference&amp;rdquo;,                                 &amp;ldquo;author&amp;rdquo;: &amp;ldquo;Nigel Rees&amp;rdquo;,                                 &amp;ldquo;title&amp;rdquo;: &amp;ldquo;Sayings of the Century&amp;rdquo;,                                 &amp;ldquo;price&amp;rdquo;: 8.95                           },                           { &amp;ldquo;category&amp;rdquo;: &amp;ldquo;fiction&amp;rdquo;,                                 &amp;ldquo;author&amp;rdquo;: &amp;ldquo;Evelyn Waugh&amp;rdquo;,                                 &amp;ldquo;title&amp;rdquo;: &amp;ldquo;Sword of Honour&amp;rdquo;,                                 &amp;ldquo;price&amp;rdquo;: 12.99                           },                           { &amp;ldquo;category&amp;rdquo;: &amp;ldquo;fiction&amp;rdquo;,                                 &amp;ldquo;author&amp;rdquo;: &amp;ldquo;Herman Melville&amp;rdquo;,                                 &amp;ldquo;title&amp;rdquo;: &amp;ldquo;Moby Dick&amp;rdquo;,                                 &amp;ldquo;isbn&amp;rdquo;: &amp;ldquo;0-553-21311-3&amp;rdquo;,                                 &amp;ldquo;price&amp;rdquo;: 8.99                           },                           { &amp;ldquo;category&amp;rdquo;: &amp;ldquo;fiction&amp;rdquo;,                                 &amp;ldquo;author&amp;rdquo;: &amp;ldquo;J. R. R. Tolkien&amp;rdquo;,                                 &amp;ldquo;title&amp;rdquo;: &amp;ldquo;The Lord of the Rings&amp;rdquo;,                                 &amp;ldquo;isbn&amp;rdquo;: &amp;ldquo;0-395-19395-8&amp;rdquo;,                                 &amp;ldquo;price&amp;rdquo;: 22.99                           }                         ],                         &amp;ldquo;bicycle&amp;rdquo;: {                           &amp;ldquo;color&amp;rdquo;: &amp;ldquo;red&amp;rdquo;,                           &amp;ldquo;price&amp;rdquo;: 19.95                         }                   }                 },        var test1 = jsonPath(json, &amp;ldquo;$.store.book[*].author&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;gt;&amp;rdquo;;//精确检索        var test2 = jsonPath(json, &amp;ldquo;$..author&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;rdquo;;        var test3 = jsonPath(json, &amp;ldquo;$.store.*&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;rdquo;;        var test4 = jsonPath(json, &amp;ldquo;$.store..price&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;rdquo;;        var test5 = jsonPath(json, &amp;ldquo;$..book[(@.length-1)]&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;rdquo;;        var test6 = jsonPath(json, &amp;ldquo;$..book[-1:]&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;rdquo;;        var test7 = jsonPath(json, &amp;ldquo;$..book[0,1]&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;rdquo;;        var test8 = jsonPath(json, &amp;ldquo;$..book[:2]&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;rdquo;;        var test9 = jsonPath(json, &amp;ldquo;$..book[?(@.isbn)]&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;rdquo;;        var test10 = jsonPath(json, &amp;ldquo;$..book[?(@.price&amp;lt;10)]&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;rdquo;;//条件建设        var test11 = jsonPath(json, &amp;ldquo;$..*&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;rdquo;;//所有        var test12 = jsonPath(json, &amp;ldquo;$..book[?(@.title.indexOf(&amp;rsquo;the&amp;rsquo;) &amp;gt; -1)]&amp;rdquo;).toJSONString() + &amp;ldquo;\n&amp;rdquo;;  &lt;!-- raw HTML omitted --&gt;//模糊检索 &lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>从windows8开始，我们一起支持正版吧：申请98元促销代码的方法</title>
      <link>https://dodoro.chouxiangpai.com/archives/215/</link>
      <pubDate>Fri, 26 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/215/</guid>
      <description>&lt;p&gt;我承认，大学一直在使用windows的盗版操作系统，毕业后公司购买的电脑内置正版操作系统，而家里的那天老电脑一直是老的xp系统。打算明年买一台属于自己的笔记本，所以决定购买windows8的正版操作系统。&lt;/p&gt;
&lt;p&gt;为保证成功率，大家可以按我下图方法试一下，还有，我第二次申请是转用了IE9申请的，可能IE申请更好些吧。我申请成功之后马上打开邮箱就收到微软的来信了，真是这次不得不支持一下正版了，忘了最后说明一下，我申请所使用的操作系统是win7旗舰版(软件激活那种）因为我试过用ipad申请是不能的。&lt;/p&gt;
&lt;p&gt;放上申请地址。&lt;a href=&#34;http://windowsupgradeoffer.com/zh-CN&#34;&gt;http://windowsupgradeoffer.com/zh-CN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果你已经毕业参加工作，并且有自己的个人电脑，建议支持正版吧。&lt;/p&gt;
&lt;p&gt; &lt;a href=&#34;images/2.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/215/images/2-300x178.jpg&#34; title=&#34;2&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>数学英雄：欧拉</title>
      <link>https://dodoro.chouxiangpai.com/archives/223/</link>
      <pubDate>Fri, 26 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/223/</guid>
      <description>&lt;p&gt;一、简介&lt;/p&gt;
&lt;p&gt;莱昂哈德·保罗·欧拉（Leonhard Paul Euler，1707年4月15日－1783年9月18日）是一位瑞士数学家和物理学家，近代数学先驱之一，他一生大部分时间在俄罗斯帝国和普鲁士度过。欧拉在数学的多个领域，包括微积分和图论都做出过重大发现。他引进的许多数学术语和书写格式，例如函数的记法&amp;quot;f(x)&amp;quot;，一直沿用至今。此外，他还在力学、光学和天文学等学科有突出的贡献。欧拉是18世纪杰出的数学家，同时也是有史以来最伟大的数学家之一。他也是一位多产作者，其文学著作约有60-80册。法国数学家皮埃尔-西蒙·拉普拉斯曾这样评价欧拉对于数学的贡献：“读欧拉的著作吧，在任何意义上，他都是我们的大师”&lt;a href=&#34;images/3.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/223/images/3-257x300.jpg&#34; title=&#34;3&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;二、生平&lt;/p&gt;
&lt;p&gt;1、早年&lt;/p&gt;
&lt;p&gt;欧拉出生于瑞士巴塞尔(Basel)的一个牧师家庭，父亲保罗·欧拉（Paul Euler）是基督教加尔文宗的牧师，保罗·欧拉早年在巴塞尔大学学习神学，后娶了一位牧师的女儿玛格丽特·布鲁克（Marguerite Brucker），也就是欧拉的母亲。欧拉是他们6个孩子中的长子。在欧拉出生后不久，他们全家就从巴塞尔搬迁至郊外的里恩（Riehen）,在那里欧拉度过了他童年的大部分时光。&lt;/p&gt;
&lt;p&gt;欧拉最早是从他的父亲那里接触到一些数学，后来欧拉搬回巴塞尔和他的外祖母住在一起，并在那里开始了他的正式学业，在中学时期，由于欧拉所在的学校并不教授数学，他便私下里从一位大学生那里学习。&lt;/p&gt;
&lt;p&gt;欧拉13岁时进入了巴塞尔大学，主修哲学和法律，但在每周星期六下午便跟当时欧洲最优秀的数学家约翰·伯努利（Johann Bernoulli）学习数学 。欧拉于1723年取得了他的哲学硕士学位，学位论文的内容是笛卡尔哲学和牛顿哲学的比较研究。之后，欧拉遵从了他父亲的意愿进入了神学系，学习神学，希腊语和希伯来语（欧拉的父亲希望欧拉成为一名牧师），但最终约翰·伯努利说服欧拉的父亲允许欧拉学习数学，并使他相信欧拉注定能成为一位伟大的数学家。1726年，欧拉完成了他的博士学位论文De Sono，内容是研究声音的传播。1727年，欧拉参加了法国科学院主办的有奖征文竞赛，当年的问题是找出船上的桅杆的最优放置方法。结果他得了二等奖，一等奖为被誉为“舰船建造学之父”的皮埃尔·布格（Pierre Bouguer）所获得，不过欧拉随后在他一生中一共12次赢得该奖。&lt;/p&gt;
&lt;p&gt;2、在圣彼得堡&lt;/p&gt;
&lt;p&gt;这一时期，约翰·伯努利的两个儿子——丹尼尔·伯努利（Daniel Bernoulli）和尼古拉·伯努利（Nicolas Bernoulli）——在位于俄国圣彼得堡的俄国皇家科学院工作，在尼古拉因阑尾炎于1726年7月去世后（此时距他来到俄国仅一年），丹尼尔便接替了他在数学/物理学所的职位，同时推荐欧拉来接替他自己在生理学所空出的职位。欧拉于1726年11月欣然接受了邀请，但并没有立即动身前往圣彼得堡，而是先申请巴塞尔大学的物理学教授，不过没有成功。&lt;/p&gt;
&lt;p&gt;前苏联于1957年发行的邮票，纪念欧拉诞辰250周年。文字内容为：欧拉，伟大的数学家和学者，诞辰250周年。&lt;/p&gt;
&lt;p&gt;欧拉于1727年5月17日抵达圣彼得堡，在丹尼尔等人的请求下，科学院将欧拉指派到数学/物理学所工作，而不是起初的生理学所。欧拉与丹尼尔保持着密切的合作关系，并且与丹尼尔住在一起。在1727年至1730年间，欧拉还担任了俄国海军医官的职务。&lt;/p&gt;
&lt;p&gt;俄国皇家科学院由彼得大帝于1724年创建，在彼得大帝和他的继任者凯瑟琳女皇主政时期，科学院是一个对外国学者具有吸引力的地方。科学院有充足的资金来源和一个规模庞大的综合图书馆，并且只招收非常少的学生，以减轻教授们的教学负担。科学院还非常重视研究，给予教授们充分的时间及自由，让他们探究科学问题。&lt;/p&gt;
&lt;p&gt;凯瑟琳女皇，同时也是科学院的资助者，于欧拉到达圣彼得堡的当天去世。其后彼得二世继位，彼得二世是个软弱的君主，实际权力由俄国贵族掌握。贵族们对科学院的外国科学家心存戒心，于是他们切断了对欧拉及其同事们的财政资助，并且在其它方面找他们的麻烦。&lt;/p&gt;
&lt;p&gt;情况在彼得二世去世（1730年）后有所好转，欧拉在科学院迅速得到提升，并于1731年获得物理学教授的职位。两年后，由于受不了在圣彼得堡受到的种种审查和敌视，丹尼尔·伯努利返回了巴塞尔，欧拉于是接替丹尼尔成为数学所所长[10] 。1735年，欧拉还在科学院地理所担任职务，协助编制俄国第一张全境地图。&lt;/p&gt;
&lt;p&gt;1734年1月7日，欧拉迎娶了科学院附属中学的美术教师，瑞士人乔治·葛塞尔（Georg Gsell）的女儿，柯黛琳娜·葛塞尔（Katharina Gsell，1707-1773），两人共育有13个子女，其中仅有5个活到成年。&lt;/p&gt;
&lt;p&gt;3、视力恶化&lt;/p&gt;
&lt;p&gt;在欧拉的数学生涯中，他的视力一直在恶化。在1735年一次几乎致命的发热后的三年，他的右眼近乎失明，但他把这归咎于他为圣彼得堡科学院进行的辛苦的地图学工作。视力在他在德国期间也持续恶化，以至于弗雷德里克把他誉为“独眼巨人”。欧拉的原本正常的左眼后来又遭受了白内障的困扰。在他于1766年被查出有白内障的几个星期后，导致了他的近乎完全失明。即便如此，病痛似乎并未影响到欧拉的学术生产力，这大概归因于他的心算能力和超群的记忆力。比如，欧拉可以从头到尾不犹豫地背诵维吉尔的史诗《埃涅阿斯纪》，并能指出他所背诵的那个版本的每一页的第一行和最后一行是什么。在书记员的帮助下，欧拉在多个领域的研究其实变得更加高产了。在1775年，他平均每周就完成一篇数学论文。&lt;/p&gt;
&lt;p&gt;4、其他&lt;/p&gt;
&lt;p&gt;欧拉年轻时曾研读神学，他一生虔诚、笃信上帝，并不能容许任何诋毁上帝的言论在他面前发表。有一个广泛流传的传说说到，欧拉在叶卡捷琳娜二世的宫廷里，挑战当时造访宫廷的无神论者德尼·狄德罗：“先生，&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/223/images/4.png&#34; title=&#34;4&#34;&gt;，所以上帝存在，请回答！”不懂数学的德尼完全不知怎么应对，只好投降。但是由于狄德罗事实上也是一位有作为的数学家，这个传说有可能属于虚构。&lt;/p&gt;
&lt;p&gt;欧拉是史上发表论文数第二多的数学家，全集共计75卷；他的纪录一直到了20世纪才被保羅·埃尔德什打破。他发表的论文达1475篇，著作有32部。产量之多，无人能及。欧拉实际上支配了18世纪至现在的数学；对于当时新发明的微积分，他推导出了很多结果。很多数学的分枝，也是由欧拉所创或因而有大大的进展。&lt;/p&gt;
&lt;p&gt;在1765年至1771年据说是因欧拉双眼直接观察太阳，双眼先后失明。尽管人生最后7年，欧拉的双目完全失明，他还是以惊人的速度产出了生平一半的著作。&lt;/p&gt;
&lt;p&gt;1783年9月18日，晚餐后，欧拉一边喝着茶，一边和小孙女玩耍，突然之间，烟斗从他手中掉了下来。他说了一声：“我的烟斗”，并弯腰去捡，结果再也没有站起来，他抱着头说了一句：“我死了”。“欧拉停止了生命和计算”。后面这句经常被数学史家引用的话，出自法国哲学家兼数学家孔多塞之口：“&amp;hellip;il cessa de calculer et de vivre”（he ceased to calculate and to live）。&lt;/p&gt;
&lt;p&gt;三、成就&lt;/p&gt;
&lt;p&gt;欧拉的数学符号引进和推广，并通过他的许多教科书广为流传。最值得注意的是，他介绍了一个运行概念是先写函数F（x）表示函数f参数x的应用他还介绍了三角函数现代符号，为自然对数的底（现在也称为欧拉数已知），对求和希腊字母Σ和字母i字母E来表示虚数单位。(该使用希腊字母π来表示一个圆的周长和直径之比也由欧拉普及，但它并不是由他发明。)&lt;/p&gt;
&lt;p&gt;欧拉和丹尼尔·伯努利一起，建立了弹性体的力矩定律：作用在弹性细长杆上的力矩正比于物质的弹性和通过质心轴和垂直于两者的截面的转动惯量。 他还直接从牛顿运动定律出发，建立了流体力学里的欧拉方程。这些方程组在形式上等价于粘度为0的纳维-斯托克斯方程。人们对这些方程的主要兴趣在于它们能被用来研究冲击波。&lt;/p&gt;
&lt;p&gt;他对微分方程理论作出了重要贡献。他还是欧拉近似法的创始人，这些计算法被用于计算力学中。此中最有名的被称为欧拉方法。 在数论里他引入了欧拉函数。自然数的欧拉函数被定义为小于并且与互质的自然数的个数。在计算机领域中广泛使用的RSA公钥密码算法也正是以欧拉函数为基础的。&lt;/p&gt;
&lt;p&gt;在分析领域，是欧拉综合了莱布尼兹的微分与牛顿的流数。他在1735年由于解决了长期悬而未决的贝塞尔问题而获得名声：&lt;a href=&#34;images/11.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/223/images/11.jpg&#34; title=&#34;1&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;其中&lt;a href=&#34;images/lm.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/223/images/lm.png&#34; title=&#34;lm&#34;&gt;&lt;/a&gt;是黎曼函数。&lt;/p&gt;
&lt;p&gt;欧拉将虚数的幂定义为如下公式 &lt;a href=&#34;images/21.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/223/images/21.jpg&#34; title=&#34;2&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这就是欧拉公式，它成为指数函数的中心。在初等分析中，从本质上来说，要么是指数函数的变种，要么是多项式，两者必居其一。被理查德·费曼称为“最卓越的数学公式”的则是欧拉公式的一个简单推论（通常被称为欧拉恒等式）： &lt;a href=&#34;images/31.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/223/images/31.jpg&#34; title=&#34;3&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;他在1735年定义了微分方程中的欧拉-马歇罗尼常数，也是欧拉-马歇罗尼公式的发现者之一，这一公式在计算难于计算的积分、求和与级数的时候极为有效： &lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/223/images/4.jpg&#34; title=&#34;4&#34;&gt;&lt;/p&gt;
&lt;p&gt;欧拉还发现了公式的V型é f键= 2的数量与顶点，边和面的凸多面体，因此，对一个平面图形。此公式中的常数是现在被称为欧拉示性数的图形（或其他数学对象），是有关属的对象。研究和推广这一公式，特别是通过柯西和欧莱雅Huillier，是在原点的拓扑结构。&lt;/p&gt;
&lt;p&gt;欧拉在1736年解决了柯尼斯堡七桥问题，并且发表了论文《关于位置几何问题的解法》（Solutio problematis ad geometriam situs pertinentis），对一笔画问题进行了阐述，是最早运用图论和拓扑学的典范。&lt;/p&gt;
&lt;p&gt;在1739年，欧拉写下了《音乐新理论的尝试（Tentamen novae theoriae musicae）》，书中试图把数学和音乐结合起来。一位传记作家写道：这是一部“为精通数学的音乐家和精通音乐的数学家而写的”著作。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数学王子：高斯</title>
      <link>https://dodoro.chouxiangpai.com/archives/195/</link>
      <pubDate>Thu, 25 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/195/</guid>
      <description>&lt;p&gt;一、引言&lt;/p&gt;
&lt;p&gt;高斯无疑是迄今为止最伟大的数学家，同时他也是我最喜欢和最崇拜的数学家，作为数学史上最有才华的数学家之一，并且他把自己的才华最大限度应用到数学上，产生大量的数学研究成果，在数论方面更是拥有超凡的天赋、悟性和创造力。&lt;/p&gt;
&lt;p&gt;二、简介&lt;/p&gt;
&lt;p&gt;高斯（Johann Carl Friedrich Gauss）（1777年4月30日－1855年2月23日），生于不伦瑞克，卒于哥廷根，德国著名数学家、物理学家、天文学家、大地测量学家。高斯被认为是最重要的数学家，并拥有数学王子的美誉。 1792年，15岁的高斯进入布伦瑞克（Braunschweig）学院。在那里，高斯开始对高等数学作研究。独立发现了二项式定理的一般形式、数论上的“二次互反律”（Law of Quadratic Reciprocity)、质数分布定理（prime numer theorem)及算术几何平均(arithmetic-geometric mean)。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/195/images/1.jpg&#34; title=&#34;1&#34;&gt;&lt;/p&gt;
&lt;p&gt;1795年高斯进入哥廷根大学。1796年，19岁的高斯得到了一个数学史上极重要的结果，就是《正十七边形尺规作图之理论与方法》。&lt;/p&gt;
&lt;p&gt;1855年2月23日清晨，高斯于睡梦中去世。&lt;/p&gt;
&lt;p&gt;三、生平&lt;/p&gt;
&lt;p&gt;卡尔·弗里德里希·高斯是一对普通夫妇的儿子。他的母亲是一个贫穷石匠的女儿，虽然十分聪明，但却没有接受过教育，近似于文盲。在成为高斯父亲的第二个妻子之前，她从事女佣工作。他的父亲曾做过园丁，工头，商人的助手和一个小保险公司的评估师。当高斯三岁时便能够纠正他父亲的借债账目的事情，已经成为一个轶事流传至今。他曾说，他在麦仙翁堆上学会计算。能够在头脑中进行复杂的计算，是上帝赐予他一生的天赋。&lt;/p&gt;
&lt;p&gt;高斯用很短的时间计算出了小学老师布置的任务：对自然数从1到100的求和。他所使用的方法是：对50对构造成和101的数列求和（1+100，2+99，3+98……），同时得到结果：5050。这一年，高斯9岁。父亲格尔恰尔德·迪德里赫对高斯要求极为严厉，甚至有些过份，常常喜欢凭自己的经验为年幼的高斯规划人生。高斯尊重他的父亲，并且秉承了其父诚实、谨慎的性格。&lt;/p&gt;
&lt;p&gt;在成长过程中，幼年的高斯主要得力于母亲和舅舅：高斯的母亲罗捷雅、舅舅弗利德里希（Friederich）。弗利德里希富有智慧，为人热情而又聪明能干投身于纺织贸易颇有成就。他发现姐姐的儿子聪明伶利，因此他就把一部分精力花在这位小天才身上，用生动活泼的方式开发高斯的智力。若干年后，已成年并成就显赫的高斯回想起舅舅为他所做的一切，深感对他成才之重要，他想到舅舅多产的思想，不无伤感地说，舅舅去世使&amp;quot;我们失去了一位天才&amp;quot;。正是由于弗利德里希慧眼识英才，经常劝导姐夫让孩子向学者方面发展，才使得高斯没有成为园丁或者泥瓦匠。&lt;/p&gt;
&lt;p&gt;在数学史上，很少有人象高斯一样很幸运地有一位鼎力支持他成才的母亲。罗捷雅直到34岁才出嫁，生下高斯时已有35岁了。她性格坚强、聪明贤慧、富有幽默感。高斯一生下来，就对一切现象和事物十分好奇，而且决心弄个水落石出，这已经超出了一个孩子能被许可的范围。当丈夫为此训斥孩子时，她总是支持高斯，坚决反对顽固的丈夫想把儿子变得跟他一样无知。&lt;/p&gt;
&lt;p&gt;罗捷雅真地希望儿子能干出一番伟大的事业，对高斯的才华极为珍视。然而，她也不敢轻易地让儿子投入当时尚不能养家糊口的数学研究中。在高斯19岁那年，尽管他已做出了许多伟大的数学成就，但她仍向数学界的朋友W.波尔约（W.Bolyai，非欧几何创立者之一J.波尔约之父）问道：高斯将来会有出息吗？W.波尔约说她的儿子将是&amp;quot;欧洲最伟大的数学家&amp;quot;，为此她激动得热泪盈眶。&lt;/p&gt;
&lt;p&gt;7岁那年，高斯第一次上学了。头两年没有什么特殊的事情。1787年高斯10岁，他进入了学习数学的班次，这是一个首次创办的班，孩子们在这之前都没有听说过算术这么一门课程。数学教师是布特纳，他对高斯的成长也起了一定作用。&lt;/p&gt;
&lt;p&gt;当然，这也是一个等差数列的求和问题。当布特纳刚一写完时，高斯也算完并把写有答案的小石板交了上去。E．T．贝尔写道，高斯晚年经常喜欢向人们谈论这件事，说当时只有他写的答案是正确的，而其他的孩子们都错了。高斯没有明确地讲过，他是用什么方法那么快就解决了这个问题。数学史家们倾向于认为，高斯当时已掌握了等差数列求和的方法。一位年仅10岁的孩子，能独立发现这一数学方法实属很不平常。贝尔根据高斯本人晚年的说法而叙述的史实，应该是比较可信的。而且，这更能反映高斯从小就注意把握更本质的数学方法这一特点。&lt;/p&gt;
&lt;p&gt;高斯的计算能力，更主要地是高斯独到的数学方法、非同一般的创造力，使布特纳对他刮目相看。他特意从汉堡买了最好的算术书送给高斯，说：“你已经超过了我，我没有什么东西可以教你了。”接着，高斯与布特纳的助手巴特尔斯建立了真诚的友谊，直到巴特尔斯逝世。他们一起学习，互相帮助，高斯由此开始了真正的数学研究。&lt;/p&gt;
&lt;p&gt;1788年，11岁的高斯进入了文科学校，他在新的学校里，所有的功课都极好，特别是古典文学、数学尤为突出。经过巴特尔斯等人的引荐，布伦兹维克公爵召见了14岁的高斯。这位朴实、聪明但家境贫寒的孩子赢得了公爵的同情，公爵慷慨地提出愿意作高斯的资助人，让他继续学习。布伦兹维克公爵在高斯的成才过程中起了举足轻重的作用。不仅如此，这种作用实际上反映了欧洲近代科学发展的一种模式，表明在科学研究社会化以前，私人的资助是科学发展的重要推动因素之一。高斯正处于私人资助科学研究与科学研究社会化的转变时期。&lt;/p&gt;
&lt;p&gt;1792年高斯进入布伦兹维克的卡罗琳学院继续学习。1795年，公爵又为他支付各种费用，送他入德国著名的哥丁根大学，这样就使得高斯得以按照自己的理想，勤奋地学习和开始进行创造性的研究。1799年，高斯完成了博士论文，回到家乡布伦兹维克，正当他为自己的前途、生计担忧而病倒时─虽然他的博士论文顺利通过了，已被授予博士学位，同时获得了讲师职位，但他没有能成功地吸引学生，因此只能回老家-又是公爵伸手救援他。公爵为高斯付诸了长篇博士论文的印刷费用，送给他一幢公寓，又为他印刷了《算术研究》，使该书得以在1801年问世；还负担了高斯的所有生活费用。所有这一切，令高斯十分感动。他在博士论文和《算术研究》中，写下了情真意切的献词：&amp;ldquo;献给大公&amp;rdquo;，&amp;ldquo;你的仁慈，将我从所有烦恼中解放出来，使我能从事这种独特的研究&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;1806年，公爵在抵抗拿破仑统帅的法军时不幸阵亡，这给高斯以沉重打击。他悲痛欲绝，长时间对法国人有一种深深的敌意。大公的去世给高斯带来了经济上的拮据，德国处于法军奴役下的不幸，以及第一个妻子的逝世，这一切使得高斯有些心灰意冷，但他是位刚强的汉子，从不向他人透露自己的窘况，也不让朋友安慰自己的不幸。人们只是在19世纪整理他的未公布于众的数学手稿时才得知他那时的心态。在一篇讨论椭圆函数的手搞中，突然插入了一段细微的铅笔字：&amp;ldquo;对我来说，死去也比这样的生活更好受些。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;为了不使德国失去最伟大的天才，德国著名学者洪堡（B.A.Von Humboldt）联合其他学者和政界人物，为高斯争取到了享有特权的哥丁根大学数学和天文学教授，以及哥丁根天文台台长的职位。1807年，高斯赴哥丁根就职，全家迁居于此。从这时起，除了一次到柏林去参加科学会议以外，他一直住在哥丁根。洪堡等人的努力，不仅使得高斯一家人有了舒适的生活环境，高斯本人可以充分发挥其天才，而且为哥丁根数学学派的创立、德国成为世界科学中心和数学中心创造了条件。同时，这也标志着科学研究社会化的一个良好开端。&lt;/p&gt;
&lt;p&gt;高斯的数学研究几乎遍及所有领域，在数论、代数学、非欧几何、复变函数和微分几何等方面都做出了开创性的贡献。他还把数学应用于天文学、大地测量学和磁学的研究，发明了最小二乘法原理。十分注重数学的应用，并且在对天文学、大地测量学和磁学的研究中也偏重于用数学方法进行研究。&lt;/p&gt;
&lt;p&gt;高斯开辟了许多新的数学领域，从最抽象的代数数论到内蕴几何学，都留下了他的足迹。从研究风格、方法乃至所取得的具体成就方面，他都是18─19世纪之交的中坚人物。如果我们把18世纪的数学家想象为一系列的高山峻岭，那么最后一个令人肃然起敬的巅峰就是高斯；如果把19世纪的数学家想象为一条条江河，那么其源头就是高斯。&lt;/p&gt;
&lt;p&gt;高斯于公元1805年10月5日与来自Braunschweig的Johanna Elisabeth Rosina Osthoff小姐（1780-1809）结婚。在公元1806年8月21日迎来了他生命中的第一个孩子约瑟。此后，他又有两个孩子。Wilhelmine（1809－1840）和Louis（1809－1810）。1807年高斯成为哥廷根大学的教授和当地天文台的台长。&lt;/p&gt;
&lt;p&gt;虽然高斯作为一个数学家而闻名于世，但这并不意味着他热爱教书。尽管如此，他越来越多的学生成为有影响的数学家，如后来闻名于世的Richard Dedekind和黎曼。&lt;/p&gt;
&lt;p&gt;高斯非常信教且保守。他的父亲死于1808年4月14日，晚些时候的1809年10月11日，他的第一位妻子Johanna也离开人世。次年8月4日高斯迎娶第二位妻子Friederica Wilhelmine （1788-1831）。他们又有三个孩子：Eugen （1811-1896）,Wilhelm （1813-1883） 和 Therese （1816-1864）。1831年9月12日她的第二位妻子也死去，1837年高斯开始学习俄语。1839年4月18日，他的母亲在哥廷根逝世，享年95岁。高斯于1855年2月23日凌晨1点在哥廷根去世。他的很多散布在给朋友的书信或笔记发现于1898年。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Mono相关文章汇总</title>
      <link>https://dodoro.chouxiangpai.com/archives/186/</link>
      <pubDate>Tue, 23 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/186/</guid>
      <description>&lt;p&gt;一则新闻&lt;a href=&#34;http://www.techweb.com.cn/finance/2012-07-25/1218544.shtml&#34;&gt;《软件服务提供商Xamarin融资1200万美元》&lt;/a&gt;，更详细的内容可以看Xamarin的官方博客&lt;a href=&#34;http://blog.xamarin.com/2012/07/24/xamarin-raises-12m-to-help-you-make-better-apps-faster/&#34;&gt;Xamarin raises $12M to help you make better apps faster →&lt;/a&gt;。这篇新闻里告诉了我们目前Mono的用户规模“使用Xamarin软件的应用开发者已经超过15万，其中付费用户约为7500名。在Xamarin的客户中，还包括一些知名的企业，如美国国家仪器（National Instruments）和数字音乐订阅服务商Rdio等”。一直关注和研究Mono项目，今天把平常自己写的和园子里同学写的Mono的相关文章整理了一下，发现从2011年开始已经有非常的多人开始在项目中使用Mono，这里列一下这么多年来的园子里的相关博客内容和大家分享：&lt;/p&gt;
&lt;p&gt;2006年，Mono最新版是1.1.13，社区出现了第一本&lt;a href=&#34;http://files.cnblogs.com/shanyou/Mono%20A%20Developers%20Notebook%20Developers%20Notebook%20Jul%202004.rar&#34;&gt;《Mono: A Developer’s Notebook》&lt;/a&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/icehyp/articles/501114.html&#34;&gt;什么是MONO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/likaincu/articles/405007.html&#34;&gt;什么是MONO再议&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/dflying/archive/2006/11/10/556379.html&#34;&gt;“另类”的.NET——Mono 1.2发布&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2006/03/05/343176.html&#34;&gt;.NET和JAVA的跨平台,我们很期望.但是容易吗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2006/03/10/347500.html&#34;&gt;Mono 开发 (使用.NET技术的你，绝对不能忽略Mono)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2007年，Mono最新版本&lt;a href=&#34;http://www.cnblogs.com/shanyou/news/2007/12/14/995443.html&#34;&gt;Mono 1.2.6&lt;/a&gt;，最新版本全面支持.NET 1.1,并部分与.NET 2.0兼容,包括支持Windows Forms。.net 现在赶上了java甚至在某些领域超越了java，而且.net借助于mono项目正在超越java的跨平台。微软在不断的走向开放，微软的codeplex已经上线，微软的asp.net ajax客户端框架，ironpython，ironruby，DLR等这些都是使用完全的开源协议，开始逐步纳入Mono的版本。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/cnlamar/archive/2007/03/04/663308.html&#34;&gt;倡议研究mono&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/babyblue/archive/2007/07/02/802444.html&#34;&gt;Mono的最合适的环境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2007/10/31/943770.html&#34;&gt;Mono项目的新进展&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/hjf1223/archive/2007/12/20/OpenSource_JAVA_DotNet.html&#34;&gt;我会为开源和自由学习,使用JAVA.但我决不会为了开源和自由放弃.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2007/12/20/1007854.html&#34;&gt;我也来说说.net开源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/jejwe/archive/2007/09/02/878846.html&#34;&gt;Mono 1.2.5 发布,提供对IronPython和DLR的支持&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2008年，Mono的最新版本Mono 2.0，MonnoDevelop终于发布了一个Release版本1.0，Mono 2.0包括ADO.NET 2.0/ASP.NET 2.0/Windows.Forms 2.0/System.XML 2.0/System.Drawing/Linq/GTK#等类库的实现。这个release比1.x更为完整和成熟了。其中，C#编译器对C# 3的支持已经完整；标准库方面，WinForms 2.0的API已经完整支持，LINQ和ASP.NET的支持也比之前更为完善；执行引擎开始共享泛型代码后占用内存量减少了，同时Mono开始涉足iPhone开发领域的尝试，这也为今天的Xamarin融资打下了基础。有意思的是国内也出现了第一个Linux下的ASP.NET的Web服务器 &lt;a href=&#34;http://www.linuxdot.net/&#34;&gt;http://www.linuxdot.net/&lt;/a&gt;，后面在具体介绍。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2008/03/16/1108043.html&#34;&gt;MonoDevelop 1.0 和 Mono 1.9(2.0 beta)发布了&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2008/10/07/1305465.html&#34;&gt;Mono 2.0正式发布了&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2008/03/11/monoiphone.html&#34;&gt;Mono运行于IPhone之上&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/flarejune/archive/2008/10/16/1312993.html&#34;&gt;利用Mono-cecil实现.NET程序的重新签名,重新链接相关库的引用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/dyj057/archive/2008/01/22/1048528.html&#34;&gt;在Linux上使用Mono连接MySQL数据库&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2009年，Mono最新版本Mono 2.6，MonnoDevelop发布了2.0，同时Moonlight 1.0也发布了，微软的asp.net mvc 1.0也开源了，可以在Mono上跑了，微软已经开源了不少项目：ASP.NET MVC ,NET Dynamic Language Runtime (DLR),IronRuby,IronPython,Silverlight Toolkit,Ajax Control Toolkit,Managed Extensibility Framework (MEF) ，都可以在Mono上跑了，Mono就可以快速的走向成熟。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]使用C#开发iOS、Android和Windows Phone跨平台应用</title>
      <link>https://dodoro.chouxiangpai.com/archives/182/</link>
      <pubDate>Tue, 23 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/182/</guid>
      <description>&lt;p&gt;  &lt;strong&gt;框架&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[![](images/mono-开发框架-300x226.jpg)](images/mono-开发框架.jpg)&lt;/p&gt;
&lt;p&gt;  &lt;strong&gt;工具&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[![](images/mono-工具-300x225.jpg)](images/mono-工具.jpg)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono 3.0正式发布</title>
      <link>https://dodoro.chouxiangpai.com/archives/178/</link>
      <pubDate>Tue, 23 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/178/</guid>
      <description>&lt;p&gt;  经过一年半的努力，我们终于发布了Mono 3.0的正式版本。&lt;br&gt;
  就像我去年说的一样，我们会尽快推动Mono 3.0的正式版的发布。我们努力压缩进度，尽快地让每一个Mono开发者快点。这就意味着从此以后我们的主分支开发会走上一个正常进度，并且未来会有更伟大的版本出现在我们的主要分支中。&lt;br&gt;
Mono 3.0的 &lt;a href=&#34;http://www.mono-project.com/Release_Notes_Mono_3.0&#34;&gt;release notes&lt;/a&gt; 列出了3.0的新内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1、C＃异步编译器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2、统一的C＃编译器的所有配置文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3、4.5异步API简介&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4、集成新的微软的开放源代码的堆栈：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ASP.NET MVC 4&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ASP.NET WebPages&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Entity Framework&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Razor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;System.Json (replaces our own) System.Json（代替Mono自己的）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;新的高性能的垃圾收集器（SGEN - 许多性能和可扩展性方面的改进）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;大量的运行时和类库的改进。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;原文地址：&lt;a href=&#34;http://tirania.org/blog/archive/2012/Oct-22.html&#34;&gt;http://tirania.org/blog/archive/2012/Oct-22.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Memcached简介及相关访问客户端</title>
      <link>https://dodoro.chouxiangpai.com/archives/176/</link>
      <pubDate>Mon, 22 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/176/</guid>
      <description>&lt;p&gt;  Memcached是一个高性能的分布式内存对象缓存系统，用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数，从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程（daemon ）是用C写的，但是客户端可以用任何语言来编写，并通过memcached协议与守护进程通信。&lt;/p&gt;
&lt;p&gt;  Memcached：是守护程序，也就是服务端，它与分布式无关，它的下载地址是&lt;a href=&#34;http://memcached.org/&#34;&gt;http://memcached.org/&lt;/a&gt;；&lt;/p&gt;
&lt;p&gt;  Memcached的客户端：客户端是指通过各种语言（php、java、.net）访问Memcached服务端，客户端实现了分布式算法，这里需要注意，php有两个访问memcahced的客户端&lt;/p&gt;
&lt;p&gt;   php其中一个客户端是：memcache（下载地址：&lt;a href=&#34;http://php.net/manual/en/book.memcache.php&#34;&gt;http://php.net/manual/en/book.memcache.php&lt;/a&gt;），直接使用这个客户端的memcache.so或者memcache.dll文件就可以连接到Memcached服务端，不需要额外的其他组件，不过这个客户端的功能比较差，不支持CAS操作等；&lt;/p&gt;
&lt;p&gt;   php另外一个客户端是：memcached（下载地址：&lt;a href=&#34;http://php.net/manual/en/book.memcached.php&#34;&gt;http://php.net/manual/en/book.memcached.php&lt;/a&gt;），使用这个客户端，需要在客户端上安装libmemcached（下载地址：&lt;a href=&#34;http://libmemcached.org/libMemcached.html&#34;&gt;http://libmemcached.org/libMemcached.html&lt;/a&gt;）客户端，然后再引用memcached.so或者memcached.dll，这个客户端支持大量的操作，而且也非常稳定，建议使用这个客户端。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Mono 之 Jexus</title>
      <link>https://dodoro.chouxiangpai.com/archives/167/</link>
      <pubDate>Thu, 18 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/167/</guid>
      <description>&lt;h2 id=&#34;jexus简介&#34;&gt;Jexus简介&lt;/h2&gt;
&lt;p&gt;     Jexus web server for linux 是运行在Linux上的Web服务器。其安装和部署及其简单，直接支持Asp.net 。&lt;/p&gt;
&lt;h2 id=&#34;下载jexus&#34;&gt;下载Jexus&lt;/h2&gt;
&lt;p&gt;　　wget &lt;a href=&#34;http://linux.j66.net/down/jexus-5.0.2.tar.gz&#34;&gt;http://linux.j66.net/down/jexus-5.0.2.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后解压：&lt;/p&gt;
&lt;p&gt;    tar -zxv -f jexus-5.0.2.tar.gz&lt;/p&gt;
&lt;p&gt;打开readme.txt 文件查看详细的安装、配置说明；&lt;/p&gt;
&lt;p&gt;安装Jexus&lt;/p&gt;
&lt;p&gt;　　jexus 基本无需安装，只需要解压，然后注册一下全局程序集即可。&lt;/p&gt;
&lt;p&gt;1）新建一个 /etc/jws/ 文件夹： sudo mkdir /etc/jws/&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;拷贝解压好的文件到/etc/jws/ 文件夹中&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;3）进入 安装的文件夹， 运行sudo ./jws.regsvr&lt;/p&gt;
&lt;h2 id=&#34;运行测试&#34;&gt;运行测试&lt;/h2&gt;
&lt;p&gt;　　进入安装目录，运行sudo  ./jws.start&lt;/p&gt;
&lt;p&gt;打开浏览器输入 &lt;a href=&#34;http://localhost//info&#34;&gt;http://localhost//info&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果出现以下界面说明jexus 运行成功。&lt;/p&gt;
&lt;p&gt;如果没有 请查看一下log 文件，jexus 的默认日志文件夹为： log/jws.log&lt;/p&gt;
&lt;h2 id=&#34;web-server配置&#34;&gt;Web server配置&lt;/h2&gt;
&lt;p&gt;　　这里进行最简单的web站点配置，详细的配置信息可以查看 readme.txt文件。&lt;/p&gt;
&lt;p&gt; 输入vi siteconf/default&lt;/p&gt;
&lt;p&gt;修改其中的root 节为&lt;/p&gt;
&lt;p&gt;root=/ /home/ubuntu/www/monotest&lt;/p&gt;
&lt;p&gt;这里是设置URL的映射，前半部分表示虚拟目录根， 然后一个空格 后面表示网站的物理路径。&lt;/p&gt;
&lt;p&gt;添加：&lt;/p&gt;
&lt;p&gt;index=Default.aspx&lt;/p&gt;
&lt;p&gt;重启jexus.   可以使用 ./jws.restart 命令&lt;/p&gt;
&lt;p&gt;via：&lt;a href=&#34;http://www.cnblogs.com/keyindex/archive/2012/06/11/2545362.html&#34;&gt;http://www.cnblogs.com/keyindex/archive/2012/06/11/2545362.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Mono 之 Nginx</title>
      <link>https://dodoro.chouxiangpai.com/archives/170/</link>
      <pubDate>Thu, 18 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/170/</guid>
      <description>&lt;p&gt; 在Linux上部署网站需要先安装Web服务器端软件，IIS只能在windows上使用，相对的我们可以选择著名的apache、Ngnix等。本文将简单Nginx的安装、配置以及利用其运行一个简单的Asp.net 网站。&lt;/p&gt;
&lt;h2 id=&#34;nginx&#34;&gt;Nginx&lt;/h2&gt;
&lt;p&gt;    Nginx (Engine X)是一个高性能的Web服务器，由于其稳定、功能丰富、低资源消耗等特点，已经有很多网站利用它进行部署（国内不少大公司开始利用nginx 取代 apache，毕竟LAMP 太教条化了）。&lt;/p&gt;
&lt;p&gt;Nginx安装&lt;/p&gt;
&lt;p&gt;　　本文将从源码开始安装nginx 目前最新版为 1.2.0，所有的安装过程都是在Ubuntu操作系统下进行的。&lt;/p&gt;
&lt;p&gt;首先下载源码：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; wget http://nginx.org/download/nginx-1.2.0.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后解压&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;tar -zxv -f nginx-1.2.0.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;进入解压的目录后接着执行&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono</title>
      <link>https://dodoro.chouxiangpai.com/archives/155/</link>
      <pubDate>Tue, 16 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/155/</guid>
      <description>&lt;p&gt;Mono是一个由Novell公司（先前是Ximian）主持的项目。该项目的目标是创建一系列符合ECMA标准（Ecma-334 和 Ecma-335）的.NET工具，包括C#编译器和共通语言运行平台。与微软的.NET Framework不同，Mono项目不仅可以运行于Windows系统上，还可以运行于Linux，FreeBSD，Unix，Mac OS X和Solaris。 Mono现由Novell持有双重许可，这和Qt和Mozilla应用程序包的情况相似。Mono的C#编译器及其相关工具发布于GNU General Public License（GPL）之下，其运行时库发布于GNU Lesser General Public License（LGPL）之下，其类库发布于MIT License之下。这些均是开源协议因此Mono是一个开源软件。如果你打算向Mono贡献你的源码，则你须签署一个版权分派给Novell以允许它将这些代码在其它协议下再申请许可，从而允许Novell保留其双重许可的能力来持有Mono的商业协议。[1] 微软开发了一个称为共享源码公共语言基础（Shared Source Common Language Infrastructure，Shared Source CLI）的可用于FreeBSD，Windows和Mac OS X的.NET实现版本。微软的共享源码协议并不是开源软件协议，且可能对于社区来说也是不足够的（它明文禁止了对软件的商业用途）。我们还可以见到另外一个.NET实现版本，Portable.NET项目，该项目与Mono项目有着很多相同的目标。 Mono虚拟机包含一个实时编译引擎，该引擎可用于如下处理器：x86，SPARC，PowerPC，ARM，S390（32位模式和64位模式），x86-64，IA64和64位模式的SPARC。该虚拟机可以将代码实时编译或者预先编译到原生代码。对于那些没有列出来的系统，则使用的是代码解释器。&lt;/p&gt;</description>
    </item>
    <item>
      <title>过去，现在和未来</title>
      <link>https://dodoro.chouxiangpai.com/archives/146/</link>
      <pubDate>Mon, 15 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/146/</guid>
      <description>&lt;p&gt;马上就要27岁生日了，也就是说再过3年就“奔3”啦。毕业后已经很久没有总结自己的生活，一直都觉得每一次总结都是新的开始，犹如初中高中一样，每年都会有好几次的个人总结，目的就是希望自己有一个全新的开始。这种总结的习惯，一次一次让我相信自己可以重新再来，也许是因为这样的性格使然自己才可以走到今天。但也因为无数次给自己重新开始的机会，导致了自己总是不能专一地做一件事情。“而立之年”也许说来就来，该好好总结一下，并且规划好自己后面的生活了，不能总是毫无目的，见招拆招地生活下去了。&lt;/p&gt;
&lt;p&gt;工作四年，在程序、生活、工作、恋爱中摸索走过。我也知道了自己想要的是什么样的生活。1、爱情第一：与相爱的人组建的家庭，两个人的关系是最重要的，后代是上天给的礼物也是亲密的小客人，上一辈是帮助过的人尽到应有责任即可；2、健康第二：积极锻炼身体，保证健康的体魄，并且养成良好习惯；3、知识第三：为数学史做点事情，用c#和mono为自己创造财富并为其和开源世界做点小贡献。&lt;/p&gt;
&lt;p&gt;做一个勤奋又情趣的人，把羽毛球打好，可能关注网球；把吉他练好，好好学习唱歌；把菜做好，把美食研究透彻。&lt;/p&gt;
&lt;p&gt;人生其实很短暂，曾经的少年梦想要摘星取月、轰轰烈烈改变世界留名千古，但随着心智的长大，都被时间慢慢改变。之于我，幸而能于平凡中还保住一点点单纯的梦想，并与相爱的人共度余生，已深感满足。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用手机版WordPress界面插件 - WPtouch</title>
      <link>https://dodoro.chouxiangpai.com/archives/142/</link>
      <pubDate>Wed, 10 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/142/</guid>
      <description>&lt;p&gt;WPtouch 支持 iPod, iPhone, iPad, Android, 黑莓, Palm OS 等常用的触摸设备浏览器. 而且强大如一个网站管理工具, 免费版就可以进行一些常规的页面修改, 如选择是否显示文章 Tags, 分类, 作者信息, view more 链接, 菜单管理, 搜索, 分享按钮等常规的功能.&lt;/p&gt;</description>
    </item>
    <item>
      <title>十一：北戴河之旅</title>
      <link>https://dodoro.chouxiangpai.com/archives/201/</link>
      <pubDate>Wed, 10 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/201/</guid>
      <description>&lt;p&gt;答应过小咪每年都带她去北戴河看海，这次我们选择十一去。为了节省点成本，选择了T打头的火车，一上车马上就后悔了——环境实在是太差了！可能是因为前段时间度假都是坐高铁和飞机，习惯了旅途中舒适的感受，但是真的很恼火车上的环境，人多、难闻的方便面与各种味道的交融，幸亏回来的时候选择了动车。&lt;/p&gt;
&lt;p&gt;经过三个小时的车程，终于到北戴河火车站，去年来的时候这里还在建设，现在已经建好，按照高铁车站的规格建设，感觉还不错。公交经过海滨大道，窗外就能看到大海，依然是熟悉的感觉，毕竟是旅游区，没有特别大的变化。&lt;/p&gt;
&lt;p&gt;当天，到沙滩的时候太阳正在落山，可惜被大山挡住了，海边日出要比日落好看。傍晚在刘庄附近逛，吃小吃。记得去年五一来的时候刘庄正在进行整改，现在看来已经差不多了，相对规范了很多，当然吃饭也贵了很多，餐馆更奸诈了。晚饭，我们选了一家号称25年的老字号，没想到居然烂得透顶！点完菜，很久没上，好不容易上了一个鲜蘑肉末，居然是香菇油菜，问了好几次服务员，都说这就是鲜蘑肉末。我们彻底无语，想到也没吃他什么东西，立马转身就走，这是我们第一次“逃单”&amp;hellip;走出来后我的心一直扑通扑通地跳，呼呼~~&lt;/p&gt;
&lt;p&gt;第二天，本来打算起来看日出，没想到是太阳把我们照了起来&amp;hellip;于是到离酒店最近的沙滩走走，小咪一直说想钓鱼-_-午饭后，去了南戴河，今天风比较大，南戴河的沙滩已经没有去年那么柔和细致了。回来的路上，看到健身的单杠，我做了好几个引起向上，旁边一个小青年看见了也过来，手心向内做联系做了5个（明显在证明自己）。我跟小咪说：手心向内比较容易，我能做好几个，哼~&lt;/p&gt;
&lt;p&gt;第三天，上午去坐大船出海，这可是我们第一次驶入大海，之前不管是在这里还是三亚，都只是在沙滩。很大的游船，人也很多，看着长队，差点想下午再做，没想到船真大，我们最后上去的居然还很空旷，爽。辽阔的大海，宽广的海岸线，优雅的水母，真开心！我们光照相，刚半个小时大船就返回来了，很不甘心啊。于是，我拉着小咪说：我们混进下一轮队伍中上去，没想到真的成功了-_-（反正这次人很少）~~这一次认真感受着大海的平静和浩瀚，俩人依偎在一起，看着海面，真希望时间能停止。下午，租了双人自行车，沿着海边旗了好久，自从上次在桂林一起骑双人车，迄今已经6年了&amp;hellip;&lt;/p&gt;
&lt;p&gt;第四天，慵懒地起床，慢慢悠悠地坐上动车返京&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ios客户端开发使用框架</title>
      <link>https://dodoro.chouxiangpai.com/archives/122/</link>
      <pubDate>Sun, 12 Aug 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/122/</guid>
      <description>&lt;p&gt;这个月开始重启ios客户端的研发，之前做过一个图书软件，这次要做一个学术在线的客户端。&lt;br&gt;
这次用到了如下一些框架：&lt;br&gt;
&lt;strong&gt;FMDB&lt;/strong&gt;：一款轻量级的访问sqllite类库，非常强大 ，FMDB将SQLite API进行了很友好的封装，使用上非常方便，对于那些使用纯Sqlite API来进行数据库操作的app，可以考虑将其迁移到基于FMDB上，这对于以后数据库相关功能的开发维护，可以提高不少效率。&lt;br&gt;
&lt;strong&gt;ASIHTTPRequest&lt;/strong&gt;：一款访问网络的类库，支持断点续传。 ASIHTTPRequest就是一个对CFNetwork API进行了封装，并且使用起来非常简单的一套API，用Objective-C编写，可以很好的应用在Mac OS X系统和iOS平台的应用程序中。ASIHTTPRequest适用于基本的HTTP请求，和基于REST的服务之间的交互。&lt;br&gt;
**cocoa-aes：**一款进行进行aes加密解密的类库，我自己做了封装，支持aes的128对称加密算法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>软件奇才——安德斯·海尔斯伯格（Anders Hejlsberg)</title>
      <link>https://dodoro.chouxiangpai.com/archives/133/</link>
      <pubDate>Fri, 10 Aug 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/133/</guid>
      <description>&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;
&lt;p&gt;出生于哥本哈根，安德斯·海尔斯伯格曾在丹麦技术大学学习工程，但没有毕业，大学时期他曾替 Nascom microcomputer撰写程式，他曾为Nascom-2电脑撰写蓝标签（Blue Label） Pascal compiler，到了DOS时代他又重新改写这套compiler。当时他在丹麦拥有个叫Poly Data的公司，他编写了Compass Pascal编译器核心，后来叫Poly Pascal。1986年他首次认识了Philippe Kahn。&lt;/p&gt;
&lt;h2 id=&#34;在borland公司&#34;&gt;在Borland公司&lt;/h2&gt;
&lt;p&gt;安德斯·海尔斯伯格把Compass Pascal编译器核心授权给了美国Borland公司，并作为雇员加入Borland公司，并且是后来所有Turbo Pascal版本与Delphi前3个版本的架构师。Philippe Kahn为第一个版本的Turbo Pascal添加了用户界面与编辑器。&lt;/p&gt;
&lt;h2 id=&#34;加入微软公司&#34;&gt;加入微软公司&lt;/h2&gt;
&lt;p&gt;1996年Hejlsberg加入微软公司。据说，比尔·盖茨亲自参与了这次挖角行动，年薪三百万美金，并许诺安德斯·海尔斯伯格在微软将得到技术上的足够自由和资源支持[1]。据说该事件也是微软公司和Borland公司后续官司的导火索。&lt;/p&gt;
&lt;h2 id=&#34;在微软公司&#34;&gt;在微软公司&lt;/h2&gt;
&lt;p&gt;进入微软公司后，首先主持了Visual J++的开发工作，后来由于在Java开发工具授权问题上和Sun公司的纠纷，微软停止了Visual J++的后续开发。 这之后，作为.Net概念的发起人之一，安德斯·海尔斯伯格被任命为微软.Net的首席架构师，主持.Net的开发工作。&lt;/p&gt;
&lt;h2 id=&#34;人物生平&#34;&gt;人物生平&lt;/h2&gt;
&lt;p&gt;安德斯·海尔斯伯格（Anders Hejlsberg）曾在丹麦科技大学学习工程学。他第一次登上软件界历史舞台是在80年代早期，因为他为MS-DOS和CP/M设计了一个Pascal编译器。当时，还是一个小公司的Borland很快雇用了他，并买下了他的编译器，改称Turbo Pascal。在Borland，Hejlsberg继续开发Turbo Pascal，并最终带领他的小组设计了Turbo Pascal的替代品、开发工具史上的奇迹：Delphi。&lt;/p&gt;
&lt;p&gt;1996年，Anders Hejlsberg在Delphi 3发布前离开Borland去了微软（Microsoft）。&lt;/p&gt;
&lt;p&gt;在此之前，微软曾多次企图挖走Anders，但都没有成功。据信Anders去微软(主要)不是钱的问题，虽然微软的开价也相当有吸引力： 130万美元年薪外加股票期权和分红，总计超过300万美元。更主要的原因是Anders和Delphi开发组的其他成员在修改编译器的问题上发生了争执；还有，据Borland内部人讲，Anders认为自己不再是“不可缺少的人”。&lt;/p&gt;
&lt;p&gt;Anders在Delphi 3中几乎没有做什么工作，Chuck Jazdzewski扮演了一个更重要的角色。(Anders Ohlsson) Anders在Borland时把所有精力都放在了Pascal产品上，也需要新的挑战，这时Bill Gates的亲自邀请，许诺给与挑战的机会，Anders加入了微软就势在必行。&lt;/p&gt;
&lt;p&gt;微软用丰厚的薪水、股票认购权和巨额的加盟奖金雇请了 Hejlsberg 之后，Borland 曾提出通过不正当手段吸收新成员的控告。Borland 还曾声称 — 提供了很少的细节来支持指控 — Hejlsberg 正在开发“Delphi for Java”。这场诉讼虽然最终以 Borland 的胜利而收场；但Anders 已经在为微软工作了。　　1996年Anders来到微软后，直接主抓Visual J++的研发工作，并在1999年被授予“distinguished engineer”（卓越工程师），在微软仅有16人获得这样的荣誉。&lt;/p&gt;
&lt;p&gt;后来微软希望通过开发最新的软件开发语言来赢得软件开发者的拥戴，在微软公司把视窗操作系统和软件向网络迁移的新市场战略中，C#语言是最重要的环节。微软动用了最好的资源。Anders担任了C#语言的首席设计师，同时也是微软.NET战略构架的重要参与决策者。考虑一下Anders的经历，就不会奇怪微软将此重任交给他了。毕竟C#也不是他对软件开发方式重大变革的首次。现在经过几年时间的埋头苦干，C#已成为微软反击Java语言的最有力武器。&lt;/p&gt;
&lt;h2 id=&#34;业绩与成就&#34;&gt;业绩与成就　　&lt;/h2&gt;
&lt;p&gt;鉴于他为软件开发做出的巨大贡献，Anders在《Dr.Dobb&amp;rsquo;s》杂志的2001年西部会议上被授予“Prestigious Excellence in Programming Award”，《Dr.Dobb&amp;rsquo;s》杂志的主编Jonathan Erickson说：“这一荣誉，我们每年只颁给那些在软件开发领域做出非凡贡献的人员，Anders开发的C#和他整个职业生涯中为软件开发所做出的巨大贡献有目共睹，他无愧于这一荣誉！”&lt;/p&gt;
&lt;h2 id=&#34;社会评价&#34;&gt;社会评价&lt;/h2&gt;
&lt;p&gt;比尔盖茨也高度评价说：“我们为Anders获得这一荣誉感到无比自豪，Anders在C#创建中所做的努力将会改变现在的软件开发方式，并将在以后的十年继续产生影响。” “程序员是最好的职业”，Anders说：“每两年，CPU的速度要加倍，内存容量是原来的四倍，但是我们的大脑还是原来的大小，很显然，将需要更多的程序员来补充这些。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>跨平台移动开发商Xamarin融资1200万美元 用于提升服务</title>
      <link>https://dodoro.chouxiangpai.com/archives/129/</link>
      <pubDate>Wed, 08 Aug 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/129/</guid>
      <description>&lt;p&gt;北京时间7月25日消息，据国外媒体&lt;a href=&#34;http://allthingsd.com/20120724/mobile-coding-startup-xamarin-lands-12-million-from-charles-river-ignition-and-floodgate/&#34;&gt;allthingsd&lt;/a&gt;报道。近日，跨平台移动开发软件服务提供商Xamarin获得投资1200万美元，投资商分别是Charles River Ventures，Ignition Partners和Floodgate。&lt;/p&gt;
&lt;p&gt;Xamarin公司是由两位联合创始人Nat Friedman 和Miguel de Icaza于去年共同创办，发展至今，已拥有7500多位付费用户，其中包括音乐服务商Rdio。Xamarin的技术帮助开发人员通过一套常见的编程工具来编写Android，iOS和Windows Phone软件。&lt;/p&gt;
&lt;p&gt;Rdio工程副总裁Todd Beeman在声明中表示，“我们拥有了Xamarin就等于拥有了一切，节省了大量工程时间，通过跨平台特性打造华丽、高性能的本地应用。”&lt;/p&gt;
&lt;p&gt;Xamarin创始人Friedman称，此次资金将用于改善公司服务并建立销售和营销工作。&lt;/p&gt;
&lt;p&gt;Friedman在一份声明中表示，“我们的使命是提供快捷、简单、具有趣味性的服务来创建强大的移动应用。在第一年中，我们取得了优异的成绩。每月有1.2万个新开发者和上百万美元的收入。这笔资金将帮助我们履行使命，使更多开发人员参与进来。”&lt;/p&gt;
&lt;p&gt;原文链接：&lt;a href=&#34;http://allthingsd.com/20120724/mobile-coding-startup-xamarin-lands-12-million-from-charles-river-ignition-and-floodgate/&#34;&gt;allthingsd&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hadoop介绍</title>
      <link>https://dodoro.chouxiangpai.com/archives/116/</link>
      <pubDate>Tue, 24 Jul 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/116/</guid>
      <description>&lt;p&gt;Hadoop一个分布式系统基础架构，由Apache基金会开发。用户可以在不了解分布式底层细节的情况下，开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统（Hadoop Distributed File System），简称HDFS。HDFS有着高容错性的特点，并且设计用来部署在低廉的（low-cost）硬件上。而且它提供高传输率（high throughput）来访问应用程序的数据，适合那些有着超大数据集（large data set）的应用程序。HDFS放宽了（relax）POSIX的要求（requirements）这样可以流的形式访问（streaming access）文件系统中的数据。 Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的，因为它假设计算元素和存储会失败，因此它维护多个工作数据副本，确保能够针对失败的节点重新分布处理。Hadoop 是高效的，因为它以并行的方式工作，通过并行处理加快处理速度。Hadoop 还是可伸缩的，能够处理 PB 级数据。此外，Hadoop 依赖于社区服务器，因此它的成本比较低，任何人都可以使用。 Hadoop带有用 Java 语言编写的框架，因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写，比如 C++。 Hadoop主要包括如下子项目 &lt;strong&gt;Hadoop Common&lt;/strong&gt;: 在0.20及以前的版本中，包含HDFS、MapReduce和其他项目公共内容，从0.21开始HDFS和MapReduce被分离为独立的子项目，其余内容为Hadoop Common &lt;strong&gt;HDFS&lt;/strong&gt;: Hadoop 分布式文件系统 (Distributed File System) － HDFS (Hadoop Distributed File System) &lt;strong&gt;MapReduce&lt;/strong&gt;：并行计算框架，0.20前使用 org.apache.hadoop.mapred 旧接口，0.20版本开始引入org.apache.hadoop.mapreduce的新API &lt;strong&gt;HBase&lt;/strong&gt;: 类似Google BigTable的分布式NoSQL列数据库。（HBase 和 Avro 已经于2010年5月成为顶级 Apache 项目） &lt;strong&gt;Hive&lt;/strong&gt;：数据仓库工具，由Facebook贡献。 &lt;strong&gt;Zookeeper&lt;/strong&gt;：分布式锁设施，提供类似Google Chubby的功能，由Facebook贡献。 &lt;strong&gt;Avro&lt;/strong&gt;：新的数据序列化格式与传输工具，将逐步取代Hadoop原有的IPC机制。 要掌握hadoop，首先必须深入研究google的3篇论文：map-reduce、gfs和bigtable。&lt;/p&gt;</description>
    </item>
    <item>
      <title>博客定居于此</title>
      <link>https://dodoro.chouxiangpai.com/archives/1/</link>
      <pubDate>Mon, 16 Jul 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/1/</guid>
      <description>&lt;p&gt;博客搬家到此，dodoro的梦想天空，不会再变啦～&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们的五月，我们的三亚，我们的夏天</title>
      <link>https://dodoro.chouxiangpai.com/archives/247/</link>
      <pubDate>Tue, 26 Jun 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/247/</guid>
      <description>&lt;p&gt;这一天，早在一年前就在规划，虽然这个月来经历了太多太多，但终于还是能放下所有的工作，轻松地踏上长达半个月的旅行，这一次我们的目标是：三亚和江南。&lt;/p&gt;
&lt;p&gt;第一天，乘坐京沪高铁到上海虹桥，换成飞机飞往海南岛、飞往三亚。高铁是贵了点，但确实很舒服，安静、自由、舒适的环境，5个小时一晃就过去了，南航的飞机也还算不错，晚上9点我们终于登岛了。&lt;/p&gt;
&lt;p&gt;5月底的三亚很闷热，在7天待了一晚，第二天就奔向亚龙湾，入住仙人掌。和预想中的差不多，酒店很舒适，游泳池、绿化都很美，而亚龙湾的环境更是一流。迫不及待地，我们坐电瓶车到酒店的沙滩浴场，亚龙湾的海水非常干净，一片蓝蓝的海洋，这才是儿时梦想中的海洋啊。今天，我们第一次穿着泳装在海里游泳了。晚餐，一份红薯叶、一份文昌白切鸡、一份回锅肉，吃得很饱。&lt;/p&gt;
&lt;p&gt;第三天，丰盛的自助早点后，我们一起到海里游泳，沙滩太阳浴，一直在玩，睡，玩，度假的感觉真爽…晚餐，还是在仙人掌吃，晚饭后在酒店花园和泳池玩，也很开心。今天我还教会了小咪仰泳，喔～&lt;/p&gt;
&lt;p&gt;第四天，玩了一天，但是小咪开始不开心…是我太小气了(而明天我将被报应…)晚饭定了一个自助烧烤，一路慢慢走回来。目前不知道是不是因为这个自助烧烤埋下了明天的恶果…&lt;/p&gt;
&lt;p&gt;第五天，早上小咪又闹情绪了，去海边回来后，吃那个梅菜扣肉&amp;hellip;然后去市区买干粮，回来的路上肚子开始有些不舒服，进门后马上就稀稀了…而且很严重…晚饭也没有吃好，SPA后好多了，也许是老天注定，2012没有long…&lt;/p&gt;
&lt;p&gt;第六天，肚子好多了，带小伤入住红树林。红树林，很贵，我们期待也很高。果然，升级了豪华园景房，并且整个红树林的环境太美了。进入房间，小咪说：我自己的家也要这样。确实，不愧是五星级酒店，房间的设计摆设都特别好，一切都弄好了，就等着客人享受。而我们没有想到的是，红树林的沙滩上亚龙湾最好的，沙滩的沙子细腻，海风平缓，海水清澈见底，最让我们想不到的是：我们看到了海鱼，这些小鱼就在我们附近游泳。晚餐吃泰菜，典型的热带感觉，点了很多菜，冬阴功汤好喝，马拉盏炒茄子好吃，我完全吃撑了，真的很撑很撑…&lt;/p&gt;
&lt;p&gt;第七天，在亚龙湾的最后一天，在红树林的沙滩玩。没想到今天天气超好，沙滩、阳光和海水，还有快乐的两只熊。离开红树林前，小咪依依不舍，其实我也是…今天回到了三亚市区，午休后，去了免税店。小咪终于有了自己的channel香水。“用香水的女人有未来”，我跟小咪说：我们的未来不是梦～&lt;/p&gt;
&lt;p&gt;第八天，我们相约天涯海角，南天一柱。天气有些热，今天找到了吃好吃米粉的地方～港门粉、牛杂粉等等都吃。&lt;/p&gt;
&lt;p&gt;第九天，今天是三亚待的最后一天啦。我们决定重返亚龙湾，去海洋天堂公园。本来期待还挺高的，只可惜成了过山车旅游了…还好，看到了很多热带植物，而且从山上看到前几天我们住的亚龙湾～&lt;/p&gt;
&lt;p&gt;第十天，乘坐城际列出驶往美兰，沿路见到了很多很多椰子树，这果然是三亚～中午的飞机，小咪一直期待能从天上看到大海。随着飞机慢慢起飞，再见，三亚～再见，亚龙湾～&lt;/p&gt;</description>
    </item>
    <item>
      <title>HttpContext.Current用法,.ashx文件中使用Session,在非Web项目中使用HttpContext.Current</title>
      <link>https://dodoro.chouxiangpai.com/archives/29/</link>
      <pubDate>Mon, 21 May 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/29/</guid>
      <description>&lt;p&gt;在类库项目（或者其他非Web项目中）有时候需要HttpContext.Current这个方法，我们发现在类里面添加了引用“using System.Web;”之后还是不行，其实解解这个问题很简单，只需要在该项目的“引用”中添加System.Web这个引用就可以了。 另外值得注意的是，在非Web项目中使用HttpContext.Current.Cache、HttpContext.Current.Session等的时候，最好进行判断HttpContext.Current是否为空： if (HttpContext.Current != null &amp;amp;&amp;amp; HttpContext.Current.Session != null) { string test = HttpContext.Current.Session[&amp;ldquo;Session&amp;rdquo;].ToString(); } 这是因为有些情况下Session或者Cache等会被截断，比如在.ashx文件中，默认情况下就会截断Session。当然也可以通过设置在.ashx文件中使用Session，但是为了安全，最后进行判断。 如果要在.ashx文件中使用Session，那么要先引用“using System.Web.SessionState;”，然后继承接口“IRequiresSessionState”，下面是一个例子： using System; using System.Data; using System.Web; using System.Collections; using System.Web.Services; using System.Web.Services.Protocols; using System.Web.SessionState; namespace Lemon.Life.WebData {/// 演示“在.ashx中使用Session” [WebService(Namespace = &amp;ldquo;&lt;a href=&#34;http://tempuri.org/%22&#34;&gt;http://tempuri.org/&amp;quot;&lt;/a&gt;)] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Xml : IHttpHandler, IRequiresSessionState { public void ProcessRequest(HttpContext context) { context.Response.ContentType = &amp;ldquo;text/plain&amp;rdquo;; context.Session[&amp;ldquo;Test&amp;rdquo;] = &amp;ldquo;Test&amp;rdquo;; string test = context.Session[&amp;ldquo;Test&amp;rdquo;].ToString(); context.Response.Write(&amp;ldquo;Hello World&amp;rdquo;); } public bool IsReusable { get { return false;} } } }&lt;/p&gt;</description>
    </item>
    <item>
      <title>面向对象必知：继承本质论</title>
      <link>https://dodoro.chouxiangpai.com/archives/39/</link>
      <pubDate>Mon, 21 May 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/39/</guid>
      <description>&lt;p&gt;每个人开始学习面向对象的时候，基本上都感觉自己很能理解什么是“继承”，可是我相信没有多少个人是真正地理解了“继承的本质”。 继承，就是面向对象中的类与类直接的关系，继承的类叫做子类或者派生类，而被继承的泪叫做父类、基类或者超类。通过继承，子类可以拥有父类的属性、方法，同时子类也可以添加新的属性或者方法，还可以修改父类的方法和属性等。 在《你必须知道的.NET》中，作者列举了下面几个关于继承的要点： 1、继承是可以传递的，子类是对父类的扩展，必须继承父类方法，同时可以添加新方法； 2、子类可以调用父类的方法、属性和字段，但是父类不能够调用子类的方法、属性和字段； 3、虚方法如何实现覆写操作，使得父类指针可以指向子类对象成员； 4、子类不仅继承了父类公共成员，也继承了私有成员，只是在子类中不被访问； 5、new在虚方法继承中起阻断作用。 上面这五条几乎可以说是继承的本质，深刻理解了这些，基本可以说对继承掌握了，不过还有一个比较重要的地方需要注意，请看： #region 深入理解继承机制、多态、封装 public abstract class Animal { public abstract void ShowType(); public void Eat() { Console.WriteLine(&amp;ldquo;All Animals need eating!&amp;rdquo;); } } public class Bird : Animal { private string type = &amp;ldquo;Bird&amp;rdquo;; public override void ShowType() { Console.WriteLine(&amp;ldquo;Type is {0}&amp;rdquo;, type); } private string color; public string Color { get { return this.color; } set { this.color = value; } } } public class Chicken : Bird { private string type = &amp;ldquo;Chicken&amp;rdquo;; public override void ShowType() { Console.WriteLine(&amp;ldquo;Type is {0}&amp;rdquo;, type); } public void ShowColor() { Console.WriteLine(&amp;ldquo;Color is {0}&amp;rdquo;, Color); } } #endregion 上面是定义了一个抽象父类和两个子类，下面是调用方法： #region 深入理解OO思想 //Bird bird 创建的是一个Bird类型的引用，而new Bird()完成的是创建Bird对象，分配内存空间和初始化操作 Bird bird = new Bird(); Chicken chicken = new Chicken(); Bird bird2 = new Chicken();//请注意上面这里的区别 bird.ShowType(); chicken.ShowType(); bird2.ShowType(); #endregion 如果你能够了解为什么上面得到的结果，你就深刻理解了什么是继承了&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono重生？Mono创始人成立新公司Xamarin</title>
      <link>https://dodoro.chouxiangpai.com/archives/138/</link>
      <pubDate>Sun, 10 Jul 2011 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/138/</guid>
      <description>&lt;p&gt;Miguel de Icaza已成立了一个新的独立公司Xamarin，给Mono一个继续奋斗的机会。&lt;/p&gt;
&lt;p&gt;最近的消息称Attachmate公司对Mono框架不再感兴趣，这个消息已经北证实。Mono都创始人Miguel de Icaza终于打破了长久的沉默，透露他已经成立了Xamarin公司来继续支持Mono项目。&lt;/p&gt;
&lt;p&gt;Mono团队被Attachmate公司解雇，使Miguel de Icaza非常难过：&lt;/p&gt;
&lt;p&gt;一年以来我们一直都想把mono从Novell分离出来，大家一直认为独立成立一个公司将给Mono能带来更光明都未来。&lt;/p&gt;
&lt;p&gt;长话短说，分离 Mono都计划没被执行，反而在5月2日加拿大和美国都团队被遣散了，几天后欧洲、巴西和日本团队也不能幸免.这包括MonoTouch和 MonoDroid工程师以及其他主要Mono开发人员。虽然Attachmate公司解散了我们，但只要我们在Novell都一天我们会继续给我们都用 户提供技术支持。&lt;/p&gt;
&lt;p&gt;Mono项目有良好的前景，它为Linux以及IOS和Andriod提供C#以及框架支持。然而所有的实现都不是完善的。所以对开发人员都又局限 性。你不能简单快速的把.NET程序移植到Mono,因为缺失相应都框架类以及其它实现，尤其是WPF。同样的，如果使用Mono为iOS或 Andriod写个应用需要学习很多知识，它和在Windows Phone 7建立应用程序的关系不大。 还有在Mono中使用都微软的专利和知识产权问题，微软声称将来可能由于专利和知识产权而导致使用Mono的产生一系列的问题，现在不会对Mono有动作，但将来不见得。很多使用Mono做项目的开源支持者都视之为是个不定时炸-弹。&lt;/p&gt;
&lt;p&gt;除了Mono和Moonlight，Xamarin还计划商业产品，既定目标是：&lt;/p&gt;
&lt;p&gt;为iOS建立一个新都商业.NET;&lt;/p&gt;
&lt;p&gt;为Andriod建立一个新都商业.NET;&lt;/p&gt;
&lt;p&gt;继续为Mono和Moonlight贡献和开发;&lt;/p&gt;
&lt;p&gt;为Moonlight在移动领域以及苹果Appstore寻求机会;&lt;/p&gt;
&lt;p&gt;这两个商业项目需要更多都开发来为潜在的用户提供服务，需要更认真的工作。而且在移动领域以及苹果Appsotre来探索Moonlight的发展 也是件非常有趣的事情。Silerlight并没有成为微软声称的伟大的跨平台的统一者，目前来看貌似微软已经对其失去了兴趣。如果Mono能成为跨平台 的浏览器插件，可能会进一步触发微软的不定时炸-弹爆炸。这当然也不会被苹果所接受，因为这无疑是另一个Flash。&lt;/p&gt;
&lt;p&gt;当然一切都归结于资金，如果又足够的资金这个项目或许会有所成就，博客声称已经得到一些资金，而且还有在合同期的工程师们。这听起来比较危险，他们没有足够都资金，只能寄希望于一些勇敢都基金了。&lt;/p&gt;
&lt;p&gt;目前看来，Mono的用户都非常支持Miguel de Icaza和他的新公司。在他的博客评论中很多个人表示想投资，但前提是如果自己有钱。但这并不能对这事起到真正都改善作用。关键是.NET社区的反应以及微软的回应。&lt;/p&gt;
&lt;p&gt;如果你想帮助Mono，可用访问Xamarin的网站：Xamarin website&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET的Windows模拟身份验证,远程网络传输文件</title>
      <link>https://dodoro.chouxiangpai.com/archives/27/</link>
      <pubDate>Sat, 21 May 2011 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/27/</guid>
      <description>&lt;p&gt;在开发过程中，常常遇到这样的问题：文件，包括图片和文件上传到服务器，而Web服务器和文件服务器不是同一个，而且不在同一个域里面，那么针对于.NET应该如何处理这样的问题呢？ 可能很多高手一下子就知道如何解决，但是我确实是经过了一番努力才弄明白，下面就结束如何使用.NET的Windows模拟身份验证。 1、首先引用两个名称空间&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.Security.Principal;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.Runtime.InteropServices;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2、其次定义好模拟权限的调用方法&lt;/p&gt;
&lt;h1 id=&#34;region-权限模拟&#34;&gt;region 权限模拟&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; LOGON32_LOGON_INTERACTIVE = &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; LOGON32_PROVIDER_DEFAULT = &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[DllImport(&amp;#34;advapi32.dll&amp;#34;, CharSet = CharSet.Auto)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extern&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; LogonUser(String lpszUserName, String lpszDomain, String lpszPassword, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; dwLogonType, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; dwLogonProvider, &lt;span style=&#34;color:#66d9ef&#34;&gt;ref&lt;/span&gt; IntPtr phToken);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[DllImport(&amp;#34;advapi32.dll&amp;#34;, CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extern&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; DuplicateToken(IntPtr hToken, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; impersonationLevel, &lt;span style=&#34;color:#66d9ef&#34;&gt;ref&lt;/span&gt; IntPtr hNewToken);&amp;lt;summary&amp;gt;&lt;span style=&#34;color:#75715e&#34;&gt;/// 验证用户，并生成WindowsIdentity 实例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/summary&amp;gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; WindowsIdentity GetIdentity(String userName, String domain, String password)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IntPtr token = IntPtr.Zero;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IntPtr tokenDuplicate = IntPtr.Zero;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &lt;span style=&#34;color:#66d9ef&#34;&gt;ref&lt;/span&gt; token) == &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (DuplicateToken(token, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;ref&lt;/span&gt; tokenDuplicate) == &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; WindowsIdentity(tokenDuplicate);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; WindowsImpersonationContext GetContext()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WindowsIdentity identity = &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WindowsImpersonationContext impersonationContext = &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;identity = &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;.IsNullOrEmpty(user) ? &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; : GetIdentity(user, &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, pwd);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 使用用户凭证进行用户模拟&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;impersonationContext = (identity == &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;) ? &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; : identity.Impersonate();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; impersonationContext;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#endregion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;3、在调用身份模拟的函数中使用&lt;/p&gt;</description>
    </item>
    <item>
      <title>Js实现Cookie操作,JavaScript的Cookie操作,源代码</title>
      <link>https://dodoro.chouxiangpai.com/archives/61/</link>
      <pubDate>Sat, 21 May 2011 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/61/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Js实现Cookie操作,JavaScript的Cookie操作,源代码&lt;/strong&gt; 在JavaScript中如何实现Cookie操作呢，下面给出源代码实现：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SetCookie&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;days&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;days&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;days&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;exp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Date;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setTime&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;exp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getTime&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;days&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;document.&lt;span style=&#34;color:#a6e22e&#34;&gt;cookie&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;escape&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;;expires=&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;exp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toGMTString&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;; path=/&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetCookie&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;arr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;cookie&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; RegExp(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(^ )&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=([^;]*)(;$)&amp;#34;&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;arr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;unescape&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;arr&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]); &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>js弹出层,效果代码,鼠标移动消失</title>
      <link>https://dodoro.chouxiangpai.com/archives/59/</link>
      <pubDate>Sat, 21 May 2011 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/59/</guid>
      <description>&lt;p&gt;这两天要做一个JavaScript的弹出层效果，就是鼠标移动上面的时候弹出一个效果层，移开的时候就消失，网上搜索了一下，得到下面的一段实现代码： &lt;strong&gt;1、JavaScript部分&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(){&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;arguments&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;])&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;eval(&lt;span style=&#34;color:#a6e22e&#34;&gt;arguments&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]);}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;OverH&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;OverW&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeDesc&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeH&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeW&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;OpenDiv&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;_Dw&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;_Dh&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;_Desc&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BigBearLoading&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;innerHTML&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;OverH&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;_Dh&lt;/span&gt;;&lt;span style=&#34;color:#a6e22e&#34;&gt;OverW&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;_Dw&lt;/span&gt;;&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeDesc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;_Desc&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BigBearLoading&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;display&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;_Dw&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;_Dh&lt;/span&gt;){&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeH&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;ceil&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_Dh&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_Dw&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;))}&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;_Dw&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;_dh&lt;/span&gt;){&lt;span style=&#34;color:#a6e22e&#34;&gt;changew&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;math&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ceil&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_dw&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;_dh&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;))} &lt;span style=&#34;color:#a6e22e&#34;&gt;top&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(document.documentElement.clientHeight-10)/2+&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;left&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(document.documentElement.clientWidth-10)/2+&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nw&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10,Nh=&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;OverW&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeW&lt;/span&gt;)&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeW&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;Nh&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;OverH&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeH&lt;/span&gt;)&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeH&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nw&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nw&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeW&lt;/span&gt;;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nh&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nh&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeH&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;OverW&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;NwOverH&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nh&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;OverW&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nw&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BigBearLoading&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nw&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;px&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BigBearLoading&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;left&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;(document.&lt;span style=&#34;color:#a6e22e&#34;&gt;documentElement&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;clientWidth&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nw&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;px&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;OverH&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nh&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BigBearLoading&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;height&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nh&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;px&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BigBearLoading&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;top&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;(document.&lt;span style=&#34;color:#a6e22e&#34;&gt;documentElement&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;clientHeight&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nh&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;px&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;window.&lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OpenNow()&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nw&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;;&lt;span style=&#34;color:#a6e22e&#34;&gt;Nh&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;;&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeH&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;;&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeW&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BigBearLoading&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;innerHTML&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ChangeDesc&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CloseDiv&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BigBearLoading&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;display&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;none&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2、css部分&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;body&lt;/span&gt; {&lt;span style=&#34;color:#66d9ef&#34;&gt;margin&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#BigBearLoading {&lt;span style=&#34;color:#66d9ef&#34;&gt;position&lt;/span&gt;:&lt;span style=&#34;color:#66d9ef&#34;&gt;absolute&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;z-index&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;top&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;border&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;#666666&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;solid&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;background&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;#eeeeee&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;width&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;height&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;3、div部分 创建一个span，包含下面的内容： onmouseover=&amp;ldquo;javascript:OpenDiv(500,300,&amp;lsquo;有时间请经常来看看大熊工作室噢&amp;rsquo;)&amp;rdquo; onmouseout=&amp;ldquo;javascript:CloseDiv()&amp;rdquo; 请用鼠标移动到这里 创建一个div，设置为： id=&amp;ldquo;BigBearLoading&amp;rdquo; ondblclick=&amp;ldquo;this.style.display=&amp;lsquo;none&amp;rsquo;&amp;rdquo; style=&amp;ldquo;DISPLAY: none&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>设置Session永不过期,Session不过期</title>
      <link>https://dodoro.chouxiangpai.com/archives/31/</link>
      <pubDate>Sat, 21 May 2011 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/31/</guid>
      <description>&lt;p&gt;很多时候为了需要，必须使用Session，但是Session过期问题一直困扰很多人，我也是。通过网上的搜索，发现了可以通过两种方式了设置，但是只有一个可以永不过期。 保持Session的方法： （1）、设Session.timeout=-1，或小于0的数。这种方法肯定是不行的，session计算时间以分钟为单位，必须是大于等于1的整数。 （2）、设Session.timeout=99999。这种同样不行，Session有最大时间限制。 其实，Session最大值为24小时，也就是说你最大可以Session.timeout=1440，1441都是不可以有。 所以想通过设Session.timeout的过期时间让Session永不过期是不可能的。写到Cookies里是比较好的方法，但是Cookie非常的危险，如果在外面的电脑很容易被别人劫持，不安全！ 那么有没有一种方法可以保持Session呢，可以使用一种办法，就是在要保持session的页里设隐藏iframe 这个Iframe每隔一段时间刷新一次这个Iframe页面就可以了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>面向对象必知：深入理解对象</title>
      <link>https://dodoro.chouxiangpai.com/archives/37/</link>
      <pubDate>Sat, 21 May 2011 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/37/</guid>
      <description>&lt;p&gt;上一节讲到了类，这次讲对象。一个类可以创建对象，对象可以操作类里面的方法，也可以操作类从父类继承的合法方法，还可以操作其他类的共用方法。 在程序设计（这里都以C#语言为准）中的对象和人类世界中的是类似的，人类世界中每一个人都是一个对象，一个人有自己的姓名、身高等属性，一个人可以做很多事情，也受到很多约束；而程序设计里的对象就是模拟了人类世界的对象，一个对象必须要创建，这个对象在创建之时就确定了它的属性，这个对象可以有很多方法，这个对象受到访问权限的约束。 人类生活在人类社会这个时间里，而对象生存在.NET中的CLR环境；人类在社会里受到法律、风俗等约束，对象在CLR里也同样有着自己的一套约定，比如类型、语法等。 对象最为重要的是：有自己的属性（有如一个人的属性）、有自己可以访问的方法（有如一个人可以做的事情）、访问权限（有如一个人做什么事情受到的权限限制）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET内核揭秘</title>
      <link>https://dodoro.chouxiangpai.com/archives/23/</link>
      <pubDate>Fri, 21 May 2010 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/23/</guid>
      <description>&lt;p&gt;这两年来，越来越多的国内软件企业开始深入.NET底层开发，我也接到了不少企业的深度.NET培训邀约，在培训课程方面也有较为成熟的积累。决定动笔写作《.NET内核揭秘》（暂定名）一书。目前大致蓝图如下： 1. 对象里面到底装的是什么&amp;ndash;揭秘.NET类型封装 议题：程序构造的历史；代码段与数据段；对象、数据成员与函数成员；.NET对象到底有多大；.NET对象布局；简单值类型；string揭秘；数组揭秘….. 2. 程序运行之来龙去脉 &amp;ndash;揭秘CLR虚拟机执行系统 议题：JIT编译如何进行；系统如何加载类型；堆栈模型；如何使用应用程序域隔离代码；异常如何层层抛出….. 3. 对象的前生后世 &amp;ndash;揭秘.NET类型继承 议题：子类从父类继承了什么；子类与父类之间的类型关联；为什么可以将子类看作一个父类；静态类型与动态类型…… 4. 不要调用我，让我来调用你 &amp;ndash;揭秘.NET多态机制 议题：callvirt如何调用虚方法；虚方法表上都有什么；虚表指针什么时候使用；虚方法效率到底有多低…. 5. 数据与代码的博弈 &amp;ndash;揭秘.NET委托调用 议题：委托如何实现动态调用；委托类型内部构造；委托调用的效率；异步委托调用…… 6 托管对象的生与死 &amp;ndash;揭秘.NET垃圾收集 议题：垃圾收集器如何分配内存；垃圾收集器如何构造对象图；垃圾收集器如何搬移内存；垃圾收集器如何更新托管引用；垃圾收集器的性能到底如何….. 7. 插上元数据的翅膀 &amp;ndash; 揭秘.NET反射机制 议题：元数据是什么；元数据在哪里；如何反射类型；反射类型内部是什么；反射的效率到底有多低；反射的边界在哪里….. 8. 运行时泛型的算盘 &amp;ndash;揭秘.NET泛型实现 议题：泛型类型到底是什么；泛型类型与元数据；泛型类型到底如何实例化；泛型的约束与效率….. 如果这些问题是各位面临.NET所困惑的，我希望在本书中能够解答大家的疑惑。印象中有些读者对《.NET框架程&lt;/p&gt;</description>
    </item>
    <item>
      <title>C#实现代理访问网络资源,源代码实现,WebClient篇</title>
      <link>https://dodoro.chouxiangpai.com/archives/83/</link>
      <pubDate>Fri, 21 May 2010 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/83/</guid>
      <description>&lt;p&gt;很多公司都使用代理上网，这样当然是有原因的，因为要对公司员工访问网络进行监视，但是这很令开发人员郁闷，因为在程序中访问网络资源是需要自己设置代理认证的，我们公司就是这样的。幸亏不要紧，因为C#提供了针对访问网络资源代理的设置，今天来讲解WebClient代理问题。下面是一个实现的例子： private static string GetHtml(string url, EncodingType type, bool isByProxy) { WebClient webClient = new WebClient();//创建WebClient实例myWebClient if (isByProxy) { //创建代理服务器设置对象的实例 System.Net.WebProxy wp = new System.Net.WebProxy(&amp;ldquo;ISASRV:80&amp;rdquo;);//代理名称很端口，要根据你的情况来设置 //代理服务器需要验证 wp.BypassProxyOnLocal = false; //用户名密码，要根据你的情况来设置 wp.Credentials = new NetworkCredential(&amp;ldquo;UserName&amp;rdquo;, &amp;ldquo;PWD&amp;rdquo;, &amp;ldquo;hold&amp;rdquo;); //将代理服务器设置对象赋予全局设定 GlobalProxySelection.Select = wp; //获取或设置用于对向Internet 资源的请求进行身份验证的网络凭据。 webClient.Credentials = CredentialCache.DefaultCredentials; } byte[] pagedata = webClient.DownloadData(url);//先获取二进制的资源 }&lt;/p&gt;</description>
    </item>
    <item>
      <title>C#语言编程常用知识介绍</title>
      <link>https://dodoro.chouxiangpai.com/archives/73/</link>
      <pubDate>Fri, 21 May 2010 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/73/</guid>
      <description>&lt;p&gt;1)decimal，即十进制类型，是一种高精度、128位数据类型，它所表示的范围从大约1.0*10^-28到7.9*102^28的28至29位有效数字，注意该精度是以位数(digits)而不是以小数位(decimal places)来表示的。 2)decimal类型的变量在赋值时要在值后面加m下标，否则将被编译器当作double类型处理。 3)System.delegate 代表，引用类型，用于指向一个方法，定义方法：delegate int MyDelegate(); 4)多维数组定义一例：int[,] a=new int[,]{{1,2,3},{4,5,6}} 5)多维数组定义另一例：int[][] b=new int[3][];b[0]=new int[]{1,2,3};b[1]=new int[]{1,2,3,4,5,6};b[2]=new int[]{1,2,3,4,5,6,7,8,9}; 6)可以在变量名前面加上@，这主要是为了在与其他语言交互时避免冲突，一般情况下不推荐使用。 7)变量有以下以种：静态变量、非静态变量、数组元素、值能数、引用参数、输出参数、局部参数。 8)常量const修饰符有：new,public,protected,internal,private。 9)隐式枚举类型允许把十进制整数0转换为任何枚举类型，对应其他的整数则不存在这种隐式转换。 10)显式转换有可能丢失信息或导致异常抛出。 11)常量1.0默认为double类型，若要使用float型，可写成1.0f，即在数值后面加个f。 12)在逻辑表达式的求值过程中，不是所有的逻辑操作符都被执行，这种情况称为“短路”。 13)一般来说每个switch项都以break,goto case,goto default结束，但实际上任何一种不导致“遍历”的结构都是允许的。 14)C#中提供了析构函数，用于专门释放被占用的系统资源;析构函数的名称为“&lt;del&gt;类名”，它不接收任何参数，不返回值，不能被继承；C#提供垃圾收集器帮助我们解决释放资源的工作。 15) 方法修饰符可以是：new,public,protected,internal,private,static,virtual,sealed, override,abstract,extern。对于使用了abstract,extern修饰符的方法，方法的执行体仅仅只有一个简单的分号。其他的方法执行体应包含调用该方法所要执行的语句。 16)方法参数四种类型：值类型（不需修饰符）、引用类型（以ref修饰符声明）、输出类型（以out修饰符声明）、数组型类型（以params修饰符声明） 17)如果方法的形参表中包含了数组型参数，那么它必须在参数表中位于最后。另外，参数只允许是一维数组。比如：string[],string[][]类型都可以作为数组型参数，而string[,]则不能。最后，数组型参数不能再有ref和out修饰符。 18)静态方法只能访问类中的静态成员。 19)操作符重载方法：在定义类方法时，在方法名称后面加上“[空格]operator[空格][具体的操作符]”，如以下方法：public static Player operator ++(Player p){method body&amp;hellip;} 20)可重载的操作符：+,-,!,&lt;/del&gt;,++,&amp;ndash;,true,false,*,/,%,&amp;amp;,,^,&amp;laquo;,&amp;raquo;,==,!=,&amp;gt;,&amp;lt;,&amp;gt;=,&amp;lt;=。注：这里列出的操作符之间用“,”隔开。 21)不可重载的操作符：=,&amp;amp;&amp;amp;,,?:,new,typeof,sizeof,is 22)域的修饰符：new,public,protected,internal,private,static,readonly 23) 属性的修饰符：new,public,protected,internal,private,static,virtual,sealed, override,abstract，以上修饰符中，static,virtual,override,abstract不能同时使用。 24)事件的修饰符：new,public,protected,internal,private,static,virtual,sealed, override,abstract，以上修饰符中，static,virtual,override,abstract不能同时使用。 25)构造函数和析构函数不能被继承。 26)在派生类中覆盖基类中的方法时，在方法前面加上new关键字可关闭编译器的警告。 27)base关键字主要是为派生类调用基类成员提供一个简写的方法。 28)C#中的多态性有两种：编译时的多态性和运行时的多态性；编译时的多态性是通过重载实现的，运行时的多态性是通过虚成员实现的；编译时的多态性为我们提供了运行速度快的特点，而运行时的多态性则带来了高度的灵活和抽象的特点。 29)方法在使用了virtual修饰符之后，不允许再有static,abstract或override修饰符。 30)在派生类中重新定义基类的虚方法时，要求方法名称、返回值类型、参数表中的参数个数、类型、顺序都必须与基类中的虚方法完全一致。 31)在派生类中声明对虚方法的重载，要求在声明中加上override关键字，而且不能有new,static或virtual修饰符。 32)抽象类只能作为其他类的基类，不能被实例化。 33)只能在抽象类中声明抽象方法，抽象方法不包含具体的实现内容，不能再使用static或virtual修饰符，不能出现{}，如：public abstract void speak(); 34)抽象类中的抽象方法在派生类中不能使用base关键字来进行访问。 35)可以利用抽象方法来重载基类的虚方法，这时基类中的虚方法的执行代码这被“拦截”了。 36)密封类（使用sealed修饰符的类）不能被其他类继承。 37)将方法密封可防止方法所在的类的派生类对该方法重载。 38)不是类的每个成员方法都可以作为密封方法，密封方法必须对基类的虚方法进行重载，提供具体的实现方法。 39)和类的成员方法一样，我们也可以定义属性的重载、虚属性、抽象属性、以及密封属性的概念。 40)接口仅可以使用下列修饰符：new,public,protected,internal,private。 41)接口的成员可以是属性、方法、事件和索引指示器。 42)C#中类继承只允许单继承，但接口允许多继承，多个父接口之间用“,”隔开，被继承的接口应该是可以访问的，如从private类型和internal类型的接口中继承就是不允许的。 43)接口成员的默认访问方式是public，接口成员不能包含任何修饰符。 44)由于接口允许多继承，所以要注意接口成员的是否有二义性。 45)显式接口成员只能通过接口调用。 46)显式接口成员执行体不能使用任何访问修饰符。 47)使用private,protected和static修饰符的成员不能参与实现接口映射。 48)如果不显式地重新实现接口，派生类就无法改变从基类中继承来的接口映射。但是，当一个接口方法被映射到类的一个虚方法时，派生类就可以重载这个虚方法，并且改变这个接口的实现。 49)继承了接口实现的类可以对接口进行重实现。 50)有关接口的几个概念：显式接口成员执行体、 50) 各个流：Stream,BinaryReader,BinaryWriter,File,Directory,FileStream, TextReader,TextWriter,StringReader,StringWriter,StreamReader,StreamWriter, BufferedStream,MemoryStream,NetworkStream;对网络文件进行操作使用IsolatedStorage类处理，不用流。&lt;/p&gt;</description>
    </item>
    <item>
      <title>css样式控制标字数并且跟随省略号,css控制字数,省略号</title>
      <link>https://dodoro.chouxiangpai.com/archives/57/</link>
      <pubDate>Fri, 21 May 2010 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/57/</guid>
      <description>&lt;p&gt;相信很多人都遇到这样的问题：如何利用css样式来控制，网站查了资料，发现都是给出下面这样的解释： .txt {width:120px; overflow:hidden; text-overflow:ellipsis;} “overflow:hidden;”是隐藏显示不下的部分； “text-overflow:ellipsis;”是尾部跟随省略号。 这里一定要记住，必须设置宽度和行高，否则无法实现这样的效果。 上面这样的做法没有考虑浏览器直接的兼容，应该做成这样： *html ul.aboutnews li { width:46%;height:22px;float:left;line-height:180%;word-break:break-all;overflow:hidden;} *+html ul.aboutnews li { width:46%;height:22px;float:left; line-height:180%;word-break:break-all;overflow:hidden;}&lt;/p&gt;</description>
    </item>
    <item>
      <title>什么是.NET框架？</title>
      <link>https://dodoro.chouxiangpai.com/archives/21/</link>
      <pubDate>Fri, 21 May 2010 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/21/</guid>
      <description>&lt;p&gt;&lt;strong&gt;1、.NET框架的定义&lt;/strong&gt; 按照微软官方的说法：.NET框架是支持生成并且运行下一代应用程序和 XML Web Services 的内部 Windows 组件。也就是说，.NET框架是windows的一部分，只要是运行在windows操作系统下的程序都可以得到.NET框架的支持。其实微软的下一代windows平台（Vista和windows 7都支持.NET框架）。 &lt;strong&gt;2、.NET框架要实现的梦想&lt;/strong&gt; .NET框架是为了实现下列目标： （1）、提供一个一致的面向对象的编程环境，而无论对象代码是在本地存储和执行，还是在本地执行但在 Internet 上分布，或者是在远程执行的。 （2）、提供一个将软件部署和版本控制冲突最小化的代码执行环境。 （3）、提供一个可提高代码（包括由未知的或不完全受信任的第三方创建的代码）执行安全性的代码执行环境。 （4）、提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。 （5）、 使开发人员的经验在面对类型大不相同的应用程序（如基于 Windows 的应用程序和基于 Web 的应用程序）时保持一致。 （6）、按照工业标准生成所有通信，以确保基于 .NET框架的代码可与任何其他代码集成。 &lt;strong&gt;3、.NET框架的组成部分&lt;/strong&gt; .NET框架具有两个主要组件：&lt;strong&gt;公共语言运行库&lt;/strong&gt;和 &lt;strong&gt;.NET框架类库&lt;/strong&gt;。 对于一个刚刚学习.NET（无论是VB还是C#），接触的就是.NET框架类库，对于公共语言运行库只需要一般了解即可。 （1）、公共语言运行库是 .NET框架的基础。 您可以将运行库看作一个在执行时管理代码的代理，它提供内存管理、线程管理和远程处理等核心服务，并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上，代码管理的概念是运行库的基本原则。 （2）、.NET框架类库 .NET 框架的另一个主要组件是类库，它是一个综合性的面向对象的可重用类型集合，您可以使用它开发多种应用程序，这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序，也包括基于 ASP.NET 所提供的最新创新的应用程序（如 Web 窗体和 XML Web Services）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>学习C#编程语言的几个阶段</title>
      <link>https://dodoro.chouxiangpai.com/archives/75/</link>
      <pubDate>Fri, 21 May 2010 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/75/</guid>
      <description>&lt;p&gt;很多人在自己的简历里都写着精通C#编程语言，可是现实中真的有那么多高手吗？下面是李建忠（《Microsoft .NET框架程序设计》作者）对学习C#语言达到的境界的几个层次： 1. 基本运用C#语法，在各种工具和示例代码的支持下，完成一些基本程序任务 2. 熟练掌握面向对象与组件构造，知其然亦知其所以然，完成一般小规模信息管理类软件项目开发任务 3. 深入理解CLR内核机制，对各种类型与.NET平台机制的优缺点、适用场合、效率有清晰把握，能够完成技术复杂度比较高的项目。 4. 能够游刃有余把握松耦合原则,精准运用各种语言构造，架构大型软件项目。 5. 能够站在计算机抽象、系统和历史发展的高度来理解和把握编程语言 个人觉得自己只能够是出于2到3这个阶段。&lt;/p&gt;</description>
    </item>
    <item>
      <title>面向对象程序设计必知：深入理解类</title>
      <link>https://dodoro.chouxiangpai.com/archives/35/</link>
      <pubDate>Fri, 21 May 2010 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/35/</guid>
      <description>&lt;p&gt;人以类聚”，这个成语说明了类的概念，在面向对象设计中的类也是如此，一个类是一组东西的抽象，类可以有抽象出来的类（抽象类），也可以是具体的类，抽象类往往都有具体类，具体类负责实现抽象类定义的方法。一个类，里面定义了属于这个类别的东西共同拥有的属性和方法，比如Duck鸭子类，里面有叫声，羽毛等鸭子都有的属性，有游泳，叫等鸭子都有的方法。 在C#里类还分静态类和非静态类，最大的区别是静态类里必须都是静态方法，静态类必须用类名去访问里面的方法，静态类是编译时就确定的；非静态类必须先创建一个实例对象，然后才能去访问类里的成员和方法，非静态类是动态绑定的，也就是在执行的时候才确定要执行什么方法。 类有修饰它的关键字：Public、Protected，Private。这几个关键字代表的意思是： 1、Public：公共的类，这个类可以在外面的类被访问到； 2、Protected：私有的类，这个类可以在继承它的类被访问到； 3、Private：私有的类，这个类不能在任何其他外面的被类访问到。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visual Studio常用快捷键</title>
      <link>https://dodoro.chouxiangpai.com/archives/19/</link>
      <pubDate>Mon, 25 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/19/</guid>
      <description>&lt;p&gt;窗口快捷键 Ctrl+W,W: 浏览器窗口 Ctrl+W,S: 解决方案管理器 Ctrl+W,C: 类视图 Ctrl+W,E: 错误列表 Ctrl+W,O: 输出视图 Ctrl+W,P: 属性窗口 Ctrl+W,T: 任务列表 Ctrl+W,X: 工具箱 Ctrl+W,B: 书签窗口 Ctrl+W,U: 文档大纲 Ctrl+D,B: 断点窗口 Ctrl+D,I: 即时窗口 Ctrl+Tab: 活动窗体切换 Ctrl+Shift+N: 新建项目 Ctrl+Shift+O: 打开项目 Ctrl+Shift+S: 全部保存 Shift+Alt+C: 新建类 Ctrl+Shift+A: 新建项&lt;/p&gt;
&lt;p&gt;编辑快捷键 Shift+Alt+Enter: 切换全屏编辑 Ctrl+B,T / Ctrl+K,K: 切换书签开关 Ctrl+B,N / Ctrl+K,N: 移动到下一书签 Ctrl+B,P: 移动到上一书签 Ctrl+B,C: 清除全部标签 Ctrl+I: 渐进式搜索 Ctrl+Shift+I: 反向渐进式搜索 Ctrl+F: 查找 Ctrl+Shift+F: 在文件中查找 F3: 查找下一个 Shift+F3: 查找上一个 Ctrl+H: 替换 Ctrl+Shift+H: 在文件中替换 Alt+F12: 查找符号(列出所有查找结果) Ctrl+Shift+V: 剪贴板循环 Ctrl+左右箭头键: 一次可以移动一个单词 Ctrl+上下箭头键: 滚动代码屏幕，但不移动光标位置。 Ctrl+Shift+L: 删除当前行 Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态 Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态 Ctrl+M,P: 停止大纲显示 Ctrl+E,S: 查看空白 Ctrl+E,W: 自动换行 Ctrl+G: 转到指定行 Shift+Alt+箭头键: 选择矩形文本 Alt+鼠标左按钮: 选择矩形文本 Ctrl+Shift+U: 全部变为大写 Ctrl+U: 全部变为小写&lt;/p&gt;</description>
    </item>
    <item>
      <title>提高.NET性能的十大方法</title>
      <link>https://dodoro.chouxiangpai.com/archives/16/</link>
      <pubDate>Fri, 22 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/16/</guid>
      <description>&lt;p&gt;&lt;strong&gt;第一、返回多个数据集&lt;/strong&gt; 　　如果你是用动态的SQL语句来返回多个数据集，那我建议你用存储过程来替代动态的SQL语句。是否把业务逻辑写到存储过程中，这个有点争议。但是我认为，把业务逻辑写到存储过程里面可以限制返回结果集的大小，减小网络数据的流量，在逻辑层也不用在过滤数据，这是一个好事情。 用SqlCommand对象的ExecuteReader方法返回一个强类型的业务对象，再调用NextResult方法来移动数据集指针来定位数据集。示例一演示了一个返回多个ArrayList强类型对象的例子。只从数据库中返回你需要的数据可以大大的减小你的服务器所耗用的内存。 第二、对数据进行分页 一个好的解决方案是写一个分页的存储过程，例子2是一个用于对Northwind数据库orders表的分页存储过程。你只需要传当前页码，每页显示的条数两个参数进来，存储过程会返回相应的结果。 在服务器端，我专门写了一个分页的控件来处理数据的分页，在这里，我用了第一个方法，在一个存储过程里面返回了两个结果集：数据记录总数和要求的结果集。 返回的记录总数取决于要执行查询，例如，一个where条件可以限制返回的结果集的大小。因为在分页界面中必须要根据数据集记录的大小来计算总的页数，所以必须要返回结果集的记录数。例如，如果一共有1000000条记录，如果用where条件就可以过滤成只返回1000条记录，存储过程的分页逻辑应该知道返回那些需要显示的数据。 &lt;strong&gt;第三、使用连接池&lt;/strong&gt; 要用连接池优化，有两条规则，第一，打开连接，处理数据，然后关闭连接。如果你必须在每次请求中多次打开或关闭连接，这好过一直打开一个边接，然后把它传到各个方法中。第二，用相同的连接字符串（或者用相同的用户标识，当你用集成认证的时候）。如果你没有用相同的连接字符串，如你用基于登录用户的连接字符串，这将不能利用连接池的优化功能。如果你用的是集成的论证，因为用户很多，所以你也不能充分利用连接池的优化功能。.NET CLR提供了一个数据性能计数器，它在我们需要跟踪程序性能特性的时候非常有用，当然也包括连接池的跟踪了。 无论你的应用程序什么时候要连在另一台机子的资源，如数据库，你都应该重点优化你连资源所花的时间，接收和发送数据的时间，以及往返回之间的次数。优化你的应用程序中的每一个处理点（process hop），它是提高你的应用的性能的出发点。 应用程序层包含与数据层连接，传送数据到相应的类的实例以及业务处理的逻辑。例如，在Community Server中，要组装一个Forums或者Threads集合，然后应用业务逻辑，如授权，更重要的，这里要完成缓存逻辑。 &lt;strong&gt;第四、充分利用ASP.NET缓存机制&lt;/strong&gt; 如果你的组件是要在Asp.net应用程序中运行，你只要把System.Web.dll引用到你的项目中就可以了。然后用HttpRuntime.Cache属性就可访问Cache了（也可以通过Page.Cache或HttpContext.Cache访问）。 有以下几条缓存数据的规则。第一，数据可能会被频繁的被使用，这种数据可以缓存。第二，数据的访问频率非常高，或者一个数据的访问频率不高，但是它的生存周期很长，这样的数据最好也缓存起来。第三是一个常常被忽略的问题，有时候我们缓存了太多数据，通常在一台X86的机子上，如果你要缓存的数据超过800M的话，就会出现内存溢出的错误。所以说缓存是有限的。换名话说，你应该估计缓存集的大小，把缓存集的大小限制在10以内，否则它可能会出问题。在Asp.net中，如果缓存过大的话也会报内存溢出错误，特别是如果缓存大的DataSet对象的时候。 &lt;strong&gt;第五、预请求缓存&lt;/strong&gt; 虽然Cache设计成用来保存某段时间的数据，而预请求缓存只是保存某个时期的某个请求的内容。如果某个请求的访问频率高，而且这个请求只需要提取，应用，修改或者更新数据一次。那么就可以预缓存该请求。我们举个例子来说明。 在CS的论坛应用程序中，每一个页面的服务器控件都要求得到用于决定它的皮肤（skin）的自定义的数据，以决定用哪个样式表及其它的一些个性化的东西。这里面的某些数据可能要长时间的保存，有些时间则不然，如控件的skin数据，它只需要应用一次，而后就可以一直使用。 要实现预请求缓存，用Asp.net 的HttpContext类，HttpContext类的实例在每一个请求中创建，在请求期间的任何地方都可以通过HttpContext.Current属性访问。HttpContext类有一个Items集合属性，在请求期间所有的对象和数据都被添加到这个集合中缓存起来。和你用Cache缓存访问频率高数据一样，你可以用HttpContext.Items缓存那些每个请求都要用到的基础数据。它背后的逻辑很简单：我们向HttpContext.Items中添加一个数据，然后再从它里面读出数据。 &lt;strong&gt;第六、后台处理优化&lt;/strong&gt; 你只要简单的把下面的这一行代码复制到你的页面中就可以实现了：&amp;lt;%@ PageOutputCache VaryByParams=”none” Duration=”60” %&amp;gt; 你就可以有效的利用第一次请求里生成的页面输出缓存内容，60秒后重新生成一道页面内容。这种技术其实也是运用一些低层的Cache API来实现。用页面输出缓存有几个参数可以配置，如上面所说的VaryByParams参数，该参数表示什么时候触发重输出的条件，也可以指定在Http Get或Http Post 请求模式下缓存输出。例如当我们设置该参数为VaryByParams=”Report”的时候，default.aspx?Report=1或者default.aspx?Report=2请求的输出都会被缓存起来。参数的值可以是多个用分号隔开参数。 许多人都没有意识到当用页面输出缓存的时候，asp.net也会生成HTTP头集（HTTP Header）保存在下游的　　虽然用页面输出缓存不提高你的应用程序性能，但是它能减少了从的服务器中加载已缓存页面内容的次数。当然，这仅限于缓存匿名用户可以访问的页面。因为一旦页面被缓存后，就不能再执行授权操作了。 &lt;strong&gt;第八、 用IIS6.0的Kernel Caching&lt;/strong&gt; 如果你的应用程序没用运行在IIS6.0(windows server 2003)中，那么你就失去了一些很好的提高应用程序性能的方法。在第七个方法中，我讲了用页面输出缓存提高应用程序的性能的方法。在IIS5.0中，当一个请求到来到IIS后，IIS会把它转给asp.net，当应用了页面输出缓存时，ASP.NET中的HttpHandler会接到该请求，HttpHandler从缓存中把内容取出来并返回。 &lt;strong&gt;第九、 用Gzip压缩数据&lt;/strong&gt; 除非你的CPU占用率太高了，才有必要用提升服务器性能的技巧。用gzip压缩数据的方法可以减少你发送到服务端的数据量，也可以提高页面的运行速度，同时也减少了网络的流量。怎么样更好的压缩数据取决于你要发送的数据，还有就是客户端的浏览器支不支持（IIS把用gzip压缩后的数据发送到客户端，客户端要支持gzip才能解析，IE6.0和Firefox都支持）。这样你的服务器每秒能多响应一些请求，同样，你也减少了发送响应的数据量，也就能多发送一些请求了。 好消息，gzip压缩已经被集成在IIS6.0中了，它比IIS5.0中gzip更好。不幸的是，在IIS6.0中启用gzip压缩，你不能在IIS6.0的属性对话中设置。IIS开发团队把gzip压缩功能开发出来了，但他们却忘了在管理员窗口中让管理员能很方便的启用它。要启用gzip压缩，你只能深入IIS6.0的xml配置文件中修改它的配置。 &lt;strong&gt;第十、 合理选择服务器控件的ViewState&lt;/strong&gt; ViewState是asp.net中的一个特性，它用于把生成页面要用的一状态值保存在一个隐藏域中。当页面被回传到服务器时，服务器要解析，校验和应用ViewState中的数据以还原页面的控件树。ViewState是一个非常有用的特性，它能持久化客户端的状态而不用cookie或者服务器的内存。大部分的服务器控件都是用ViewState来持久化那些在页面中与用户交互的元素的状态值。例如，用以保存用于分页的当前页的页码。 用ViewState会带来一些负面的影响。首先，它加大的服务器的响应和请求的时间。其次，每次回传时都增加了序列化和反序列化数据的时间。最后，它还消耗了服务器更多的内存。&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET框架简单介绍</title>
      <link>https://dodoro.chouxiangpai.com/archives/14/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/14/</guid>
      <description>&lt;p&gt;我第一次接触.NET是在大一暑假（2005年），那时候学校有自己专门的网站，也是用ASP.NET开发的，而且全部由学生来管理开发，刚开始仅仅是出于对网站和编程的兴趣（当然也是为了能够谋求一个勤工助学的岗位）。 那个夏天很热，不过参加培训的地方很舒服，在一个大教室里，有空调。那时候对于网站开发、项目开发和.NET都是第一次。第一次接触css，第一次接触html，第一次接触C#，第一次接触.NET框架，第一次接触IIS，第一次接触项目概念&amp;hellip; 之前我自学过面向对象，对“类、对象、继承、多态”这些概念是懵懵懂懂的，培训之后也还是一知半解。 什么是.NET？这个问题解释太多了，我还是引用微软官方的解释： “.NET 是 Microsoft 的用以创建 XML Web 服务（下一代软件）平台，该平台将信息、设备和人以一种统一的、个性化的方式联系起来 “借助于 .NET 平台，可以创建和使用基于 XML 的应用程序、进程和 Web 站点以及服务，它们之间可以按设计、在任何平台或智能设备上共享和组合信息与功能，以向单位和个人提供定制好的解决方案 “.NET 是一个全面的产品家族，它建立在行业标准和 Internet 标准之上，提供开发（工具）、管理（服务器）、使用（构造块服务和智能客户端）以及 XML Web 服务体验（丰富的用户体验）。.NET 将成为您今天正在使用的 Microsoft 应用程序、工具和服务器的一部分，同时，新产品不断扩展 XML Web 的服务能力以满足您的所有业务需求。” 历史永远记住这一刻，美国时间2000年6月22日，全球IT界为之关注。 后来又学习C++，学习MFC，综合MFC和.NET框架，然后又看了侯捷先生的文章，终于对于框架编程有了比较深的理解，所以后来学习JavaScript框架等等都可以站在一个高度上理解了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET程序员重点学习和积累的技术要点</title>
      <link>https://dodoro.chouxiangpai.com/archives/11/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/11/</guid>
      <description>&lt;p&gt;我知道，一个人的生命是有限的，而工作时间更加有限（我的价值观是工作和事业是为了让生活更好）。基于此，我现在只能在有限的时间里做有限的事情，下面是自己对自己的规划： 一、职业规划 首先，踏踏实实做一个技术人员，在工作总学习和提高自己；然后，能够凭借自己的能力做到项目开发经理；最后，要么能够在企业里做管理层，要么回学校讲课，无论如何最好能够出一本技术书籍。 二、深入学习的技术 1、最重要的：C#和ASP.NET技术，JQuery技术，设计模式，面向对象技术，css和页面布局技术，网站架构技术（squid，memcached等），SQL Sever数据库技术； 2、其次的：PHP技术，Linux技术、MySQL技术； 3、最为基础和技术提高的：C语言技术，数据结构，算法技术，计算机技术（cpu，内存，IO等和程序设计相关的技术）。 三、最值得我去深入研究的技术 以下这些技术是我必须要去深入研究的，而且要花功夫研究： 1、C#语言、.NET框架、C语言； 2、数据结构、面向对象、设计模式、软件工程； 3、Memcached、JQuery(相当于JavaScript)、css。&lt;/p&gt;</description>
    </item>
    <item>
      <title>c# params,params用法,代码</title>
      <link>https://dodoro.chouxiangpai.com/archives/77/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/77/</guid>
      <description>&lt;p&gt;在C#语言里，params 关键字可以指定在参数数目可变处采用参数的方法参数。 把数组作为参数的一个关键字，目的是做出如 a(parm1,parm2.parm3,&amp;hellip;.parmn) ，这样调用方式的函数，也就是同一种类型的不定个数参数列表，如果声明时没用parms关键字就如下调用，实际上是一样的 a(new type[]{parm1,parm2.parm3,&amp;hellip;.parmn}); 在方法声明中的 params 关键字之后不允许任何其他参数，并且在方法声明中只允许一个 params 关键字，下面是具体示例代码： using System; public class MyClass { public static void UseParams(params int[] list) { for (int i = 0 ; i &amp;lt; list.Length; i++) { Console.WriteLine(list[i]); } Console.WriteLine(); } public static void UseParams2(params object[] list) { for (int i = 0 ; i &amp;lt; list.Length; i++) { Console.WriteLine(list[i]); } Console.WriteLine(); } static void Main() { UseParams(1, 2, 3); UseParams2(1, &amp;lsquo;a&amp;rsquo;, &amp;ldquo;test&amp;rdquo;); // An array of objects can also be passed, as long as // the array type matches the method being called. int[] myarray = new int[3] {10,11,12}; UseParams(myarray); } }&lt;/p&gt;</description>
    </item>
    <item>
      <title>C#基础学习：深入理解什么是委托</title>
      <link>https://dodoro.chouxiangpai.com/archives/69/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/69/</guid>
      <description>&lt;p&gt;深入理解什么是委托 委托就是函数指针，先定义了一个委托，然后将它的实例指向某个特定的方法(函数)，通过这个委托的实例就可以调用其方法。 1、要想使得委托可以工作，必须有定义好的方法(函数)，这是一种方式； 2、可以通过匿名方法来作为委托参数的一个代码块。 匿名方法其实就是在实例化委托的时候给委托定义了代码块，可以实现某些功能，再调用委托的时候就可以直接使用这些代码块了。 注意：匿名方法不能跳转到外部，外部也不能跳转到匿名方法；匿名方法内部不能访问安全代码，也不能在外部使用ref和out参数。 深入理解集合 在C#中应该能够灵活地使用数组列表、字典和集合，这样才可以获取程序的最佳性能。最主要的有下面这些：集合；数组列表；栈；队列；有序列表；字典。集合大都可以通过语句来实现访问： forreach(string item in Items) { writeline(item); } 1、数组列表(ArrayList) 常用的方法Add,Insert,RemoveAt,AddRange。 2、Stack类 适合于处理应用程序使用完后就删除的临时数据项，先进后出。 3、Queue类 和Stack差不多，只不过是先进先出。 4、SortedList类 在使用SortedList类的时候，每一项都会指定一个用于引用改项的标识键。可以通过GetKeyList()和GetValueList()来获取键和值。 5、字典和散列 字典和散列总是会跟HashTable联系起来。 深入理解泛型 引入泛型最大的好处就是避免大量的装箱和拆箱操作，而且能够简化大量代码。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C#常用函数列表(二)</title>
      <link>https://dodoro.chouxiangpai.com/archives/79/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/79/</guid>
      <description>&lt;p&gt;11、string str=Request.QueryString[&amp;ldquo;变量&amp;rdquo;]; 用超链接传送变量。如在任一页中建超链接href=&amp;ldquo;Edit.aspx?fbid=&amp;ldquo;23&amp;quot;点击.在Edit.aspx页中取值：String str=Request.QueryString[&amp;ldquo;fdid&amp;rdquo;]; 12、DOC对象.CreateElement(&amp;ldquo;新建节点名&amp;rdquo;); 创建XML文档新节点 13、父节点.AppendChild(子节点)； 将新建的子节点加到XML文档父节点下 14、 父节点.RemoveChild(节点); 删除节点 15、Response Response.Write(&amp;ldquo;字串&amp;rdquo;)；Response.Write(变量)；向页面输出。Response.Redirect(&amp;ldquo;URL地址&amp;rdquo;）； 跳转到URL指定的页面 16、char.IsWhiteSpce(字串变量，位数)&amp;ndash;逻辑型 查指定位置是否空字符；如：string str=&amp;ldquo;中国人&amp;quot;Response.Write(char.IsWhiteSpace(str,2));//结果为：True, 第一个字符是0位，2是第三个字符。 17、char.IsPunctuation(&amp;lsquo;字符&amp;rsquo;) &amp;ndash;逻辑型 查字符是否是标点符号如：Response.Write(char.IsPunctuation(&amp;lsquo;A&amp;rsquo;)); //返回：False 18、(int)&amp;lsquo;字符&amp;rsquo; 把字符转为数字，查代码点，注意是单引号。如：Response.Write((int)&amp;lsquo;中&amp;rsquo;); //结果为中字的代码：20013 19、(char)代码 把数字转为字符，查代码代表的字符。如：Response.Write((char)22269); //返回“国”字。 20、 Trim() 清除字串前后空格&lt;/p&gt;</description>
    </item>
    <item>
      <title>C#最常用函数</title>
      <link>https://dodoro.chouxiangpai.com/archives/71/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/71/</guid>
      <description>&lt;p&gt;以下是我们在开发过程中最为常用的一些函数： 1、DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.DateTime.Now; 1.2 取当前年 int 年=currentTime.Year; 1.3 取当前月 int 月=currentTime.Month; 1.4 取当前日 int 日=currentTime.Day; 1.5 取当前时 int 时=currentTime.Hour; 1.6 取当前分 int 分=currentTime.Minute; 1.7 取当前秒 int 秒=currentTime.Second; 1.8 取当前毫秒 int 毫秒=currentTime.Millisecond; （变量可用中文） 2、Int32.Parse(变量) Int32.Parse(&amp;ldquo;常量&amp;rdquo;) 字符型转换 转为32位数字型 3、 变量.ToString() 字符型转换 转为字符串 12345.ToString(&amp;ldquo;n&amp;rdquo;); //生成 12,345.00 12345.ToString(&amp;ldquo;C&amp;rdquo;); //生成 ￥12,345.00 12345.ToString(&amp;ldquo;e&amp;rdquo;); //生成 1.234500e+004 12345.ToString(&amp;ldquo;f4&amp;rdquo;); //生成 12345.0000 12345.ToString(&amp;ldquo;x&amp;rdquo;); //生成 3039 (16进制) 12345.ToString(&amp;ldquo;p&amp;rdquo;); //生成 1,234,500.00% 4、变量.Length 数字型 取字串长度： 如： string str=&amp;ldquo;中国&amp;rdquo; int Len = str.Length ; //Len是自定义变量， str是求测的字串的变量名 5、System.Text.Encoding.Default.GetBytes(变量) 字码转换 转为比特码 如：byte[] bytStr = System.Text.Encoding.Default.GetBytes(str); 然后可得到比特长度： len = bytStr.Length; 6、System.Text.StringBuilder(&amp;quot;&amp;quot;) 字符串相加，（+号是不是也一样？） 如：System.Text.StringBuilder sb = new System.Text.StringBuilder(&amp;quot;&amp;quot;); sb.Append(&amp;ldquo;中华&amp;rdquo;); sb.Append(&amp;ldquo;人民&amp;rdquo;); sb.Append(&amp;ldquo;共和国&amp;rdquo;); 7、变量.Substring(参数1,参数2); 截取字串的一部分，参数1为左起始位数，参数2为截取几位。 如：string s1 = str.Substring(0,2); 8、String user_IP=Request.ServerVariables[&amp;ldquo;REMOTE_ADDR&amp;rdquo;].ToString(); 取远程用户IP地址 9、穿过代理服务器取远程用户真实IP地址： if(Request.ServerVariables[&amp;ldquo;HTTP_VIA&amp;rdquo;]!=null){ string user_IP=Request.ServerVariables[&amp;ldquo;HTTP_X_FORWARDED_FOR&amp;rdquo;].ToString(); }else{ string user_IP=Request.ServerVariables[&amp;ldquo;REMOTE_ADDR&amp;rdquo;].ToString(); } 10、 Session[&amp;ldquo;变量&amp;rdquo;]; 存取Session值； 如，赋值： Session[&amp;ldquo;username&amp;rdquo;]=&amp;ldquo;小布什&amp;rdquo; 取值： Object objName=Session[&amp;ldquo;username&amp;rdquo;]; String strName=objName.ToString(); 清空： Session.RemoveAll();&lt;/p&gt;</description>
    </item>
    <item>
      <title>IE下页面只有一个text回车将自动submit提交</title>
      <link>https://dodoro.chouxiangpai.com/archives/55/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/55/</guid>
      <description>&lt;p&gt;&lt;strong&gt;IE下页面只有一个text回车将自动submit提交&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是IE的一个缺陷，不过还是有解决的办法的：&lt;/p&gt;
&lt;p&gt;1、解决办法一：再增加一个text，然后隐藏这个text；&lt;/p&gt;
&lt;p&gt;2、解决办法二：可以在这个页面的form里面加上onsubmit=&amp;ldquo;return false;&amp;rdquo; 。&lt;/p&gt;</description>
    </item>
    <item>
      <title>JavaScript框架Jquery介绍</title>
      <link>https://dodoro.chouxiangpai.com/archives/63/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/63/</guid>
      <description>&lt;p&gt;想必很多人都知道JQuery框架了，现在有很多JavaScript的框架，但是真正非常优秀的框架还属JQuery，从微软在VS2008中专门为其提供只能提示这一侧面可以看得出来它的分量。 jQuery由美国人John Resig创建，至今已吸引了来自世界各地的众多javascript高手加入其team，包括来自德国的Jörn Zaefferer，罗马尼亚的Stefan Petre等等。　　jQuery是继prototype之后又一个优秀的Javascrīpt框架。其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。 它是轻量级的js库(压缩后只有21k) ，这是其它的js库所不及的，它兼容CSS3，还兼容各种浏览器 （IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+）。 jQuery是一个快速的，简洁的javaScript库，使用户能更方便地处理HTML documents、events、实现动画效果，并且方便地为网站提供AJAX交互。 jQuery还有一个比较大的优势是，它的文档说明很全，而且各种应用也说得很详细，同时还有许多成熟的插件可供选择。 jQuery能够使用户的html页保持代码和html内容分离，也就是说，不用再在html里面插入一堆js来调用命令了，只需定义id即可。 Jquery是继prototype之后又一个优秀的Javascrīpt框架。对prototype我使用不多，简单了解过。但使用上jquery之后，马上被她的优雅吸引住了。有人使用这样的一比喻来比较prototype和jquery：prototype就像Java，而jquery就像ruby.实际上我比较喜欢java（少接触Ruby 罢了）但是jquery的简单的实用的确有相当大的吸引力啊！在项目里我把jquery作为自己唯一的框架类包。使用其间也有一点点心得，其实这些心得，在jquery的文档上面也可能有讲，不过还是记下来，以备忘罢。 下面是最为简单的JQuery的应用： 告别代码重复的时代 还记得$()这个东西吧？prototype还是DWR都使用了这个函数代替document.getElementById()。没错，jquery也跟风了。为达到document.getElementById()的目的，jquery是这样写的：var someElement = $(&amp;quot;#myId&amp;quot;). jQuery是一个快速的，简洁的javaScript库，使用户能更方便地处理HTML documents、events、实现动画效果，并且方便地为网站提供AJAX交互。 jQuery还有一个比较大的优势是，它的文档说明很全，而且各种应用也说得很详细，同时还有许多成熟的插件可供选择。 jQuery能够使用户的html页保持代码和html内容分离，也就是说，不用再在html里面插入一堆js来调用命令了，只需定义id即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>JQuery下载,最新版本持续更新</title>
      <link>https://dodoro.chouxiangpai.com/archives/67/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/67/</guid>
      <description>&lt;p&gt;JQuery是一个非常酷的JavaScript框架，极大地简化了JavaScript的操作，本人这段时间开始学习它，并且用它，现在把它当成了一个类似.NET框架的开发类库了，每一个项目我都需要引用到这个框架。 这篇日志我提供JQuery下载地址，并且持续更新，希望给各位带来方便： 1、JQuery下载地址（1.3.2版本——最新发布版本） 精简版本： &lt;a href=&#34;http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2.min.js&#34;&gt;http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2.min.js&lt;/a&gt; 完全版本：http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2.js VS2008职能提示版本：http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2-vsdoc2.js 2、JQuery下载地址（1.3版本） 精简版本： &lt;a href=&#34;http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.min.js&#34;&gt;http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.min.js&lt;/a&gt; 完全版本：http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.js VS2008职能提示版本：http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3-vsdoc.js 3、JQuery下载地址（1.2.6版本——这是现在用得最多的版本） 精简版本： &lt;a href=&#34;http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.min.js&#34;&gt;http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.min.js&lt;/a&gt; 打包版本：http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.pack.js 完全版本：http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.js VS2008职能提示版本：http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6-vsdoc.js&lt;/p&gt;</description>
    </item>
    <item>
      <title>JQuery页面加载顺序</title>
      <link>https://dodoro.chouxiangpai.com/archives/65/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/65/</guid>
      <description>&lt;p&gt;&lt;strong&gt;JQuery页面加载顺序&lt;/strong&gt; JQuery在页面加载顺序方面提供了更好更合理的操作，在JavaScript中，window.onload事件下的代码是必须在所有页面元素都加载完成之后才执行（注意：包括了图片和文件等），可是有的时候我们希望hmtl代码加载完成之后（即DOM加载完成之后）就执行某些代码，在JQuery里有这样的函数： $(document).ready(function(){ alert(&amp;ldquo;hello&amp;rdquo;); }); 上面的代码在Dom结构被浏览器解析之后就可以执行了。当然也有其他人使用JavaScript来编写一些函数可以实现这样的功能，只不过JQuery更好。另外，使用这样的函数还有一个好处，就是可以基于同一个页面在加载结束之后执行多个脚本函数。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Web前端开发技术会议的心得体会</title>
      <link>https://dodoro.chouxiangpai.com/archives/53/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/53/</guid>
      <description>&lt;p&gt;去年参加了雅虎（Yahoo）举办的第二届D2网站Web前端技术会议，这是我第一次参加这样的技术会议，很多东西听得似懂非懂，周爱民讲web前端基本设计模式，还推荐了他自己写的一本书关于Javascript核心编程的书籍，其他几个都是雅虎的大牛在讲ajax应用，很可惜没有听到实质性的知识。 这里顺便介绍一下什么是D2，D2(Designer &amp;amp; Developer Frontend Technology Forum)号称是中国所有前端开发者的节日，包括前端设计师，前端开发工程师，和所有对前端技术感兴趣的人，D2目的是推动国内前端技术的发展，为国内前端 从业者提供一个自由交流，学习探讨技术的平台，促进国内行业标准跟国际的融合，发掘前端技术可以创造的更大价值。 第一届是淘宝网举办，也是他们发起的，第二届是由雅虎举办，第三届是土豆网举办，只参加过第二届，不知道后来举办得怎么样，不过通过这次的会议，至少明白了Web前端优化的重要性，也明白了像JavaScript、div、css这样的技术是很有讲究的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>什么叫设计模式</title>
      <link>https://dodoro.chouxiangpai.com/archives/89/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/89/</guid>
      <description>&lt;p&gt;现在网上有大量的文章写设计模式，无论是Gof的23种设计模式，还是其他自己创造处理的模式，但是在做这些工作之前应该深入理解什么叫设计模式。 总的来说，设计模式是一各个编程套路，类似于建筑设计，网上也有关于什么叫设计模式的经典分析，下面仅仅作为摘要简述： 1、来自豆瓣网的声音： 设计模式并不是什么新的东西。有些模式，你或许已经在实际项目中应用了很多年了，只是不知道人家原来是这么称呼它的！ 2、来自博客园的分析： 设计模式就是解决问题的一种方式，每一个模式描述了一个在我们周围不断重复发生的问题，以及该问题的解决方案的核心。这样你就可以一次又一次的使用该解决方案而不做重复性的劳动。设计模式有四个基本要素：模式名称、问题、解决方案、效果。 按照模式的目的性准则，模式可以分为创建型模式、结构型模式和行为型模式。创建型模式与对象的创建有关；结构型模式处理类和对象的组合；行为型模式对类和对象怎样交互和怎样分配职责进行描述。 按照模式的范围准则，模式可以分为类模式和对象模式。类模式处理类和子类的关系，这些关系通过继承建立，是静态的，在编译时就确定下来。对象模式是处理对象之间的关系，这些关系在运行时刻是可以变化的，更具动态性。 创建型类模式将对象的创建工作部分延迟到子类。创建型对象模式则是将它延迟到另一个对象中。 结构型类模式使用继承机制来组合类。结构型对象模式则描述了对象的组装方式。 行为型类模式使用继承描述算法和控制流。行为型对象模式描述使用一组对象怎样协作完成单个对象无法完成的任务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于Web性能分析和大型网站架构设计</title>
      <link>https://dodoro.chouxiangpai.com/archives/85/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/85/</guid>
      <description>&lt;p&gt;对于网站的理解，不同层次的人有不同的理解。一个网站可以简单地只有几个静态页面，花上一两个小时的时间就可以做好；但是也可能设计地非常精巧，能够承受亿万级的访问量，这样的网站设计起来就很复杂，而且会耗掉大量的人力物力。简单的网站提供的功能是有限的，作用也很小；但是对于大型的网站，就非常地有用，可以提供丰富多彩的功能，比如Google、百度、淘宝、新浪、搜狐等这些网站。 所有的网站开发人员都希望能够设计出性能稳定、负载能力大的网站，而一个对于web系统：最大的瓶颈是数据库；展现效率的决定性因素是前端调用和架构；系统健壮性的决定性因素是总体架构。 1、Web系统最大瓶颈是数据库 无论是使用哪类数据库管理软件（DB2、SQL Server、Oracle），数据库瓶颈是让网站开发者最为头痛的，每一次数据库连接操作都会消耗极大的系统资源（CPU资源、磁盘IO资源等），如果并发达到百万级，没有合理的数据库访问策略，那么网站肯定马上就瘫痪。解决这一问题，主要靠缓存机制，而在数据库缓存里最好用的莫过于Memcached（非常高效的分布式数据库缓存工具），有了Memcached，那么就可以大量地减少数据库链接数，而且可以进行分布式，极大了减小了数据库的压力，而且可以随时增加服务器扩充数据库负载能力。当然Memcached并非绝对灵丹妙药，必须在网站架构和程序代码上下功夫，比如数据库读写分离、缓存更新机制等。Memcached是针对Linux操作系统的，在Windows下也可以用，但并不一定能够达到很好的效果，幸运的是微软现在也自己开发了一套类似的东西：Velocity。 2、展现效率的决定性因素是前端调用和架构 如果你认真去分析淘宝网的页面代码，你就会发现这句话一点都没有错，当服务器响应快速了之后，如何能够展现地更快，就是前端优化，淘宝的前端开发工程师曾说过：页面响应80%时间来自js、css和html代码，由此可见前端的重要性。对于css和div，在兼容浏览器的前提下，最好能够尽量向web标准靠拢，对于js，我建议是使用稳定的js框架，个人喜欢JQuery。 3、系统健壮性的决定性因素是总体架构 网站的总体架构相当于一个人的骨架，没有好的架构不用提稳定性了。一个好的网站架构应该满足：三层（表现、逻辑、数据访问）分离、代码规范、可扩充，如果是大型网站，还要是分布式的、数据库读写分离。&lt;/p&gt;</description>
    </item>
    <item>
      <title>委托用法,C#源代码</title>
      <link>https://dodoro.chouxiangpai.com/archives/81/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/81/</guid>
      <description>&lt;p&gt;1、委托的概念 委托是C#一个非常重要的概念，也是很有用的，因为委托和事件结合起来使用可以完成很多功能（委托是事件的基础），而且可以通过委托来实现函数的匿名方法（通过将委托与命名方法或匿名方法关联，可以实例化委托）。 C#的委托类似于 C++ 中的函数指针；但是，委托是类型安全和可靠的。 2、委托的用法 委托类型声明的格式如下： public delegate void TestDelegate(string message);delegate 关键字用于声明一个引用类型，该引用类型可用于封装命名方法或匿名方法。 为了与命名方法一起使用，委托必须用具有可接受签名的方法进行实例化。有关方法签名中允许的方差度的更多信息，请参见委托中的协变和逆变。为了与匿名方法一起使用，委托和与之关联的代码必须一起声明。 3、实现代码 下面用C#代码来说明如何使用委托（参考自微软msdn）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Declare delegate -- defines required signature:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;delegate&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; SampleDelegate(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; message);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MainClass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Regular method that matches signature:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; SampleDelegateMethod(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; message)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(message);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Main()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Instantiate delegate with named method:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SampleDelegate d1 = SampleDelegateMethod;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Instantiate delegate with anonymous method:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SampleDelegate d2 = &lt;span style=&#34;color:#66d9ef&#34;&gt;delegate&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; message)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(message);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Invoke delegate d1:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;d1(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Invoke delegate d2:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;d2(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; World&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>网站被黑原因,sql注入式攻击,网站挂马防范</title>
      <link>https://dodoro.chouxiangpai.com/archives/87/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/87/</guid>
      <description>&lt;p&gt;1、网站被黑的原因 此次我们网站遭到的是sql注入攻击，具体攻击目标是数据库中存放2009年1月份数据表，黑客修改了这张表的一个字段的信息，导致了我们网站被嵌入带有威胁的js代码。 2、解决办法 到目前为止，我们已经把整个数据库的所有记录信息都进行了排查、消除了所有带有危害的数据，我们也已经把所有容易受到攻击的端口关闭（ftp的21端口）、并重新设置数据库的用户名和密码；另外，开发人员和系统人员都在努力寻找和修补在Web服务器上可能存在的sql注入漏洞。 3、未来防范策略 （1）、严格限制对sql server数据库的访问权限； （2）、对网站的sql语句进行全面排查，确保所有对数据库请求操作都进行字符串过滤； （3）、关闭除了80和443以外的其他所有端口； （4）、定期对数据库最可能受攻击的数据进行安全检查。&lt;/p&gt;</description>
    </item>
    <item>
      <title>设计模式：单件模式C#实现,源代码</title>
      <link>https://dodoro.chouxiangpai.com/archives/93/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/93/</guid>
      <description>&lt;p&gt;单件模式属于创建型模式，创造性模式主要是关注于如何以及何时创建对象。Singleton 模式可以保证一个类有且只有一个实例，并提供一个访问它的全局访问点。在程序设计过程中，有很多情况需要确保一个类只能有一个实例。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;namespace&lt;/span&gt; Singleton.Design.Pattern
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Program&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Main(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;[] args)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//Singleton e = new Singleton(); 这是错误的，因为已经设定为保护类型了&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Singleton instance = Singleton.Instance();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;instance.Show();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.ReadKey();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Singleton&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; Singleton instance;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;protected&lt;/span&gt; Singleton()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; Singleton Instance()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (instance == &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;instance = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Singleton();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; instance;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Show()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Singleton is Show now!&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>设计模式：抽象工厂模式C#实现,源代码</title>
      <link>https://dodoro.chouxiangpai.com/archives/95/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/95/</guid>
      <description>&lt;p&gt;前一篇文章介绍了简单工厂和工厂方法模式,这次讨论抽象工厂模式。 1、抽象工厂模式定义 抽象工厂模式也叫Abstract Factory模式，是由GoF提出的23种设计模式中的一种，也是对象创建型模式之一。它提供一个创建一系列相关或相互依赖对象的接口，而无需指定它们具体的类。它提供一个接口，以创建多个相关联的对象，而无需具体指定其具体的类。形象地说，它是一个工厂，能够生产众多产品。当用户需要某种产品的时候，不需要去关心这个产品的具体实现，而只需要指定产品的名称，抽象工厂就能够按你的要求进行生产。这里所指的产品，在C#中我们代表的是一个实例的类。 2、在什么情况下使用抽象工厂模式 在面向对象的程序设计中，我们经常会定义许多类，并通过new对其进行实例化。一旦类对象较多，且在实例化的时候，要做的初始化工作比较复杂的时候，我们就可以通过抽象工厂来管理。根据对象的性质和内容分别抽象成类，同时定义接口和接口方法。一旦定义了抽象工厂，实例类的工作就交给工厂，使用者只需要告诉工厂，你实例化的对象是什么就行了。 3、抽象工厂模式实现原理 抽象工厂模式（Abstract Factory）强调的是对象组合机制，由在父工厂内定义不同的“子工厂”对象来负责不同的目标对象的创建。请注意下面要点： （1）、 抽象工厂模式中，产品（目标对象）的使用者可能需要使用具体的子工厂来生成该产品； （2）、抽象工厂模式采用传参数的形式直接在父工厂内决定该产品对象应该由哪一个子工厂生产。即Abstract Factory模式中，跟客户打交道的只有抽象工厂与抽象产品，客户不需要知道产品由哪个工厂生产，也不需要知道被生产的是哪一种具体的产品； （3）、Factory Method模式中，省城的对象产品只限定于某一类产品；Abstract Factory模式则可以提供多个生产接口生成多类产品； （4） 、Abstract Factory模式Factory Method模式的更高层次的抽象，也更最具一般性。可以把Factory Method模式看作是Abstract Factory模式的一种特殊情况。 4、C#实现代码 using System; using System.Collections.Generic; using System.Text; namespace AbstractFactory.Design.Pattern { class Program { static void Main(string[] args) { IAbstratFactory factory1 = new ConcreteFactory1(); IAbstratFactory factory2 = new ConcreteFactory2(); Evironment e1 = new Evironment(factory1); Evironment e2 = new Evironment(factory2); e1.Show(); e2.Show(); e1.Run(); e2.Run(); Console.ReadKey(); } } //抽象产品 public interface IAbstractProduceA { void MakeProduce(); } public interface IAbstractProduceB { void InterTract(IAbstractProduceA a); } //具体产品 public class ProduceA1:IAbstractProduceA { public void MakeProduce() { Console.WriteLine(&amp;ldquo;ProduceA1 is Created now!&amp;rdquo;); } } public class ProduceB1 : IAbstractProduceB { public void InterTract(IAbstractProduceA a) { Console.WriteLine(this + &amp;quot; contact with &amp;quot; + a); } } public class ProduceA2 : IAbstractProduceA { public void MakeProduce() { Console.WriteLine(&amp;ldquo;ProduceA2 is Created now!&amp;rdquo;); } } public class ProduceB2 : IAbstractProduceB { public void InterTract(IAbstractProduceA a) { Console.WriteLine(this+&amp;quot; contact with &amp;ldquo;+a); } } //抽象工厂 public interface IAbstratFactory { IAbstractProduceA CreateProduceA(); IAbstractProduceB CreateProduceB(); } //具体工厂 public class ConcreteFactory1 : IAbstratFactory { public IAbstractProduceA CreateProduceA() { return new ProduceA1(); } public IAbstractProduceB CreateProduceB() { return new ProduceB1(); } } public class ConcreteFactory2 : IAbstratFactory { public IAbstractProduceA CreateProduceA() { return new ProduceA2(); } public IAbstractProduceB CreateProduceB() { return new ProduceB2(); } } //客户端 public class Evironment { private IAbstractProduceA abstractProdueA; private IAbstractProduceB abstractProdueB; public Evironment(IAbstratFactory factory) { abstractProdueA = factory.CreateProduceA(); abstractProdueB = factory.CreateProduceB(); } public void Show() { abstractProdueA.MakeProduce(); } public void Run() { abstractProdueB.InterTract(abstractProdueA); } }&lt;/p&gt;</description>
    </item>
    <item>
      <title>设计模式：简单工厂和工厂方法的C#实现</title>
      <link>https://dodoro.chouxiangpai.com/archives/91/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/91/</guid>
      <description>&lt;p&gt;设计模式中工厂方法包括了：简单工厂，工厂方法和抽象工厂，下面给出简单工厂和工厂方法的C#实现，你可以直接拷贝运行。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;namespace&lt;/span&gt; Factory.Design.Pattern
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Program&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Main(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;[] args)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//设计模式之简单工厂&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//LightSimpleFactory lsf = new LightSimpleFactory();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//Light lsb= lsf.Create(&amp;#34;Blue&amp;#34;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//Light lsr = lsf.Create(&amp;#34;Red&amp;#34;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//lsb.TurnOn();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//lsr.TurnOn();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//设计模式之工厂方法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CreatorMethod cb = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; BlueCreator();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CreatorMethod cr = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; RedCreator();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Light lb = cb.factory();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Light lr = cr.factory();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lb.TurnOn();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lr.TurnOn();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.ReadKey();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;abstract&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Light&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;abstract&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; TurnOn();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BlueLight&lt;/span&gt; : Light
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;override&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; TurnOn()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Blue Light is turn on!&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;RedLight&lt;/span&gt; : Light
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;override&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; TurnOn()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Console.WriteLine(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Red Light is turn on!&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#region&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;简单工厂&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;LightSimpleFactory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; Light Create(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; LightType)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;switch&lt;/span&gt; (LightType)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Blue&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; BlueLight();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Red&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; RedLight();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;default&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#endregion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#region&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;工厂方法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;abstract&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CreatorMethod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;abstract&lt;/span&gt; Light factory();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BlueCreator&lt;/span&gt; : CreatorMethod
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;override&lt;/span&gt; Light factory()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; BlueLight();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;RedCreator&lt;/span&gt; : CreatorMethod
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;override&lt;/span&gt; Light factory()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; RedLight();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#endregion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>面向对象思想研究心得体会</title>
      <link>https://dodoro.chouxiangpai.com/archives/33/</link>
      <pubDate>Thu, 21 May 2009 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/33/</guid>
      <description>&lt;p&gt;&lt;strong&gt;封装、继承、多态&lt;/strong&gt;，这三个是面向对象最重要的概念，抽象则是灵魂与核心。但是真正的面向对象决不是通过简单的继承、通过实现简单的多态来实现的，面向对象的核心在于它的几个指导原则（单一职责原则，接口隔离原则，依赖倒置原则，Liskov原则，开发封闭原则）下设计出相互作用的类。&lt;/p&gt;
&lt;p&gt;面向对象还有两个特别的名词：&lt;strong&gt;类，对象&lt;/strong&gt;。类与类之间的相关联系（聚合、泛化、依赖、关联），对象与对象之间的转换关系，这两者是真正考验一个人面向对象设计能力的指标。&lt;/p&gt;
&lt;p&gt;在一个面向对象系统中，大量的类在一起，它们不可能都没有相互关系，如果这样的话就无法完成优秀的面向对象设计架构。在C#中，对象与之间的关系，主要在于处理好父类对象和之类对象之间的引用关系。&lt;/p&gt;
&lt;p&gt;1、&lt;strong&gt;单一职责原则&lt;/strong&gt;：一个类，最好只做一件事，只有一个引起它变化的原因；&lt;/p&gt;
&lt;p&gt;2、&lt;strong&gt;开放封闭原则&lt;/strong&gt;：软件实体应该是可扩展，而不可修改的。也就是说扩展是开放的，修改是封闭的；&lt;/p&gt;
&lt;p&gt;3、&lt;strong&gt;依赖倒置原则&lt;/strong&gt;：依赖于抽象，而不是依赖与具体；&lt;/p&gt;
&lt;p&gt;4、&lt;strong&gt;接口隔离原则&lt;/strong&gt;：使用多个小的专门的接口，而不要使用一个大的总接口；&lt;/p&gt;
&lt;p&gt;5、&lt;strong&gt;Liskov原则&lt;/strong&gt;：子类必须能够替换其基类。 以上这五个原则在面向对象设计中非常关键，只有灵活地运用了才可以真正地掌握好面向对象思想。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数学与应用数学专业介绍，顺便给数学院学生的建议</title>
      <link>https://dodoro.chouxiangpai.com/archives/51/</link>
      <pubDate>Wed, 21 May 2008 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/51/</guid>
      <description>&lt;p&gt;数学与应用数学专业是一个已经开设了很久的专业，国家教育部在这个学科的教育研究上积累了很多极为宝贵的经验，大学在上个世纪五十年代就开设了数学与应用数学专业，在培养人才上有很丰富的经验，在科研上也取得许多优秀的成果，现在该专业已经成功获得了设立博士点的资格。 数学与应用数学专业是一个厚基础、宽口径并注重一定工程实践训练的理科专业，设置有应用数学与应用软件专业、计算数学与应用软件专业两个方向。本专业的学生主要学习数学与应用数学的基础理论、基本方法，受到数学模型、计算机和应用软件方面的基本训练，具有较好的科学素养。数学与应用数学专业开设了大量的数学课程和跟软件开发的相关课程，这些课程都由优秀的教授来上课。 大一学习最重要最基础的数学专业基础课，任课教师水平都很高，这些课程直接请博士生导师（至少是硕士生导师）上课，教学质量相当高；大二开设学习数学专业课程，最主要的有三门专业必修课：数学模型、运筹学和数学软件，前两门课程对培养学生应用数学能力和很大的帮助，后一门课程让学生懂得利用强大的数学软件去解决应用问题，还有其他一些课程是专业基础课程，对学生未来学习作用非常大；大三主要是专业选修课，学生可以根据自己的需要和自己的人生规划来选择这些课程，如果以后想从事软件开发的可以多选计算机软件开发相关的课程，如果想读研究生或者以后从事科研可以多选数学相关的课程。大四还有一些专业选修课（如何选择跟大三的原则一样），另外还有一个很重要的任务，就是做毕业设计。 学生在大二的时候还可以参加目前全国最大的大学生课外科技竞赛&amp;ndash;全国数学建模比赛，这是一项将数学知识直接应用到实际问题的比赛，参与者可以得到各方面的训练，对未来的发展有非常大的作用，用参加过的前辈们的话就是“一次参加，终岁受益”，而且获得全国奖的可以免试保送研究生，大学在数学建模比赛成绩也是非常好的，每年都有好几个队获全国奖。 目前大学本科正在越来越注重基础教育，许多家长希望自己的孩子本科毕业后继续就读研究生。如果在大学本科阶段把数学与应用数学专业学好了，也就是把研究生（除了数学专业）课程中的数学专业都学好了，在读研或者进行更高的深造的时候非常轻松。所以现在一些有见识的家长都选择让自己的孩子在本科阶段先读数学与应用数学，把基础打好。现在大学里很多非数学院的导师都希望数学院的学生报考他们的研究生，也非常欢迎数学专业的学生在读研究生的时候在他们院读。 即使不想读研究生，数学与应用数学专业也是一个很值得选择的专业，因为这个专业和计算机联系非常密切，本专业开设的关于计算机软件方面的课程和计算机专业基本一样（可能比计算机专业还多），学生通过数学思维的训练和熏陶之后从事软件开发是非常有前途的，目前在计算机应用领域中很强的人要么都是应用数学系毕业或者数学功底非常好的人。就算不从事软件开发，通过本专业的培养，可以很大地提高学生在工作后的后劲力，因为大学阶段已经把实际中常用到的几乎所有数学理论都疏通了，实际工作遇到的话应付起来就得心应手了。 当然本专业有一个特点就是开设课程比较多，学习也比较困难，但这并不影响学好这个专业。在大学，有优秀的教师和丰富的图书馆资源，如果脚踏实地跟老师好好学习，是几乎每个人都可以学好的（用老师的话说：以能考上大学的人的智商都可以学好）。来到数学学院，来到数学与应用数学专业后，找到自己的定位，发现自己的热爱，然后踏踏实实把每一个步走稳，毕业的时候，你就会发现自己真的实现人生理想了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数学史上孤独而伟大的数学家们</title>
      <link>https://dodoro.chouxiangpai.com/archives/41/</link>
      <pubDate>Wed, 21 May 2008 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/41/</guid>
      <description>&lt;p&gt;“这群孤独的人，他们在黑暗中探索，他们拔开笼罩在人类人类头上的迷雾，让真理的阳光照进人类的心灵。” “你是否知道，一千八百年前，一个伟大的希腊数学家构建起完美的圆锥曲线理论，曾经被人遗忘在历史角落。然而在近代科学的发展中，它成了行星运动理论的基础。” “也许你不知道加罗华、阿贝尔这两个名字，他们是数学王国里英年早逝的天才。在他们的时代里他们的伟大理论没有得到别人的认可，但是谁会知道，它们是现代数学的根基和量子物理学的理论基础。” “拉马努扬，一个生被贫困纠缠的传奇数学家，在印度那个小小的村庄里写下了一个一个轰动数学界的公式、定理。” “非欧几何的创立者之一，亚．鲍耶，因为追求自己的理论被作为数学家的父亲赶出家门，却依然不放弃。” “我们完全有理由相信，人类智慧碰撞出来的火花终有一天会将世界燃起。” “我们不应该忘记他们的名字，更不能忘记他们的精神。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>为基础数学而写：关于基础数学的若干想法</title>
      <link>https://dodoro.chouxiangpai.com/archives/43/</link>
      <pubDate>Mon, 21 May 2007 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/43/</guid>
      <description>&lt;p&gt;从数学分析、高等代数、解析几何走来，经过常微分方程、复变函数的洗礼，正在实变函数、抽象代数、概率论中摸索，还将走向数论、拓扑学、泛函分析。这一路上经历了太多的彷徨，但是我最终还是不愿放弃这些优美的符号和公式。 数学分析，这门被称为数学系最重要最基础也是最容易学的课程，先建立了无懈可击的实数理论，然后引出严密的极限理论，进而是连续、导数、微分积分等概念，再向多维、向更抽象的函数概念出发，最后结成这门课程丰硕的成果。 高等代数，数学高度抽象性的典型代表，代数方程、多项式、向量、矩阵、线形空间、线形变换、欧氏空间、辛空间等等这些字眼中还包括更加抽象的概念。但是前人们找到了研究它们的方法，代数方程的根、矩阵性质、不变子空间、商空间，把握了这四个东西就好了。 解析几何，数形结合的经典，忘不了的是用向量法和坐标法来研究几何，最让我难忘的是引入坐标变换法将二次曲面问题归为一个方程来研究，特别是只用短短几页书把高中的解析几何讲完了。 常微分方程，作为数学科学中永远不会衰竭的领域，微分方程无处不在。方程模型、解析解、数值解、稳定性分析，这是研究它的模式。 复变函数，又称解析函数论，工程运用必不可少的工具，从复数的实部虚部之间的关系找到一类有良好性质的函数，然后去研究它们得到许多深刻的定理，便创造了一门漂亮的学科。拉普拉斯变换、留数、黎曼猜想光彩照人。 实变函数，建立在公理侧度理论上的微积分，以勒贝格积分为基础，引出了这门号称最难学的课程（数学系的学生都认为是“天书”），现在还在学习中。 抽象代数，这门由女数学家埃米.诺特建立起来的理论，研究群、环、域，现在还在学习中。 概率论，数理统计的基础，随即事件的数学化，研究随即现象的规律性，现在还在学习中。 数论、拓扑学、泛函分析还等待着我去领略它们的精妙。&lt;/p&gt;</description>
    </item>
    <item>
      <title>为应用数学而写：关于应用数学的若干想法</title>
      <link>https://dodoro.chouxiangpai.com/archives/45/</link>
      <pubDate>Mon, 21 May 2007 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/45/</guid>
      <description>&lt;p&gt;应用数学主要就是三大块：统计、优化和数值分析。 数学模型，交给我了建模的思想和方法，特别让我知道了如何将数学理论实际化，数学建模给予我的是太多太多，一言难尽。 数学软件，Matlab几乎是无法超越的，数值计算的老大；Mathematica也不甘落后，符号计算的强者；SPSS是统计软件中正在称霸天下的霸主。数软节省了我的很多时间，并且交我要另外一种角度思考数学。 运筹学，优化计算是实际中必不可少的，并且带来的就是经济收益。线形规划、非线性规划、动态规划、网络计划图、库存论、排队论等都是经典理论。 数值分析：科学与工程计算的基础，在韩旭里老师这位计算数学“牛人”的指导下，现在正在学习中。 多元统计分析：自然科学与社会科学比不可少的分析工具，拥有了这个工具，再大的海量数据也可以找到眉目． 另外还有数值计算三大非经典算法：模拟退火算法、遗传算法、神经网络算法，为鲁莽计算提供了方法；以及图论、科学与工程计算、数据挖掘应用数学分支，下一学年即将学习。 应用数学，现在学得都还很肤浅，所以未来两年的任务就是这方面了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数学建模比赛之后的感想</title>
      <link>https://dodoro.chouxiangpai.com/archives/49/</link>
      <pubDate>Mon, 21 May 2007 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/49/</guid>
      <description>&lt;p&gt;作为数学院的一员，像其他很多有梦想有激情的同学一样，刚刚来到大学的时候，我也是怀着自己半成熟的激情和梦想，在一片掌声走进大学的校门。来到一个新的环境，新奇、激动，那种心理是只有新生才可以体会的。当慢慢静下心来，在匆匆的、缓慢的、平静的、热烈的大学校园里，我选择做一个观看者，同时也在寻找自己大学的立足点。看着很多同学进学生会我也蠢蠢欲动，看着别人加入某某协会我也想加入进去，看着大家努力地学习我也背着书包往自习室图书馆跑．．．．．． 在经历了一段时间的大学生活的洗涤后，经过自己的漫漫寻求，我遇到了数学建模，我兴奋，怀着饱满的热情，我全力投入，我为她通宵达旦，为她成为图书馆的常客、成为数模论坛的网虫．．．．．．为她我投入了是很多很多，一步一步摸索，向前辈学习，和同学（我的同班同学小蔡）讨论，然后慢慢地走进了数模的世界。于是我真的找到了自己大学的热爱，并且她真的给了我很多，在学习中我掌握了网上快速收集资料的能力，包括在Google、Baidu、论坛、网页；在准备数模的过程中，我看到了应用数学的重要性，更看到了计算机软件在数学的强大作用，Mathlab、Mathematica、Maple、Lingo无疑是延长数学工作者寿命的良方、是搞科研的强有力工具；在参与数模中我学会了队员之间的团结协作，懂得了什么叫团队，而且更重要的是我的人生画下了重重的一笔，因为国赛那三天三夜的全力投入中我只睡了八个小时，而且也挺了过来，在美赛的那四天四夜我带领队友走过一道道坎，在想要放弃的时候走出低谷，打开路子．．．．．．数模结束了，但是对我来说又是一个开始，对于参赛的队员也是如此，不管是否获奖，结束后都是一个新的旅程。 在我探索数模的过程中，我多么希望有一群人在一起讨论，有人给我提示和解读数模。我是有想法就要尽力实现的人，所有决定在自己参加数模之后组织数模的热爱者，创立我们自己的组织，并且要传承下去，让后来者能够获得益处。于是有了今天的这份策划，希望参与过的和想参与的人员加入进来，这里是参赛过的队员实现自己梦想的又一个天地，这里是没有参加过数模的人的起点。 “一次参与，终生受益”这不是我自己说的，这是中国科技大学的第一、二批参赛过的队员的获奖感言中提出来的，而后来者，每每问到参加数模最大感想是什么，他们都说：一次参赛，终生受益。 年轻是资本，但我们不能挥霍，梦想需要有承载她的东西，加入我们吧，不管现在人家怎么评论数模，说她变质，说她没有能反映能力，但是请记住：这是连续几年国内最大课外科技竞赛活动、参与者逐年上升、她的获奖排名是大学排名的专项指标、几乎每个高校都为获奖者提供很多机会继续深造，而最重要的是：在你参与的过程中，你已经学到了极为价值的东西（只要你是抱着学习的心态，当然获奖是每个人的目标）。作为过来人，我可以保证，只要你用心投入，真正去体会数模的真谛，在这里你一定可以放飞你的理想，当你参与进来，并且坚持到最后的时候，回头看看自己走过的路，你会发现你已经成功了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>读《深入浅出MFC》和设计模式有感</title>
      <link>https://dodoro.chouxiangpai.com/archives/99/</link>
      <pubDate>Mon, 21 May 2007 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/99/</guid>
      <description>&lt;p&gt;这个学期开学初是进入大学最黑暗的时候,在打击后，我还是老老实实看书，图书馆已经是我的乐园。三月份过来，把《深入浅出MFC》和《设计模式》（就是美国“四人帮”写的那本）都通读了一遍，期间读了许多关于面向对象方法、分析和设计的书，就如我同学说的一样，“我发现了新的天地”。 软件设计，我最终还是选择了，其实与其说是我选择，不如说是被迫的，或者可以用我的话说是“抵制不住市场经济的诱惑”。但我知道我是为了自己的梦想，虽然已经不再是儿时的那个纯粹的梦想，但是这已经不重要了，因为真的是“理想如果不向实际做点妥协，理想就会归于尘土”，但我清楚现在最主要的还是如小熊说的“打扎实基础”。 读《深入浅出MFC》，感想很多，不想在这里谈什么体会（因为会是很粗陋的），还是引用书中打动自己的话以做些纪念：&lt;/p&gt;
&lt;p&gt;“ 程序设计领域里，每一个人都想飞； 但是，还没学会走之前，连跑都别想！”&lt;/p&gt;
&lt;p&gt;“ C++是一种扭转程序员思维模式的语言； 一个人思维模式的扭转，不可能轻而易举一蹴而就！”&lt;/p&gt;
&lt;p&gt;“ 如果MFC是箭， Visual C++ IDE（集成开发环境）便是弓， 强壮的弓，让箭飞得更远！”&lt;/p&gt;
&lt;p&gt;“ 只用一样东西，不明白它的道理，实在不高明。 演化（evolution）永远在进行， 这个世界却不是每天都有革命（revolution）发生， Application Framework在软件界确实称得上具有革命精神。”&lt;/p&gt;
&lt;p&gt;“ 带艺术气息的软件创作行为将在Application Framework出现后逐渐成为工匠技术， 而我们都将成为软件IC装配厂里的男工女工， 但，不是亨利.福特，我们有如何能够享受大众化的汽车， 或许以后会出现“纯手工精制”的软件， 可我自己从来不嫌机器馒头难吃！”&lt;/p&gt;
&lt;p&gt;“ 消息映射机制与命令传递， 活像是米若托斯的迷宫， 是MFC最曲折幽深的神秘地带！”&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
